如何在AutoCAD中使用VBA更改或重命名动态块的可见性状态,类似于在“块编辑器”中发出RENAME
命令时出现的“可见性状态”对话框中单击“ BVSTATE
”?
非常感谢您的帮助。
答案 0 :(得分:0)
简而言之,不可能直接使用LISP或VBA API重命名动态块可见性状态,而无需诉诸标准AutoCAD命令,例如使用AutoLISP command
函数或sendcommand
方法。
块定义中包含的动态块参数不会公开给ActiveX对象模型,因此无法使用Visual LISP或VBA进行修改。
通过检查存储在BLOCK_RECORD
实体的扩展词典中的DXF数据将这些参数暴露给Vanilla AutoLISP,但是不能使用entmod
修改这些数据,也不能转换为等效的VLA-Object表示形式后,它是否会产生任何相关属性?
对于它的价值,您可以通过AutoLISP API使用以下路由访问动态块参数DXF数据:
首先,获取BLOCK
实体:
(setq bl (tblobjname "block" "YourBlockName"))
然后获取父BLOCK_RECORD
实体:
(setq br (cdr (assoc 330 (entget bl))))
现在从DXF组360获取扩展字典(在生产代码中应使用针对DXF组102的"{ACAD_XDICTIONARY"
的附加检查):
(setq d1 (cdr (assoc 360 (entget br))))
现在在此词典中搜索ACAD_ENHANCEDBLOCK
条目:
(setq d2 (dictsearch d1 "acad_enhancedblock"))
这将产生ACAD_EVALUATION_GRAPH
实体的DXF数据。
然后,您可以遍历DXF数据中的DXF组360,以获得在块定义中找到的每个动态块参数的DXF数据,例如:
_$ (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"