41
AutoCAD .NET API / Не меняется ориентация листа
« Последний ответ от brook 17-09-2025, 17:54:20 »При создании Layout настраиваю формат и ориентацию листа, PlotRotation обновляется (по отладке смотрю), а PaperOrientation остаётся как был и в результате лист всё время горизонтальный, вне зависимости от PlotRotation
в командном методе такой код транзакции
в Extentions кусок такой :
McadViewPort -- вспомогательный класс со всеми настройками листа, который у меня в расчёте формируется.
что с ним не так?
в командном методе такой код транзакции
Код - C# [Выбрать]
- using (var tr = db.TransactionManager.StartTransaction())
- {
- var cult = new CultureInfo(SystemObjects.DynamicLinker.ProductLcid);
- //спрашиваем - получаем параметры листа
- mLayout.Name = GetUserInputString(dwg, "\nВведите имя нового листа: ", true);
- mLayout.FirstPage = GetUserBool(dwg, "\nЭто первая страница документа? 0 - нет, 1 - да ");
- mLayout.FormatString = GetUserInputString(dwg, "\nФормат добавляемого листа: ", false);
- mLayout.FullScreenFlag = GetUserBool(dwg, "\nБудет ли видовой экран занимать весь формат? 0 - нет, 1 - да ");
- mLayout.ModelStartPoint = GetUserInputPoint(dwg, "\nВведите нижнюю левую точку отображаемой модели: ");
- if (!mLayout.FullScreenFlag)
- mLayout.ModelEndPoint = GetUserInputPoint(dwg, "\nВведите верхнюю правую точку отображаемой модели: ");
- mLayout.ScaleFactor = GetUserInputDouble(dwg, "\nМасштаб модели будет 1 к ");
- // Create and select a new layout tab
- var layoutSId = LayoutManager.Current.CreateAndMakeLayoutCurrent(mLayout.Name);
- // Open the created layout
- var acLay = (Layout)tr.GetObject(layoutSId, OpenMode.ForWrite);
- // Make some settings on the layout and get its extents
- acLay.SetPlotSettings(
- //"ISO_full_bleed_2A0_(1189.00_x_1682.00_MM)", // Try this big boy!
- mLayout,
- "acad.ctb",
- "DWG To PDF.pc3",
- cult.EnglishName
- );
- var modelExtents = mLayout.GetModelExtens();
- acLay.ApplyToViewport(
- tr, 2,
- vp =>
- {
- // Size the viewport according to the extents calculated when
- // we set the PlotSettings (device, page size, etc.)
- // Use the standard 10% margin around the viewport
- // (found by measuring pixels on screenshots of Layout1, etc.)
- vp.ResizeViewport(mLayout.ViewPortExtents);
- vp.ViewCenter = (modelExtents.MinPoint + (modelExtents.MaxPoint - modelExtents.MinPoint) * 0.5).Strip();
- vp.ViewHeight = modelExtents.MaxPoint.Y - modelExtents.MinPoint.Y;
- vp.Layer = "Defpoints";
- //vp.CustomScale = (1 / mLayout.Scale);
- /*
- // Adjust the view so that the model contents fit
- if (ValidDbExtents(ext.MinPoint,ext.MaxPoint))
- {
- vp.FitContentToViewport(ext);
- }
- */
- // Finally we lock the view to prevent meddling
- if (mLayout.Scale == StandardScaleType.CustomScale)
- vp.CustomScale = 1 / mLayout.ScaleFactor;
- else
- vp.StandardScale = mLayout.Scale;
- vp.Locked = false;
- }
- );
- // Commit the transaction
- tr.Commit();
- }
в Extentions кусок такой :
Код - C# [Выбрать]
- public static void SetPlotSettings(
- this Layout lay, McadViewPort mcadLay, string styleSheet, string device, string local
- )
- {
- using (var ps = new PlotSettings(lay.ModelType))
- {
- ps.CopyFrom(lay);
- var psv = PlotSettingsValidator.Current;
- // Set the device
- var devs = psv.GetPlotDeviceList();
- if (devs.Contains(device))
- {
- psv.SetPlotConfigurationName(ps, device, null);
- psv.RefreshLists(ps);
- }
- // Set the media name/size
- var mns = psv.GetCanonicalMediaNameList(ps);
- var pageSize = mcadLay.GetPlotFormat();
- if (mns.Contains(pageSize))
- {
- psv.SetCanonicalMediaName(ps, pageSize);
- }
- // Set the pen settings
- var ssl = psv.GetPlotStyleSheetList();
- if (ssl.Contains(styleSheet))
- {
- psv.SetCurrentStyleSheet(ps, styleSheet);
- }
- psv.SetPlotRotation(ps, GetPlotRotation(mcadLay.Format));
- lay.UpgradeOpen();
- // Copy the PlotSettings data back to the Layout
- lay.CopyFrom(ps);
- }
- }
- public static PlotRotation GetPlotRotation(LayoutFormats format)
- {
- switch (format)
- {
- case LayoutFormats.A4:
- case LayoutFormats.A3P:
- case LayoutFormats.A2P:
- case LayoutFormats.A1P:
- return PlotRotation.Degrees000;
- case LayoutFormats.A3L:
- case LayoutFormats.A2L:
- case LayoutFormats.A1L:
- case LayoutFormats.A0:
- return PlotRotation.Degrees090;
- }
- return PlotRotation.Degrees000;
- }
McadViewPort -- вспомогательный класс со всеми настройками листа, который у меня в расчёте формируется.
Код - C# [Выбрать]
- public class McadViewPort
- {
- public string Name { get; set; }
- public bool FirstPage { get; set; } = false;
- public bool FullScreenFlag { get; set; } = true;
- public Point3d ModelStartPoint { get; set; }
- public Point3d ModelEndPoint { get; set; }
- private LayoutFormats _format;
- public double ModelWidth
- {
- get
- {
- return ModelEndPoint.X > ModelStartPoint.X
- ? ModelEndPoint.X - ModelStartPoint.X
- : ModelStartPoint.X - ModelEndPoint.X;
- }
- }
- public double ModelHeight
- {
- get
- {
- return ModelEndPoint.Y > ModelStartPoint.Y
- ? ModelEndPoint.Y - ModelStartPoint.Y
- : ModelStartPoint.Y - ModelEndPoint.Y;
- }
- }
- public LayoutFormats Format
- {
- get { return _format; }
- }
- public string FormatString
- {
- get { return _format.ToString(); }
- set
- {
- _format = CadUtilities.ConvertToLayoutFormat(value);
- _formatExtents = SetFormatExtents(_format, FirstPage);
- }
- }
- public double ScaleFactor
- {
- get { return AcadUtilities.GetScaleFactor(_scale); }
- set { _scale = AcadUtilities.GetStandardScale(value); }
- }
- private StandardScaleType _scale = StandardScaleType.Scale1To1;
- public StandardScaleType Scale
- {
- get { return _scale; }
- }
- public Extents2d ViewPortExtents
- {
- get
- {
- if (FullScreenFlag)
- return _formatExtents;
- else
- return GetViewPortExtens();
- }
- }
- private Extents2d _formatExtents;
- public double OnPaperWidth
- {
- get
- {
- return ModelWidth / ScaleFactor;
- }
- }
- public double OnPaperHeight
- {
- get
- {
- return ModelHeight / ScaleFactor;
- }
- }
- public string GetPlotFormat()
- {
- var plotFormat = string.Empty;
- switch (_format)
- {
- case LayoutFormats.A4:
- return "ISO_full_bleed_A4_(297.00_x_210.00_MM)";
- case LayoutFormats.A3L:
- return "ISO_full_bleed_A3_(297.00_x_420.00_MM)";
- case LayoutFormats.A3P:
- return "ISO_full_bleed_A3_(420.00_x_297.00_MM)";
- case LayoutFormats.A2L:
- return "ISO_full_bleed_A2_(420.00_x_594.00_MM)";
- case LayoutFormats.A2P:
- return "ISO_full_bleed_A2_(594.00_x_420.00_MM)";
- case LayoutFormats.A1L:
- return "ISO_full_bleed_A1_(594.00_x_840.00_MM)";
- case LayoutFormats.A1P:
- return "ISO_full_bleed_A1_(840.00_x_594.00_MM)";
- case LayoutFormats.A0:
- return "ISO_full_bleed_A0_(840.00_x_1188.00_MM)";
- }
- return plotFormat;
- }
- public Extents3d GetModelExtens()
- {
- double maxPointX;
- double maxPointY;
- var height = (_formatExtents.MaxPoint.Y - _formatExtents.MinPoint.Y) * ScaleFactor;
- var width = (_formatExtents.MaxPoint.X - _formatExtents.MinPoint.X) * ScaleFactor;
- if (FullScreenFlag)
- {
- maxPointX = ModelStartPoint.X + width;
- maxPointY = ModelStartPoint.Y + height;
- var maxPoint = new Point3d(maxPointX, maxPointY, 0);
- return new Extents3d(ModelStartPoint, maxPoint);
- }
- else
- {
- return new Extents3d(ModelStartPoint, ModelEndPoint);
- }
- //var minPoint = new Point2d(ModelStartPoint.X, ModelStartPoint.Y);
- }
- public Extents2d GetViewPortExtens()
- {
- var centerX = (_formatExtents.MaxPoint.X + _formatExtents.MinPoint.X) / 2;
- var centerY = (_formatExtents.MaxPoint.Y + _formatExtents.MinPoint.Y) / 2;
- var minPointX = centerX - OnPaperWidth / 2;
- var minPointY = centerY - OnPaperHeight / 2;
- var maxPointX = minPointX + OnPaperWidth;
- var maxPointY = minPointY + OnPaperHeight;
- var minPoint = new Point2d(minPointX, minPointY);
- var maxPoint = new Point2d(maxPointX, maxPointY);
- return new Extents2d(minPoint, maxPoint);
- }
- private static Extents2d SetFormatExtents(LayoutFormats format, bool firstpage)
- {
- var minExt = FormatWorkArea.StartPointNextPage();
- if (firstpage)
- {
- minExt = FormatWorkArea.StartPointFirstPage();
- }
- var maxExt = FormatWorkArea.LastPoint(format);
- return new Extents2d(minExt, maxExt);
- }
- }
что с ним не так?
Последние сообщения
)