Добрый день.
Столкнулся с проблемой: есть динамический блок с атрибутами, которые определены в таблице свойств блока (btable). Каждому состоянию видимости соответствует некоторое значение атрибута.
К сожалению, приложить сам блок не могу,
параноики политика безопасности в организации не даёт загружать файлы
поэтому попытаюсь обяснить на пальцах, прошу сильно не бить.
Блок вставляется в чертеж скриптом на lisp (так надо, по факту это пакетная замена блоков с переносом свойств и части атрибутов в новый блок), состояние видимости назначается новому блоку при помощи vlax-put-property. При этом во всех вновь вставленных блоках значения атрибутов отображаются по умолчанию, а не по таблице свойств, как должны . По сути, проблема та же, что описана вот тут:
https://knowledge.autodesk.com/ru/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/RUS/Dynamic-block-attribute-value-displays-incorrectly-when-first-inserted-into-a-drawing-in-AutoCAD.htmlОбновление атрибутов происходит только если состояние видимости каждого блока обновить руками, то есть ткнуть в него и выбрать состояние видимости заново, что убивает всю автоматизацию на корню, поскольку блоков может быть несколько сотен на чертеже и состояний видимости 47 штук, руками не натыкать.
Команды _regenall, _attsync ожидаемо не помогают.
Насколько я понимаю, обновление атрибутов, связанных с таблицей свойств блока, происходит по событию ручного выбора состояния видимости. Наверное (я не знаю, я не настоящий сварщик) можно попробовать обновить саму таблицу свойств блока, но к ней я подходов не нашёл: среди динамических свойств есть vla-объект для таблицы свойств, но дамп показывает чуть меньше, чем ничего:
Выберите объект: ; IAcadDynamicBlockReferenceProperty: Интерфейс AutoCAD для свойств динамического блока
; Значения свойств:
; AllowedValues (RO) = nil
; Description (RO) = ""
; PropertyName (RO) = "Таблица блоков1"
; ReadOnly (RO) = 0
; show (RO) = -1
; UnitsType (RO) = 0
; Value = 35
; Нет методов
T
То есть, чтобы атрибуты обновились, нужно каким-то образом имитировать нажатие ручки выбора видимости. Ну или принудительно обновить таблицу свойств (?).
Прошу подсказать, есть ли возможность принудительно вызвать обновление атрибутов, связанных с таблицей свойств блока, средствами lisp. Ну или любыми другими средствами, подойдёт даже отдельно стоящий костыль. Буду признателен за любые идеи/подсказки.
Спасибо.