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

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

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

Код - 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.  
6
AutoCAD .NET API / Re: Размер видимости динамического блока
« Последний ответ от avc 01-09-2025, 22:55:27 »
Очевидно, мерить надо реально отображаемую геометрию. Берите все объекты из BTR блока (из безымянного экземпляра, конечно), проверяйте видмость, трансформируйте в модель, мерьте габариты... как-то так примерно.
7
Добрый день!

Задача такая. по координатам точки найти блок.
Вроде всё просто
Код - C# [Выбрать]
  1.  private BlockReference FindBlockAtPoint(Database db,Transaction tr, Point3d point)
  2. {
  3. BlockTableRecord modelSpace = tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead) as BlockTableRecord;
  4.  
  5.             double tolerance = 0.01;
  6.  
  7.             foreach (ObjectId id in modelSpace)
  8.             {
  9.                 if (id.ObjectClass.IsDerivedFrom(RXObject.GetClass(typeof(BlockReference))))
  10.                 {
  11.                     BlockReference blockRef = tr.GetObject(id, OpenMode.ForRead) as BlockReference;
  12.                     if (blockRef != null)
  13.                     {
  14.                        
  15.                         Extents3d extents = blockRef.GeometricExtents;
  16.                         if (point.X >= extents.MinPoint.X - tolerance && point.X <= extents.MaxPoint.X + tolerance &&
  17.                             point.Y >= extents.MinPoint.Y - tolerance && point.Y <= extents.MaxPoint.Y + tolerance)
  18.                         {
  19.                             return blockRef;
  20.                         }
  21.                     }
  22.                 }
  23.             }
  24. }

Но получается не так как хотелось.
У меня динамические блоки. у каждого блока несколько состояний видимости. В зависимости от видимости размер разный.
 blockRef.GeometricExtents возвращает размер всего блока, не только того что видимо, а вообще всего содержимого.

Если взять 2 блока с видимостью где блок маленький и поставить их рядом, то их GeometricExtents пересекаются.
выбираю точку на одном блоке, а находится 2 (в моём коде возвращается первый попавшийся).

Собственно вопрос
Как же найти границы реально отображаемой геометрии?


8
AutoLisp / VisualLISP и DCL / значек диаметра в DCL
« Последний ответ от altver 29-08-2025, 13:11:12 »
Добрый день господа!
Как написать в DCL текстом
значек диаметра?
в чертеже это %%C
а вот  DCL-е?
Спасибо!
9
Не понимаю, что Вы делаете, но дерево объектов есть в справке по VBA или легко ищется по фразе "AutoCAD Object Model" в любом поисковике.
Например: https://documentation.help/AutoCAD-ActiveX-AAG/WS1a9193826455f5ff1a32d8d10ebc6b7ccc-6cb4.htm
10
... шли 3 сутки - сгенерировано 19 500 000 объектов... скрипт продолжает работу..

в общем есть объекты "паразиты" ['ActiveDimStyle','Application', 'ActiveLayer', 'Database', 'ActiveLayout']
Страницы: [1] 2 3 ... 10