Короче говоря, не можно переименовывать динамические состояния видимости блоков напрямую, используя LISP или VBA API, не прибегая к вызову стандартных команд AutoCAD, например, используя функцию AutoLISP command
, или sendcommand
метод.
Параметры динамического блока, содержащиеся в определении блока, не предоставляются объектной модели ActiveX и поэтому не могут быть изменены с помощью Visual LISP или VBA.
Такие параметры открыты для Vanilla AutoLISP путем проверки данных DXF, хранящихся в словаре расширений объекта BLOCK_RECORD
, но такие данные нельзя изменить с помощью entmod
, и при этом они не дают каких-либо значимых свойства после преобразования в эквивалентное представление VLA-объекта.
Что бы это ни стоило, вы можете получить доступ к данным DXF параметра динамического блока, используя следующий маршрут через API AutoLISP:
Сначала получите сущность BLOCK
:
(setq bl (tblobjname "block" "YourBlockName"))
Затем получите родительскую BLOCK_RECORD
сущность:
(setq br (cdr (assoc 330 (entget bl))))
Теперь получите словарь расширений из группы 360 DXF (в производственном коде должны использоваться дополнительные проверки на наличие "{ACAD_XDICTIONARY"
для группы 102 DXF):
(setq d1 (cdr (assoc 360 (entget br))))
Теперь поищите в этом словаре запись ACAD_ENHANCEDBLOCK
:
(setq d2 (dictsearch d1 "acad_enhancedblock"))
Это даст данные DXF для объекта ACAD_EVALUATION_GRAPH
.
Затем можно выполнить итерацию по группе 360 DXF в данных DXF, чтобы получить данные DXF для каждого параметра динамического блока, найденного в определении блока, например ::101037.
_$ (foreach dxf d2 (if (= 360 (car dxf)) (print (cdr (assoc 0 (entget (cdr dxf)))))))
"BLOCKPOLARPARAMETER"
"BLOCKPOLARGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKPOLARSTRETCHACTION"
"BLOCKFLIPPARAMETER"
"BLOCKFLIPGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKFLIPACTION"
"BLOCKVISIBILITYPARAMETER"
"BLOCKVISIBILITYGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"