0

我需要一点帮助来了解如何在 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 (但是如何?如何查看反应器?)

4

1 回答 1

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 的所有者。这是为了让 AutoCAD 检测对象何时被修改或删除。因此,当子对象被删除时,所有者字典可以从其条目列表中删除元素键。您可以看到(330 . <Nome entità: 7ff5ffb038c0>)上面的(-1 . <Nome entità: 7ff5ffb038c0>)条目与您在第一次调用中的条目相同。意思是第二个字典反应器对象是所有者字典(在这种情况下是 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"))) ...

如果这些对象是您的维度,这就是您可以达到它们的方式。

于 2016-07-12T06:07:41.187 回答