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

Автор Тема: Обновление атрибутов в динамическом блоке с таблицей свойств  (Прочитано 499 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Eugene SmithАвтор темы

  • ADN OPEN
  • Сообщений: 1
  • Карма: 0
Добрый день.

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

Спасибо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13547
  • Карма: 1741
  • Рыцарь ObjectARX
  • Skype: rivilis
Прошу подсказать, есть ли возможность принудительно вызвать обновление атрибутов, связанных с таблицей свойств блока, средствами lisp. Ну или любыми другими средствами, подойдёт даже отдельно стоящий костыль. Буду признателен за любые идеи/подсказки.
В открытой части API этого нет. Ну а тем более средствами VisualLisp. Тут нужно смотреть (надеяться) на ObjectARX или AutoCAD .NET API.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение