我将给出一个假设的例子来演示我的问题。想象一下,在椅子的动态块定义上有一个查找参数“ Color”,并且给了它可能的值“ Red”,“ Blue”和“ Green”。现在,我需要将此查找参数推入其他类型的椅子的大量动态块定义中。我不想进入每个定义的UI和块编辑器并添加此查找参数。相反,我想通过编写Autolisp例程并传入不同的块来实现此自动化。
使用Autolisp可以做到吗?是否可以使用其他任何AutoCAD API?
以下注意事项:
答案 0 :(得分:2)
简而言之:不,此功能从未公开给LISP API。
虽然可以检索和更改现有动态块参数的值(使用块引用对象的getdynamicblockproperties
方法),但不能在块定义,这些对象也不会通过Visual LISP API可见。
奇怪的是,通过检查ACAD_ENHANCEDBLOCK
的扩展词典中的BLOCK_RECORD
词典,通过Vanilla AutoLISP查询块定义的DXF数据时,参数 是可见的实体:
(dictsearch
(cdr
(assoc 360
(entget
(cdr
(assoc 330
(entget
(tblobjname "block" "YourDynamicBlockName")
)
)
)
)
)
)
"acad_enhancedblock"
)
但是,DXF数据的这一区域完全没有记录,如果直接修改(如果API尚未正式支持),则可能会产生意外和不稳定的结果。