図形のDXF情報には、その図形のいろんな情報が詰まっています。この情報を取得したり変更したりすることで、コマンド作りの幅が広がりますよ。
予備知識
図形名から図形のDXF図形情報を得ます。
図形名の取得方法はコチラの記事を。
DXF (Drawing Interchange/Exchange Format) とは
DXF™ 形式は、AutoCAD ® の図面ファイルに格納されるすべての情報をタグ付きデータで表現したものです。「タグ付きデータ」とは、ファイル内の各データ要素の前に、「グループ コード」と呼ばれる整数が付いたデータのことです。グループ コードの値は、それに続くデータ要素のタイプを表します。この値はまた、特定のオブジェクト(またはレコード)タイプのデータ要素の意味も表します。実際には、図面内でユーザが指定したすべての情報は、DXF 形式で表現することができます。
Autodesk ヘルプ
AutoCADには、DXFと呼ばれるフォーマットがあります。DXFを検索するといろいろ出てきますが、
とりあえずAutoLISPでコマンドを作るにあたり、必要なことは、
全ての要素(エンティティ)には「グループ コード」と呼ばれる数字とセットになった情報がある。
ということだけです。
AutoLISP関数 entget
では、「要素(エンティティ)のDXF情報」とはどんなものなのか見てみましょう。
DXF情報を取得するAutoLISP関数は、entget です。
(car (entsel)) で取り出したオブジェクト名が引数、DXF情報が戻り値です。
DXF情報を取得してみよう
まず、図形(オブジェクト)名を取得して、変数Obj に入れましょう。
(setq Obj (car (entsel)))
その後、図形名が入ったObjをを引数にして entget を使うと、
(entget Obj)
グループコードという整数とセットになった図形のDXF情報が戻ってきます。
これは、円のDXF情報です。
((-1 . <Entity name: 142defd4da0>) (0 . "CIRCLE") (330 . <Entity name: 142df0f4280>) (5 . "5F92") (100 . "AcDbEntity") (67 . 1)
(410 . "Layout1") (8 . "0") (100 . "AcDbCircle") (10 251.604 343.608 0.0) (40 . 27.9836) (210 0.0 0.0 1.0))
. (ドット) で仕切られて、整数と情報がペアになっています。この整数がグループコードです。
このグループコードが何を意味しているのか、ヘルプの一覧を見てみましょう。
この一覧を見ると、0 は図形タイプ、410はレイアウトタブの名前、10は中心点座標、ということがわかります。
DXF図形情報を変数に
setq を使って、変数に情報を入れると、後で変数Ent がこの円のDXF図形情報の代わりとして使えます。
(setq Ent (entget Obj))
このDXF情報から、円の中心、画層名などなど情報を取得することで、この円の画層のプロパティを変更するとか、円の中心点にブロックを置くなどなど、図形情報をもとにコマンドを作ることができます。
DXF図形情報から各情報を取り出す記事はコチラ
(setq Obj (car (entsel)))
(setq Ent (entget Obj))
ここでは、Obj に図形名を入れてから entget を使ったけれど、ひとまとめに
(setq Ent (entget (car (entsel))))
としても、Entに入る情報は同じだよ。
まとめ
- 全ての要素は、「グループ コード」という整数とセットになった情報、DXF情報を持っている。
- AutoLISP 関数 enget は、そのDXF情報を取り出す関数。
- entogetの引数は、(car (entsel)) で取り出した図形(オブジェクト)名で、DXF情報が戻る。
Visual LISPで図形の情報を取得
Visual LISP を使う方法もあります。
関連記事
図形の情報を取得が入った練習問題
Comments