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>)

)

したがって、acad_reactors が追加され、(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")は、返されるオブジェクトもディクショナリであることを意味します。これは、オートデスクが推奨するアプローチです。名前付きオブジェクト ディクショナリ (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>)2 番目のディクショナリ リアクタ オブジェクトがオーナー ディクショナリ (この場合は NOD) であることを意味します。

最後に、ディクショナリはペアのリストです。つまり、(3 . "1") (350 . <Nome entità: 7ff5ffb05920>) (3 . "2") (350 . <Nome entità: 7ff5ffb05b00>)キー"1""2"を持つ 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 に答える