ADN Club > AutoLisp / VisualLISP и DCL

Обновление атрибутов в динамическом блоке с таблицей свойств

(1/1)

Eugene Smith:
Добрый день.

Столкнулся с проблемой: есть динамический блок с атрибутами, которые определены в таблице свойств блока (btable). Каждому состоянию видимости соответствует некоторое значение атрибута.

К сожалению, приложить сам блок не могу, параноики политика безопасности в организации не даёт загружать файлы  :-X поэтому попытаюсь обяснить на пальцах, прошу сильно не бить.

Блок вставляется в чертеж скриптом на 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. Ну или любыми другими средствами, подойдёт даже отдельно стоящий костыль. Буду признателен за любые идеи/подсказки.

Спасибо.

Александр Ривилис:

--- Цитата: Eugene Smith от 06-04-2022, 17:04:31 ---Прошу подсказать, есть ли возможность принудительно вызвать обновление атрибутов, связанных с таблицей свойств блока, средствами lisp. Ну или любыми другими средствами, подойдёт даже отдельно стоящий костыль. Буду признателен за любые идеи/подсказки.
--- Конец цитаты ---
В открытой части API этого нет. Ну а тем более средствами VisualLisp. Тут нужно смотреть (надеяться) на ObjectARX или AutoCAD .NET API.

Навигация

[0] Главная страница сообщений

Перейти к полной версии