Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
AutoCAD .NET API / Re: Не меняется ориентация листа
« Последний ответ от brook 18-09-2025, 10:14:07 »
Насчет настроек печати - не скажу, а вот настройки вьюпортов на листах не применяются ни какими методами. Более менее помогает переключение на вкладку Модель и обратно на лист. И то не всегда.
с вьюпортами у нас всё хорошо. мне не надо переключаться, мы через accoreconsole всё обрабатываем. у нас и с листами всё было нормально, пока на одном стенде не поставили с другого дистрибутива acad, и он стал на 90 градусов всё переворачивать. раньше явно не задавали поворот вообще, он как-то сам вставал. сейчас пытаюсь задать явно, и не работает, не могу понять почему
2
AutoCAD .NET API / Re: Не меняется ориентация листа
« Последний ответ от avc 17-09-2025, 19:38:39 »
Насчет настроек печати - не скажу, а вот настройки вьюпортов на листах не применяются ни какими методами. Более менее помогает переключение на вкладку Модель и обратно на лист. И то не всегда.
3
AutoCAD .NET API / Не меняется ориентация листа
« Последний ответ от brook 17-09-2025, 17:54:20 »
При создании 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. }


что с ним не так?
4
Конечная цель наверно как уже догадались - что бы робот сам щупал объекты и всю иерархию прикрутив к нему описание объектов. Что бы точность кода была абсолютной.
5
Тут не все и мне просто хочется программно вывести цепочки между указанными именами объектов. (собираю практический инструмент тк не раз спотыкался об не состыковки описания в хелпе с действительностью - возможно просто баги)
Через справку, ии и книги да но хочется большей оперативности :)

И это относится не только к Autocad, но и к другим САПРам где может не всегда такой хороший хелп быть.
6
BTW Еще объекты могут быть невидны на отключенных и замороженных слоях (и тут надо еще слой 0 как ПоБлоку учитывать).
и еще у AttributeDefinition есть свое свойство Invisible.
и не забудьте про рекурсию с вложенными блоками :)
Веселье только начинается :)))
Да, спасибо.
Но я планирую работу только со своими блоками.
Так что сюрпризов быть не должно.
7
AutoCAD .NET API / Re: Размер видимости динамического блока
« Последний ответ от avc 01-09-2025, 23:14:03 »
BTW Еще объекты могут быть невидны на отключенных и замороженных слоях (и тут надо еще слой 0 как ПоБлоку учитывать).
и еще у AttributeDefinition есть свое свойство Invisible.
и не забудьте про рекурсию с вложенными блоками :)
Веселье только начинается :)))
8
AutoCAD .NET API / Re: Размер видимости динамического блока
« Последний ответ от avc 01-09-2025, 23:03:38 »
Это ровно то же самое. Только обработайте исключения - многие объекты не знают своих размеров (включая AttributeDifinition, который вы точно встретите в блоках)
9
Очевидно, мерить надо реально отображаемую геометрию. Берите все объекты из BTR блока (из безымянного экземпляра, конечно), проверяйте видмость, трансформируйте в модель, мерьте габариты... как-то так примерно.
Оказалось всё проще.
просто взорвать блок и замерить габариты геометрии.
10
Поторопился с вопросом.
Нашёл ответ, может кому-то пригодится.

Код - C# [Выбрать]
  1. private static Extents3d GetGeometricExtents(BlockReference br)
  2.         {
  3.             var extents = new Extents3d();
  4.             using (var entitySet = new DBObjectCollection())
  5.             {
  6.                 br.Explode(entitySet);
  7.                 foreach (Entity entity in entitySet)
  8.                 {
  9.                     if (entity.Visible)
  10.                     {
  11.                         var bounds = entity.Bounds;
  12.                         if (bounds.HasValue)
  13.                         {
  14.                             extents.AddExtents(bounds.Value);
  15.                         }
  16.                     }
  17.                     entity.Dispose();
  18.                 }
  19.             }
  20.             return extents;
  21.         }
  22.  
Страницы: [1] 2 3 ... 10