Начни с этих статей:
https://adn-cis.org/kak-najti-vse-vstavki-dinamicheskogo-bloka.html
https://adn-cis.org/vyibor-vstavok-blokov-s-ispolzovaniem-filtra.html
Статьи помогли?надеюсь помогут. сегодня только начал ещё. вчера 14 часов работал и под конец уже мало что понимал. сегодня буду разбирать.
Уважаемые форумчане, как, используя AC .NET API, получить коллекцию блоков зная имя блока?Может стоит копать в сторону OwnerID?Начни с этих статей:
https://adn-cis.org/kak-najti-vse-vstavki-dinamicheskogo-bloka.html
https://adn-cis.org/vyibor-vstavok-blokov-s-ispolzovaniem-filtra.html
Может стоит копать в сторону OwnerID?Уточни что ты имеешь в виду и как предлагаешь это реализовать.
Если я правильно понимаю, то автор хочет получить список ссылок блоков (BlockReference) в чертеже определённого описания блока, зная имя этого описания блока (BlockTableRecord). Я бы сначала получил бы все ссылки блоков в чертеже, например через SelectionSet, а потом бы через цикл сравнивал с именем OwnerID и добавлял в массив.Может стоит копать в сторону OwnerID?Уточни что ты имеешь в виду и как предлагаешь это реализовать.
Lemieux,BlockTableRecord. Судя по хелпу всё должно работать.
Идею понял. Только OwnerID с чьим ObjectId сравнивать будешь?
BlockTableRecord. Судя по хелпу всё должно работать.Ошибаешься. OwnerID для BlockReference вернет ObjectId той BlockTableRecord, куда этот BlockReference вставлен. Т.е. например, BlockTableRecord Пространства модели или Пространства листа, если вставлен в них или BlockTableRecord какого-нибудь блока, если это вложенный блок.
Это фиаско © ;DBlockTableRecord. Судя по хелпу всё должно работать.Ошибаешься. OwnerID для BlockReference вернет ObjectId той BlockTableRecord, куда этот BlockReference вставлен. Т.е. например, BlockTableRecord Пространства модели или Пространства листа, если вставлен в них или BlockTableRecord какого-нибудь блока, если это вложенный блок.
Через это свойство нужно получать ObjectID BlockTableRecord? https://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_BlockReference_BlockTableRecordДа - если это блок статический (не динамический) или нужно получить BlockTableRecord именно этой вставки. Если нужно получить BlockTableRecord основного описания динамического блока, то свойство DynamicBlockTableRecord: https://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_BlockReference_DynamicBlockTableRecord
Luca,
Статьи помогли?
1. Где посмотреть правила форматирования?У меня в подписи. А также в Правилах форума - п. 4.5
2. Правильно ли я понимаю, чтоBlockTable - это таблица описаний всех блоков, а BlockTableRecord - это описание конкретного блока.
в BlockTable хранятся все блоки, если можно так сказать, а в BlockTableRecord хранятся ссылки на конкретные экземпляры?
3. Как нужный мне блок отличить от ненужных? здесь https://help.autodesk.com/view/OARX/2020/ENU/?guid=OARX-ManagedRefGuide-__MEMBERTYPE_Properties_Autodesk_AutoCAD_DatabaseServices_BlockTableRecord я не увидел такого... Имя же должно быть у блока?Ты не обратил внимание, что класс BlockTableRecord - наследник класса SymbolTableRecord, у которого есть свойство Name: https://help.autodesk.com/view/OARX/2020/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_DatabaseServices_SymbolTableRecord_Name
1. Блок выделен (обычное выделение)Предварительный выбор? Тогда Editor.SelectImplied() - у команды должен быть установлен флаг CommandFlags.UsePickSet иначе при запуске команды предварительный набор сбрасывается.
2. Находится на определенном слоеФильтровать по DXF-коду 8 - имя слоя.
3. Хранить получаемые блоки в массиве - верно?Я предпочитаю хранить их ObjectId.
Предварительный выбор? Тогда Editor.SelectImplied() - у команды должен быть установлен флаг CommandFlags.UsePickSet иначе при запуске команды предварительный набор сбрасывается.не понимаю что значит предварительный выбор...
Я предпочитаю хранить их ObjectId.SelectionSet.GetObjectIds
не понимаю что значит предварительный выбор...А я не понимаю что такое "выделенное".
я хочу выбрать и применять команды только к выделенномуНаучись пользоваться терминами AutoCAD. Те объекты чертежа, которые ты выделил до запуска какой-либо команды - это и есть предварительный выбор (PickFirst)
а между командами результаты будут сохраняться и так, чтобы из следующей команды данные были доступныЕсли сохранишь - сохранятся, если нет - не сохранятся.
Если сохранишь - сохранятся, если нет - не сохранятся.куда сохранять то?
куда сохранять то?Куда хочешь - туда и сохраняешь. Тут главное понять что именно ты хочешь сохранить. Пока же это всё полная абстракция.
Куда хочешь - туда и сохраняешь. Тут главное понять что именно ты хочешь сохранить. Пока же это всё полная абстракция.а если я хочу сохранить массив или список ссылок на блоки или полилинии, те сначала выделяю блоки, считываю, потом выделяю полилинии считываю и потом запускаю команду построения графа.
Во-первых, это всё можно сделать в одной команде - так что сохранять ничего не понадобится.Куда хочешь - туда и сохраняешь. Тут главное понять что именно ты хочешь сохранить. Пока же это всё полная абстракция.а если я хочу сохранить массив или список ссылок на блоки или полилинии, те сначала выделяю блоки, считываю, потом выделяю полилинии считываю и потом запускаю команду построения графа.