我需要一些帮助才能理解如何在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(但是如何看待反应堆?)
答案 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")))
...
如果这些对象您的维度,则可以通过以下方式与他们联系。