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

Автор Тема: Не меняется ориентация листа  (Прочитано 320 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн brookАвтор темы

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
При создании Layout настраиваю формат и ориентацию листа, PlotRotation обновляется (по отладке смотрю), а PaperOrientation остаётся как был и в результате лист всё время горизонтальный, вне зависимости от PlotRotation

в командном методе такой код транзакции


Код - C# [Выбрать]
  1.  
  2. using (var tr = db.TransactionManager.StartTransaction())
  3.  {
  4.      var cult = new CultureInfo(SystemObjects.DynamicLinker.ProductLcid);
  5.  
  6.      //спрашиваем - получаем параметры листа
  7.      mLayout.Name = GetUserInputString(dwg, "\nВведите имя нового листа: ", true);
  8.      mLayout.FirstPage = GetUserBool(dwg, "\nЭто первая страница документа? 0 - нет, 1 - да ");
  9.      mLayout.FormatString = GetUserInputString(dwg, "\nФормат добавляемого листа: ", false);
  10.      mLayout.FullScreenFlag = GetUserBool(dwg, "\nБудет ли видовой экран занимать весь формат? 0 - нет, 1 - да ");
  11.      mLayout.ModelStartPoint = GetUserInputPoint(dwg, "\nВведите нижнюю левую точку отображаемой модели: ");
  12.      if (!mLayout.FullScreenFlag)
  13.          mLayout.ModelEndPoint = GetUserInputPoint(dwg, "\nВведите верхнюю правую точку отображаемой модели: ");
  14.      mLayout.ScaleFactor = GetUserInputDouble(dwg, "\nМасштаб модели будет 1 к ");
  15.  
  16.  
  17.  
  18.      // Create and select a new layout tab
  19.      var layoutSId = LayoutManager.Current.CreateAndMakeLayoutCurrent(mLayout.Name);
  20.  
  21.      // Open the created layout
  22.  
  23.      var acLay = (Layout)tr.GetObject(layoutSId, OpenMode.ForWrite);
  24.  
  25.      // Make some settings on the layout and get its extents
  26.  
  27.      acLay.SetPlotSettings(
  28.        //"ISO_full_bleed_2A0_(1189.00_x_1682.00_MM)", // Try this big boy!
  29.        mLayout,
  30.        "acad.ctb",
  31.        "DWG To PDF.pc3",
  32.        cult.EnglishName
  33.      );
  34.  
  35.      var modelExtents = mLayout.GetModelExtens();
  36.  
  37.      acLay.ApplyToViewport(
  38.        tr, 2,
  39.        vp =>
  40.        {
  41.            // Size the viewport according to the extents calculated when
  42.            // we set the PlotSettings (device, page size, etc.)
  43.            // Use the standard 10% margin around the viewport
  44.            // (found by measuring pixels on screenshots of Layout1, etc.)
  45.  
  46.            vp.ResizeViewport(mLayout.ViewPortExtents);
  47.            vp.ViewCenter = (modelExtents.MinPoint + (modelExtents.MaxPoint - modelExtents.MinPoint) * 0.5).Strip();
  48.            vp.ViewHeight = modelExtents.MaxPoint.Y - modelExtents.MinPoint.Y;
  49.            vp.Layer = "Defpoints";
  50.            //vp.CustomScale = (1 / mLayout.Scale);
  51.            /*
  52.            // Adjust the view so that the model contents fit
  53.            if (ValidDbExtents(ext.MinPoint,ext.MaxPoint))
  54.            {
  55.                vp.FitContentToViewport(ext);
  56.            }
  57.            */
  58.            // Finally we lock the view to prevent meddling
  59.            if (mLayout.Scale == StandardScaleType.CustomScale)
  60.                vp.CustomScale = 1 / mLayout.ScaleFactor;
  61.            else
  62.                vp.StandardScale = mLayout.Scale;
  63.  
  64.            vp.Locked = false;
  65.        }
  66.      );
  67.  
  68.      // Commit the transaction
  69.      tr.Commit();
  70.  }
  71.  

в Extentions  кусок такой :
Код - C# [Выбрать]
  1.  
  2. public static void SetPlotSettings(
  3.     this Layout lay, McadViewPort mcadLay, string styleSheet, string device, string local
  4. )
  5. {
  6.     using (var ps = new PlotSettings(lay.ModelType))
  7.     {
  8.         ps.CopyFrom(lay);
  9.  
  10.         var psv = PlotSettingsValidator.Current;
  11.  
  12.         // Set the device
  13.  
  14.         var devs = psv.GetPlotDeviceList();
  15.         if (devs.Contains(device))
  16.         {
  17.             psv.SetPlotConfigurationName(ps, device, null);
  18.             psv.RefreshLists(ps);
  19.         }                            
  20.        
  21.         // Set the media name/size
  22.  
  23.         var mns = psv.GetCanonicalMediaNameList(ps);
  24.  
  25.         var pageSize = mcadLay.GetPlotFormat();
  26.         if (mns.Contains(pageSize))
  27.         {
  28.             psv.SetCanonicalMediaName(ps, pageSize);
  29.         }
  30.  
  31.         // Set the pen settings
  32.  
  33.         var ssl = psv.GetPlotStyleSheetList();
  34.         if (ssl.Contains(styleSheet))
  35.         {
  36.             psv.SetCurrentStyleSheet(ps, styleSheet);
  37.         }
  38.  
  39.         psv.SetPlotRotation(ps, GetPlotRotation(mcadLay.Format));
  40.  
  41.         lay.UpgradeOpen();
  42.         // Copy the PlotSettings data back to the Layout
  43.         lay.CopyFrom(ps);
  44.  
  45.     }
  46. }
  47.  
  48. public static PlotRotation GetPlotRotation(LayoutFormats format)
  49. {
  50.     switch (format)
  51.     {
  52.         case LayoutFormats.A4:
  53.         case LayoutFormats.A3P:
  54.         case LayoutFormats.A2P:
  55.         case LayoutFormats.A1P:
  56.             return PlotRotation.Degrees000;
  57.         case LayoutFormats.A3L:
  58.         case LayoutFormats.A2L:
  59.         case LayoutFormats.A1L:
  60.         case LayoutFormats.A0:
  61.             return PlotRotation.Degrees090;
  62.     }
  63.  
  64.     return PlotRotation.Degrees000;
  65. }
  66.  
  67.  

 McadViewPort -- вспомогательный класс со всеми настройками листа, который у меня в расчёте формируется.
Код - C# [Выбрать]
  1.  
  2. public class McadViewPort
  3. {
  4.     public string Name { get; set; }
  5.  
  6.     public bool FirstPage {  get; set; } = false;
  7.     public bool FullScreenFlag { get; set; } = true;
  8.     public Point3d ModelStartPoint { get; set; }
  9.     public Point3d ModelEndPoint { get; set; }
  10.     private LayoutFormats _format;
  11.     public double ModelWidth
  12.     {
  13.         get
  14.         {
  15.             return ModelEndPoint.X > ModelStartPoint.X
  16.                ? ModelEndPoint.X - ModelStartPoint.X
  17.                : ModelStartPoint.X - ModelEndPoint.X;
  18.         }
  19.     }
  20.     public double ModelHeight
  21.     {
  22.         get
  23.         {
  24.            return ModelEndPoint.Y > ModelStartPoint.Y
  25.                ? ModelEndPoint.Y - ModelStartPoint.Y
  26.                : ModelStartPoint.Y - ModelEndPoint.Y;
  27.         }
  28.     }
  29.  
  30.     public LayoutFormats Format
  31.     {
  32.         get { return _format; }
  33.     }
  34.  
  35.     public string FormatString
  36.     {
  37.         get { return _format.ToString(); }
  38.         set
  39.         {
  40.             _format = CadUtilities.ConvertToLayoutFormat(value);
  41.             _formatExtents = SetFormatExtents(_format, FirstPage);
  42.         }
  43.     }
  44.     public double ScaleFactor
  45.     {
  46.         get { return AcadUtilities.GetScaleFactor(_scale); }
  47.         set { _scale = AcadUtilities.GetStandardScale(value); }
  48.     }
  49.  
  50.     private StandardScaleType _scale = StandardScaleType.Scale1To1;
  51.  
  52.     public StandardScaleType Scale
  53.     {
  54.         get { return _scale; }
  55.     }
  56.  
  57.     public Extents2d ViewPortExtents
  58.     {
  59.         get
  60.         {
  61.             if (FullScreenFlag)
  62.                 return _formatExtents;
  63.             else
  64.                 return GetViewPortExtens();
  65.         }
  66.     }
  67.  
  68.     private Extents2d _formatExtents;
  69.  
  70.     public double OnPaperWidth
  71.     {
  72.         get
  73.         {
  74.             return ModelWidth / ScaleFactor;
  75.         }
  76.     }
  77.     public double OnPaperHeight
  78.     {
  79.         get
  80.         {
  81.             return ModelHeight / ScaleFactor;
  82.         }
  83.     }
  84.  
  85.     public string GetPlotFormat()
  86.     {
  87.         var plotFormat = string.Empty;
  88.         switch (_format)
  89.         {
  90.             case LayoutFormats.A4:
  91.                 return "ISO_full_bleed_A4_(297.00_x_210.00_MM)";
  92.             case LayoutFormats.A3L:
  93.                 return "ISO_full_bleed_A3_(297.00_x_420.00_MM)";
  94.             case LayoutFormats.A3P:
  95.                 return "ISO_full_bleed_A3_(420.00_x_297.00_MM)";
  96.             case LayoutFormats.A2L:
  97.                 return "ISO_full_bleed_A2_(420.00_x_594.00_MM)";
  98.             case LayoutFormats.A2P:
  99.                 return "ISO_full_bleed_A2_(594.00_x_420.00_MM)";
  100.             case LayoutFormats.A1L:
  101.                 return "ISO_full_bleed_A1_(594.00_x_840.00_MM)";
  102.             case LayoutFormats.A1P:
  103.                 return "ISO_full_bleed_A1_(840.00_x_594.00_MM)";
  104.             case LayoutFormats.A0:
  105.                 return "ISO_full_bleed_A0_(840.00_x_1188.00_MM)";
  106.         }
  107.  
  108.         return plotFormat;
  109.     }
  110.  
  111.     public Extents3d GetModelExtens()
  112.     {
  113.         double maxPointX;
  114.         double maxPointY;
  115.         var height = (_formatExtents.MaxPoint.Y - _formatExtents.MinPoint.Y) * ScaleFactor;
  116.         var width = (_formatExtents.MaxPoint.X - _formatExtents.MinPoint.X) * ScaleFactor;
  117.  
  118.         if (FullScreenFlag)
  119.         {
  120.             maxPointX = ModelStartPoint.X + width;
  121.             maxPointY = ModelStartPoint.Y + height;
  122.             var maxPoint = new Point3d(maxPointX, maxPointY, 0);
  123.             return new Extents3d(ModelStartPoint, maxPoint);
  124.         }
  125.         else
  126.         {
  127.             return new Extents3d(ModelStartPoint, ModelEndPoint);
  128.         }
  129.  
  130.         //var minPoint = new Point2d(ModelStartPoint.X, ModelStartPoint.Y);
  131.     }
  132.  
  133.     public Extents2d GetViewPortExtens()
  134.     {        
  135.  
  136.         var centerX = (_formatExtents.MaxPoint.X + _formatExtents.MinPoint.X) / 2;
  137.         var centerY = (_formatExtents.MaxPoint.Y + _formatExtents.MinPoint.Y) / 2;
  138.         var minPointX = centerX - OnPaperWidth / 2;
  139.         var minPointY = centerY - OnPaperHeight / 2;
  140.         var maxPointX = minPointX + OnPaperWidth;
  141.         var maxPointY = minPointY + OnPaperHeight;
  142.         var minPoint = new Point2d(minPointX, minPointY);
  143.         var maxPoint = new Point2d(maxPointX, maxPointY);
  144.         return new Extents2d(minPoint, maxPoint);
  145.     }
  146.  
  147.     private static Extents2d SetFormatExtents(LayoutFormats format, bool firstpage)
  148.     {
  149.         var minExt = FormatWorkArea.StartPointNextPage();
  150.        
  151.         if (firstpage)
  152.         {
  153.             minExt = FormatWorkArea.StartPointFirstPage();
  154.         }
  155.        
  156.         var maxExt = FormatWorkArea.LastPoint(format);
  157.         return new Extents2d(minExt, maxExt);
  158.     }
  159. }


что с ним не так?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 852
  • Карма: 170
    • Мои плагины к Автокаду
Re: Не меняется ориентация листа
« Ответ #1 : 17-09-2025, 19:38:39 »
Насчет настроек печати - не скажу, а вот настройки вьюпортов на листах не применяются ни какими методами. Более менее помогает переключение на вкладку Модель и обратно на лист. И то не всегда.

Оффлайн brookАвтор темы

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Re: Не меняется ориентация листа
« Ответ #2 : 18-09-2025, 10:14:07 »
Насчет настроек печати - не скажу, а вот настройки вьюпортов на листах не применяются ни какими методами. Более менее помогает переключение на вкладку Модель и обратно на лист. И то не всегда.
с вьюпортами у нас всё хорошо. мне не надо переключаться, мы через accoreconsole всё обрабатываем. у нас и с листами всё было нормально, пока на одном стенде не поставили с другого дистрибутива acad, и он стал на 90 градусов всё переворачивать. раньше явно не задавали поворот вообще, он как-то сам вставал. сейчас пытаюсь задать явно, и не работает, не могу понять почему

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 153
  • Карма: 3
Re: Не меняется ориентация листа
« Ответ #3 : 18-09-2025, 18:23:52 »
Автокад какой версии? В одной из старых версий у меня был глюк, когда 0 и 90град были перепутаны местами.

Оффлайн brookАвтор темы

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Re: Не меняется ориентация листа
« Ответ #4 : 19-09-2025, 10:07:25 »
Автокад какой версии? В одной из старых версий у меня был глюк, когда 0 и 90град были перепутаны местами.

2021. это уже старая?

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 153
  • Карма: 3
Re: Не меняется ориентация листа
« Ответ #5 : 19-09-2025, 12:15:17 »
Свои плагины я использовал в 13,16,21,24 и под них нередко приходилось редактировать что-то (появлялись новые методы, библиотеки, да и глюки). В консоли тоже не все работает. Если напрямую (не из консоли запускать), работает? Лучше конечно задавать все в явном виде и в порядке как в руководстве или в примерах на форуме. Если раньше работало, а теперь нет, проверьте соответствие библиотек, фреймворков, версий автокада друг другу. Может дистрибутив новый, который вы ставили последним, кривой. Попробуйте местами поменять PlotRotation.Degrees000 и PlotRotation.Degrees090 (если глюк), дополнительно "пошевелить"/ регенерировать лист, например отцентровать psv.SetPlotCentered(ps, true).

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 567
  • Карма: 121
Re: Не меняется ориентация листа
« Ответ #6 : 19-09-2025, 13:31:21 »
пока на одном стенде не поставили с другого дистрибутива acad, и он стал на 90 градусов всё переворачивать. раньше явно не задавали поворот вообще, он как-то сам вставал. сейчас пытаюсь задать явно, и не работает

нужно проверить настройку плоттеров и листов. Возможно на стенде отсутствует выставляемый плоттер, либо формат лист у него задан по другому не 210*297 , а 297*210.