AutoCADで図形を自動生成したいとき、AutoLISPの entmake
関数は非常に強力です。この記事では、DXFデータの構造を理解しながら、entmake
を使って図形を作成する方法をステップ形式で解説します。
Step 1:entmakeとは何か?
entmake
は、AutoCADの図形(エンティティ)を直接作成する関数です。DXFコードをリスト形式で指定することで、図形の属性を細かく定義できます。
たとえば、線分(LINE)を作成するには以下のように記述します:
(entmake
'((0 . "LINE")
(10 0 0 0) ; 始点
(11 100 100 0))) ; 終点
このコードは、(0,0,0) から (100,100,0) までの線分を作成します。
Step 2:基本図形を作ってみよう
ここでは、よく使う図形の作成例を紹介します。
線分(LINE)
(defun c:make-line ()
(entmake
(list
'(0 . "LINE")
(cons 10 (getpoint "\n始点を指定: "))
(cons 11 (getpoint "\n終点を指定: "))
)
)
(princ "\n線分を作成しました。")
)
円(CIRCLE)
(defun c:make-circle ()
(entmake
(list
'(0 . "CIRCLE")
(cons 10 (getpoint "\n中心点を指定: "))
(cons 40 (getreal "\n半径を指定: "))
)
)
(princ "\n円を作成しました。")
)
Step 3:文字を作成してみよう
単一行文字(TEXT)
(defun c:make-text ()
(entmake
(list
'(0 . "TEXT")
(cons 10 (getpoint "\n文字位置を指定: "))
(cons 40 2.5) ; 文字高さ
(cons 1 "こんにちはAutoLISP") ; 表示文字列
)
)
(princ "\n文字を作成しました。")
)
複数行文字(MTEXT)
(defun c:make-mtext ()
(entmake
(list
'(0 . "MTEXT")
'(100 . "AcDbEntity")
'(100 . "AcDbMText")
(cons 10 (getpoint "\n文字位置を指定: "))
(cons 1 "これは複数行の文字列です。\n改行もできます。")
)
)
(princ "\nMTEXTを作成しました。")
)
Step 4:ブロックを定義して挿入してみよう
(defun c:make-block ()
(entmake '((0 . "BLOCK") (2 . "MyBlock") (10 0 0 0)))
(entmake '((0 . "LINE") (10 0 0 0) (11 50 50 0)))
(entmake '((0 . "ENDBLK")))
(entmake '((0 . "INSERT") (2 . "MyBlock") (10 100 100 0)))
(princ "\nブロックを定義して挿入しました。")
)
Step 5:entmakeの応用テクニック
属性付きブロック(ATTDEF + ATTRIB)
属性定義を含むブロックを作成することで、図面に情報を埋め込むことができます。これは図面管理や帳票連携に便利です。
DXFコードの確認
図形のDXFコードを確認したい場合は、entget
を使って取得し、assoc
で特定のコードを抽出できます。
(setq ed (entget (car (entsel))))
(cdr (assoc 8 ed)) ; レイヤー名
おまけ:よく使うDXFコード一覧
DXFコード | 意味 |
---|---|
0 | エンティティタイプ |
10 | 始点・位置 |
11 | 終点 |
40 | 半径・文字高さ |
1 | 表示文字列 |
8 | レイヤー名 |
62 | 色番号 |
まとめ
entmake
を使えば、AutoCAD上で図形を自在に生成できます。DXFコードの理解が深まれば、より柔軟な自動化が可能になります。
コメント