使用VBA重命名动态块可见性状态

时间:2018-11-07 07:40:26

标签: vba autocad

如何在AutoCAD中使用VBA更改或重命名动态块的可见性状态,类似于在“块编辑器”中发出RENAME命令时出现的“可见性状态”对话框中单击“ BVSTATE”?

非常感谢您的帮助。

1 个答案:

答案 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"