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

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

Страницы: [1] 2 3 ... 10
1
AutoCAD .NET API / Re: Оффтопик. Изучаем C#
« Последний ответ от avc 08-02-2026, 15:24:02 »
К примеру у меня есть динамический блок "Клеммник" с кучей динамических атрибутов. Как в одну  строку получить его имя "Клеммник", а "*U10500" ?
Код - C# [Выбрать]
  1. string instanceName = blockRef.IsDynamicBlock || !blockRef.AnonymousBlockTableRecord.IsNull ? (tr.GetObject(blockRef.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord)?.Name : blockRef.Name;
но я бы не рекомендовал писать это в одну строку ;))
2
AutoCAD .NET API / Re: Оффтопик. Изучаем C#
« Последний ответ от Electric 08-02-2026, 15:16:30 »
У BlockReference динамических блоков есть две ссылки: BlockTableRecord и DynamicBlockTableRecord. первая - это экземпляр динамического блока с конкретным набором параметров и скрытым именем (на *), а вторая - это как раз исходный предок всех экземпляров с видимым пользователю именем. Это имя отображает и BlockReference.Name тоже.
Никаких EffectiveName я что-то в API не встречал.

К примеру у меня есть динамический блок "Клеммник" с кучей динамических атрибутов. Как в одну  строку получить его имя "Клеммник", а не "*U10500" ?
3
AutoCAD .NET API / Re: Оффтопик. Изучаем C#
« Последний ответ от avc 08-02-2026, 15:03:02 »
У BlockReference динамических блоков есть две ссылки: BlockTableRecord и DynamicBlockTableRecord. первая - это экземпляр динамического блока с конкретным набором параметров и скрытым именем (на *), а вторая - это как раз исходный предок всех экземпляров с видимым пользователю именем. Это имя отображает и BlockReference.Name тоже.
Прежде чем обращаться к DynamicBlockTableRecord стоит проверить, что это именно динамический блок:
 if (blockRef.IsDynamicBlock || !blockRef.AnonymousBlockTableRecord.IsNull)...
В AutoCAD искаженные динамические блоки IsDynamicBlock=false, но есть AnonymousBlockTableRecord.
По моему у экземпляров динамических блоков всегда имя на *U, а не на *T. Так что возможно просто таблицы попались вместо блоков.
Никаких EffectiveName я что-то в API не встречал.
4
AutoCAD .NET API / Re: Оффтопик. Изучаем C#
« Последний ответ от Electric 08-02-2026, 14:35:25 »
Другой вопрос.
В python при работе через win32com  я достаточно просто получал имена блока, выделенного мышью:

Код - Python [Выбрать]
  1. realName = block.Name
  2. effectiveName = block.EffectiveName

Как в  одну строку получить EffectiveName блока на C# ?

Я попробовал такой код:

Код - C# [Выбрать]
  1. // БЛОКИ
  2.                             else if (entity is BlockReference block)
  3.                             {
  4.  
  5.                                 // Получаем EffectiveName в одну строку
  6.                                 string effectiveName = ((BlockTableRecord)tr.GetObject(block.DynamicBlockTableRecord, OpenMode.ForRead)).Name;
  7.  
  8.                                 data.BlockData = new BlockData
  9.                                 {
  10.                                     Name = block.Name, // Оригинальное имя
  11.                                     BlockName = effectiveName, // EffectiveName
  12.                                     InsertionPoint = new Point3dData
  13.                                     {
  14.                                         X = Math.Round(block.Position.X, 3),
  15.                                         Y = Math.Round(block.Position.Y, 3),
  16.                                         Z = Math.Round(block.Position.Z, 3)
  17.                                     },
  18.                                     Rotation = Math.Round(block.Rotation, 6),
  19.                                     XScaleFactor = Math.Round(block.ScaleFactors.X, 3),
  20.                                     YScaleFactor = Math.Round(block.ScaleFactors.Y, 3),
  21.                                     Attributes = new List<AttributeData>(),
  22.                                     InternalObjects = new List<InternalObjectData>()
  23.                                 };

но похоже, он все время возвращает  обычное имя:

Цитировать
      "Name": "*T1150",
      "BlockName": "*T1150",

5
Иногда можно написать и сразу понимаешь, в чем суть. Случайно там применял старый метод. Вопрос неактуален. Спасибо!
6
Здравствуйте еще раз. Извиняюсь за то, что открыл тему еще раз.

У меня есть несколько типов блоков, вроде как я устанавливаю все свойства одинаково, но один блок содержит только 1 грип-пойнт, а второй содержит опять кучу грип-пойнтов



Может быть сможете пнуть меня в направлении, как убрать эти грип-пойнты? В данном случае я везде использую setAttributeFromBlock
7
AutoCAD .NET API / Re: Атрибут блока, входящего в мультивыноску
« Последний ответ от nolte 05-02-2026, 15:27:33 »
ДА пробовал все работаем еще раз большое спасибо
8
AutoCAD .NET API / Re: Оффтопик. Изучаем C#
« Последний ответ от Алексей Кулик 03-02-2026, 15:13:37 »
Может, проще NuGet-пакет поставить?
9
AutoCAD .NET API / Re: Оффтопик. Изучаем C#
« Последний ответ от Electric 03-02-2026, 14:57:53 »
У вас забыт using System; Поэтому недоступен Environment.
Попробуйте полностью написать Autodesk.AutoCAD.ApplicationServices.Application и Autodesk.AutoCAD.Runtime.CommandMethod

Да, и похоже я забыл добавить accoremgd.dll в ссылки. После этого проблема исчезла.
10
AutoCAD .NET API / Re: Оффтопик. Изучаем C#
« Последний ответ от avc 03-02-2026, 13:28:51 »
У вас забыт using System; Поэтому недоступен Environment.
Попробуйте полностью написать Autodesk.AutoCAD.ApplicationServices.Application и Autodesk.AutoCAD.Runtime.CommandMethod
Страницы: [1] 2 3 ... 10