2016-07-11 7 views
0

私はどのようにautocadの辞書を掘るかを理解するために少し助けが必要です。dictonary内で掘る

私は、図面の中にいくつかの棒を描くことができたが、いくつかのバグがあります。私はそれがどのように動作するのか理解したいので、修正することができます。

は私がで辞書のリストを取得する: (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

(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>)と同じであることがわかります。 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"))) ...

これらのオブジェクトはあなた寸法している場合、これはあなたがそれらに達することができる方法です。

関連する問題