entmake関数で図形を作成!AutoLISPチュートリアル

Autolisp

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コードの理解が深まれば、より柔軟な自動化が可能になります。

コメント

タイトルとURLをコピーしました