entget で取り出した、DXF図形情報から、欲しい情報だけをピックアップする方法を説明します。
予備知識
DXFグループコード図形情報
DXF図形情報は、AutoLISP関数 entget で取得できます。
(entget 図形名)
その引数になっている図形名は、(car (entsel))で、図形を選択して取得できます。
この2つの式を実行すると、変数 Ent にDXF図形情報が入ります。
(setq Obj (car (entsel))) ;図形名を得てObjに入れる
(setq Ent (entget Obj)) ;Obj(図形名)からDXF情報を得てEntに入れる
Jagaimo
ひとまとめに
(setq Ent (entget (car (entsel))))
としても、Entに入る情報は同じだよ。
今回使う例として、これは円を選択したときの、DXF図形情報です。
((-1 . <Entity name: 142defd4da0>) (0 . "CIRCLE") (330 . <Entity name: 142df0f4280>) (5 . "5F92") (100 . "AcDbEntity") (67 . 1)
(410 . "レイアウト1") (8 . "0") (100 . "AcDbCircle") (10 251.604 343.608 0.0) (40 . 27.9836) (210 0.0 0.0 1.0))
図形の画層名を取りだそう
関数 assoc
AutoLISP 関数 assoc を使うと、DXFグループコードを元に、DXF図形情報から欲しい情報だけを得ることができます。
では assocの機能を試してみましょう。
画層のグループコードは 8 です。
変数 Ent にDXF図形情報が入った状態で、
(assoc 8 Ent)
とコマンドラインに入力してください。
この円の例では、円の画層は”0″ なので、
戻り値は、(8 . “0”)、画層名のグループコードの 8 と、画層名の ”0″ です。
グループコード番号と情報の間に . (ドット)が入っていて、この形のリストははドットペアと呼ばれています。
関数 cdr
AutoLISP関数 cdr は、引数が通常のリストの場合、先頭の要素を無くした残りの要素が並んだリストが戻り値になります。
今回のドットペアが引数の場合は、ドットの後ろの要素が戻り値になります。
なので、先ほどのassoc と組み合わせて使うと、
(cdr (assoc 8 Ent))
画層の名前だけを得ることができます。
通常は、この画層名を使うために取り出すので、setq を使って変数に入れます。
(setq Ly (cdr (assoc 8 Ent)))
これでこの先、変数 Ly が、図形の画層名として代わりに使えます。
まとめ
- 関数 assoc で、DXF図形情報から、グループコードの要素だけを得ることができる。
- 各情報のグループコードはでAutodeskの公式サイトで調べる。(例 画層のグループコードは 8)
- assoc を使うと、グループコードと情報がドットペアと呼ばれるセットで戻る。
- 関数 cdr を合わせて使うと、グループコードを抜きの情報だけ戻る。
Comments