ADN Club > AutoCAD .NET API
Не меняется ориентация листа
brook:
При создании Layout настраиваю формат и ориентацию листа, PlotRotation обновляется (по отладке смотрю), а PaperOrientation остаётся как был и в результате лист всё время горизонтальный, вне зависимости от PlotRotation
в командном методе такой код транзакции
--- Код - 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); }}
что с ним не так?
avc:
Насчет настроек печати - не скажу, а вот настройки вьюпортов на листах не применяются ни какими методами. Более менее помогает переключение на вкладку Модель и обратно на лист. И то не всегда.
brook:
--- Цитата: avc от 17-09-2025, 19:38:39 ---Насчет настроек печати - не скажу, а вот настройки вьюпортов на листах не применяются ни какими методами. Более менее помогает переключение на вкладку Модель и обратно на лист. И то не всегда.
--- Конец цитаты ---
с вьюпортами у нас всё хорошо. мне не надо переключаться, мы через accoreconsole всё обрабатываем. у нас и с листами всё было нормально, пока на одном стенде не поставили с другого дистрибутива acad, и он стал на 90 градусов всё переворачивать. раньше явно не задавали поворот вообще, он как-то сам вставал. сейчас пытаюсь задать явно, и не работает, не могу понять почему
pavka_97:
Автокад какой версии? В одной из старых версий у меня был глюк, когда 0 и 90град были перепутаны местами.
brook:
--- Цитата: pavka_97 от 18-09-2025, 18:23:52 ---Автокад какой версии? В одной из старых версий у меня был глюк, когда 0 и 90град были перепутаны местами.
--- Конец цитаты ---
2021. это уже старая?
Навигация
Перейти к полной версии