是否可以使用Autolisp

时间:2019-05-14 20:46:17

标签: autolisp

我将给出一个假设的例子来演示我的问题。想象一下,在椅子的动态块定义上有一个查找参数“ Color”,并且给了它可能的值“ Red”,“ Blue”和“ Green”。现在,我需要将此查找参数推入其他类型的椅子的大量动态块定义中。我不想进入每个定义的UI和块编辑器并添加此查找参数。相反,我想通过编写Autolisp例程并传入不同的块来实现此自动化。

使用Autolisp可以做到吗?是否可以使用其他任何AutoCAD API?

以下注意事项:

  1. 我要编辑不同的块定义,而不是引用。
  2. 我不想使用块属性表,因为我已经将其用于其他目的。

1 个答案:

答案 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尚未正式支持),则可能会产生意外和不稳定的结果。