在字典里面挖

时间:2016-07-11 16:17:18

标签: autocad autolisp

我需要一些帮助才能理解如何在autocad中挖掘字典。

我有一点停止使用autocad的插件,让我在绘图中绘制一些杆,但它有一些错误。我想了解它是如何工作的,所以我可以解决它们。

我通过以下方式获取字典列表: (entget(namedobjdict)))`

((-1 . <Nome entità: 7ff5ffb038c0>) (0 . "DICTIONARY")
                                    (330 . <Nome entità: 0>)
                                    (5 . "C")
                                    (100 . "AcDbDictionary")
                                    (280 . 0)
                                    (281 . 1)
                                    (3 . "ACAD_COLOR")
                                    (350 . <Nome entità: 7ff5ffb03bb0>)
                                    (3 . "ACAD_GROUP")
                                    (350 . <Nome entità: 7ff5ffb038d0>)
                                    (3 . "ACAD_LAYOUT")
                                    (350 . <Nome entità: 7ff5ffb039a0>)
                                    (3 . "ACAD_MATERIAL")
                                    (350 . <Nome entità: 7ff5ffb03ba0>)
                                    (3 . "ACAD_MLEADERSTYLE")
                                    (350 . <Nome entità: 7ff5ffb05150>)
                                    (3 . "ACAD_MLINESTYLE")
                                    (350 . <Nome entità: 7ff5ffb03970>)
                                    (3 . "ACAD_PLOTSETTINGS")
                                    (350 . <Nome entità: 7ff5ffb03990>)
                                    (3 . "ACAD_PLOTSTYLENAME")
                                    (350 . <Nome entità: 7ff5ffb038e0>)
                                    (3 . "ACAD_SCALELIST")
                                    (350 . <Nome entità: 7ff5ffb050c0>)
                                    (3 . "ACAD_TABLESTYLE")
                                    (350 . <Nome entità: 7ff5ffb03c60>)
                                    (3 . "ACAD_VISUALSTYLE")
                                    (350 . <Nome entità: 7ff5ffb03ef0>)
                                    (3 . "ACAD_WIPEOUT_VARS")
                                    (350 . <Nome entità: 7ff5ffb05800>)
                                    (3 . "ACDB_RECOMPOSE_DATA")
                                    (350 . <Nome entità: 7ff5ffb05350>)
                                    (3 . "AcDbVariableDictionary")
                                    (350 . <Nome entità: 7ff5ffb03ae0>)
                                    (3 . "ENVIRONMENT")
                                    (350 . <Nome entità: 7ff5ffb05750>)
                                    (3 . "FERRO")
                                    (350 . <Nome entità: 7ff5ffb05910>)
                                    (3 . "POS_FERRO")
                                    (350 . <Nome entità: 7ff5ffb05930>)
                                    (3 . "POSIZIONAMENTO_FERRO")
                                    (350 . <Nome entità: 7ff5ffb05880>)
)

现在我想发现“FERRO”里面的内容

(dictsearch (namedobjdict) "FERRO")

我得到了:

    ((-1 . <Nome entità: 7ff5ffb05910>) (0 . "DICTIONARY")
                                (5 . "1F9")
                                (102 . "{ACAD_REACTORS")
                                (330 . <Nome entità: 7ff5ffb038c0>)
                                (102 . "}")
                                (330 . <Nome entità: 7ff5ffb038c0>)
                                (100 . "AcDbDictionary")
                                (280 . 0)
                                (281 . 1)
                                (3 . "1")
                                (350 . <Nome entità: 7ff5ffb05920>)

这不是我期望找到的......“Ferro”应包含有关杆的尺寸,数量和类型的信息。

也许我要挖掘更多,但此时我不知道该怎么做。

如果我添加另一根杆,这是不同的:

    ((-1 . <Nome entità: 7ff5ffb05910>) (0 . "DICTIONARY")
                                (5 . "1F9")
                                (102 . "{ACAD_REACTORS")
                                (330 . <Nome entità: 7ff5ffb038c0>)
                                (102 . "}")
                                (330 . <Nome entità: 7ff5ffb038c0>)
                                (100 . "AcDbDictionary")
                                (280 . 0)
                                (281 . 1)
                                (3 . "1")
                                (350 . <Nome entità: 7ff5ffb05920>)
                                (3 . "2")
                                (350 . <Nome entità: 7ff5ffb05b00>)

所以它添加了一个(3 . "%progressive number%") (350 . entity name),也许它会改变acad_reactors(但是如何看待反应堆?)

1 个答案:

答案 0 :(得分:0)

(entget (namedobjdict)))返回AutoCAD命名对象词典,它代表强制性和唯一的AutoCAD词典。所有DWG都包含此词典,您无法替换或删除此词典。

(dictsearch (namedobjdict) "FERRO")当您调用此函数时,AutoCAD会返回该字典中的 FERRO 条目。 (0 . "DICTIONARY") (100 . "AcDbDictionary")表示返回给您的对象也是字典,这是Autodesk推荐的方法。永远不要将任何对象直接存储到命名对象字典(NOD)中,而是为您的应用程序创建一个中间字典。这似乎就是这种情况。

(102 . "{ACAD_REACTORS") (330 . <Nome entità: 7ff5ffb038c0>) (102 . "}") (330 . <Nome entità: 7ff5ffb038c0>)是AutoCAD内部参考。在字典中,所有字典元素(无论它们是简单对象还是字典)都将其所有者作为AutoCAD Reactor。这是为了检测对象何时被修改或删除。因此,例如,当删除子对象时,所有者字典可以从其条目列表中移除元素密钥。您可以看到上面的条目(330 . <Nome entità: 7ff5ffb038c0>)与您在第一次调用中的(-1 . <Nome entità: 7ff5ffb038c0>)条目相同。意味着第二个字典reactor对象是所有者字典(在本例中为NOD)

最后,但并非最不重要的是,字典是一对的列表。在您的情况下,您获得了(3 . "1") (350 . <Nome entità: 7ff5ffb05920>) (3 . "2") (350 . <Nome entità: 7ff5ffb05b00>),这意味着您有2个条目,其中包含键“1”“2”,并且每个条目都有一个关联的对象这可能是你期待的对象?

(setq ferroDict (entget (dictsearch (namedobjdict) "FERRO"))) (setq ferro1 (entget (dictsearch ferroDict "1"))) (setq ferro1 (entget (dictsearch ferroDict "2"))) ...

如果这些对象您的维度,则可以通过以下方式与他们联系。