ディクショナリオブジェクトに格納されている非図形オブジェクトの検索とリストの方法を紹介します。
図形リストで調べるには
レイアウトはディクショナリに保存されているので、dictsearch 関数や、dictnext 関数を使います。
図面の名前付きオブジェクトを管理するディクショナリは namedobjdict 関数でアクセスできます。
(setq root (entget (namedobjdict)))
レイアウトの一覧は、キー値 ACAD_LAYOUT のディクショナリを見るとわかります。
(setq dic (dictsearch (namedobjdict) “ACAD_LAYOUT”))
特定のディクショナリを検索するには次のようになります。
(setq obj (dictsearch (cdr (car dic)) “シート1”))
dictseach 関数が返す図形リストはすべてのプロパティを含む図形リストなので、そのままプロパティの取得や修正に使うことができます。
dictnext 関数は2つパラメータが必要で、最初はディクショナリの図形名、2番目は T は巻き戻しをします。nil を指定すると次のデータを取得します。戻り値はすべてのプロパティを含む図形リストか nil です。
オートメーションで調べるには
レイアウト(layout)にはレイアウト コレクション(layouts)があります。レイアウト名で取得するには Item メソッドを使います。vlax-for 関数を使えば、コレクションからレイアウトを一つずつ取得できます。
: (setq dic (vla-get-Layouts doc))
#<VLA-OBJECT IAcadLayouts 6c549c80>
: (setq obj (vla-item dic “シート2”))
#<VLA-OBJECT IAcadLayout 6c55f380>
: (vlax-dump-object obj)
オートメーションでコレクションの内容をすべて取得するには、vlax-for 関数を使います。
(vlax-for obj dic
(princ (strcat (vla-get-name obj) “\n”))
)
結果は次のようになります。
Model
シート1
シート2
ディクショナリに保存されているオブジェクトは他に、グループ 、イメージ参照定義、マルチラインスタイル、表スタイル、マルチ引出線スタイル、印刷設定、印刷スタイル、マテリアル、表示スタイル、注釈尺度、色名など多数あります。