図形リストで調べるには
画層や線種が存在するかどうか調べるには、tblsearch 関数か tblobjname 関数を使います。
(tblsearch “LAYER” “FLOOR”)
((0 . “LAYER”) (2 . “floor”) (70 . 0) (62 . 3) (6 . “Continuous”))
(tblobjname “LTYPE” “DASHED”)
<EName: 000000356256a3a0>
tblsearch 関数は主要なプロパティを含むリストか、nilを返します。
tblobjname 関数は図形名か、nilを返します。
画層や線種の完全なリストを取得するには、tblobjname 関数と entget 関数を使います。
(setq el (entget (tblobjname “LTYPE” “DASHED”)))
((-1 . <EName: 000000356256a3a0>) (0 . “LTYPE”) (5 . “117”) (330 . <EName: 000000356e703b40>) (100 . “AcDbSymbolTableRecord”) (100 . “AcDbLinetypeTableRecord”) (2 . “DASHED”) (70 . 0) (3 . “Dashed __ __ __ __ __ __ __ __ __ __ “) (72 . 65) (73 . 2) (40 . 19.05) (49 . 12.7) (74 . 0) (49 . -6.35) (74 . 0))
ブロック(BLOCK)、画層(LAYER)、線種(LTYPE)、文字スタイル(STYLE)、寸法スタイル(DIMSTYLE)、UCS、ビュー(VIEW)、タイルビューポート(VPORT)、アプリケーションID(APPID) は tblsearch 関数や tblobjname 関数で同じようにアクセスできます。
オートメーションで調べるには
オートメーションで画層や線種を調べることも可能です。
: (setq lays (vla-get-layers doc))
#<VLA-OBJECT IAcadLayers 626cf970>
: (setq lay (vla-Item lays “Floor”))
#<VLA-OBJECT IAcadLayer 6c542b00>
: (vlax-dump-object lay)
ドキュメントオブジェクトに、ブロック、画層、線種、文字スタイル、寸法スタイル、UCS、ビュー、タイルビューポート、アプリケーションID を保持するコレクションを取得するプロパティがあります。画層 (layer) に対して 画層コレクションは layers と複数形になっています。
画層コレクションから画層にアクセスするには、Item メソッドで名前を指定して取得します。オブジェクトが取得できれば、 vla-get-プロパティ名で特定のプロパティにアクセスできます。 vlax-dump-object 関数を使えば、そのオブジェクトのプロパティをまとめて確認することができます。
基本LISP関数ですべての画層名を表示する
tblnext 関数を使うと、ブロック、画層、線種、文字スタイル、寸法スタイル、UCS、ビュー、タイルビューポート、アプリケーションID をすべて確認することができます。
(defun get-records ( kind / f el ret )
(setq f T ret nil)
(while (setq el (tblnext kind f))
(setq ret (cons (cdr (assoc 2 el)) ret))
(setq f nil)
)
ret
)
tblnext 関数は2つパラメータが必要で、最初は取得するデータの種類、2番目は T は巻き戻しをします。nil を指定すると次のデータを取得します。戻り値は tblsearch 関数と同じ主要なプロパティを含むリストか nil です。
上の関数は、ローカル変数 ret に図面の画層名や線種名をリストとしてため込んで、最後にその値を返します。
実行すると次のようになります。
(get-records “LAYER”)
(“floor” “PIPE” “0”)
(get-records “LTYPE”)
(“DASHED” “Continuous” “ByLayer” “ByBlock”)
リストの順序を反転するには reverse 関数を使います。
オートメーションですべての画層名を取得する
オートメーションでコレクションの内容をすべて取得するには、vlax-for 関数を使います。
(setq lays (vla-get-layers doc))
(vlax-for lays lay
(princ (strcat (vla-get-Name lay) “\n”))
)
結果は次のようになります。
0
PIPE
floor