ADN Club > AutoCAD .NET API

Не меняется ориентация листа

(1/2) > >>

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. это уже старая?

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии