こんにちは、ISDです。
みなさん、AutoLISP 使ってますか? 便利ですよね~ AutoLISP
そして、ChatGPT 使ってますか? 凄いですよね~ 生成AI
AutoCAD の生産性アップに とっても貢献してくれる AutoLISP!
プログラミングにとっても貢献してくれる ChatGPT!
ということは、AutoLISP X ChatGPT で、作業効率はさらに倍率ドン!?
AutoLISP X ChatGPT で オリジナルコマンドを作ってみる
実は、昔 GPT-3 が公開された頃に、試しに AutoLISP でオリジナルコマンドを書かせてみたことがありました。
しかし、当時の段階では ChatGPT が出してきた コードが
「う~ん? ダメじゃん…」
な感じだったので、あきらめていたのですが。
その後、ChatGPT の機能も扱えるデータ量もだいぶアップデートしてきていますし、私も昔よりプロンプトの出し方に慣れてきたので
「今なら、なんだか行けそうな気がする~」
ということで、今更ながら再挑戦です。
ChatGPT は、一応有料版の Plus で GPT-5.1 Auto に設定しています。
「AutoLISP 理解できますか?」とChatGPTに聞いてみた
まずは、ChatGPTに聞いてみました。
「AutoLISP は理解できますか?」
それに対する ChatGPT の返答(原文ママ)
はい、AutoLISP を理解できます。
AutoCAD の DXF 構造、entget/entmake、ssget、trans、vla-object などの知識も含めて、AutoLISP コードの作成・修正・デバッグ・最適化が可能です。例えば次のような内容に対応できます:
✔ AutoLISP の理解・説明
- 関数の仕組み、ローカル変数、リスト処理
- entget / entmod / entmake / entdel の使い方
- DXF コードの意味(10, 40, 70, 90, 210 など)
- 反復処理、エラー処理、再帰処理
✔ AutoCAD 用オリジナルコマンドの作成
- Polyline / 3DFace / Line の生成・変換
- 図形の解析と自動処理
- 選択セット処理(ssget)
- UCS / WCS の変換(trans)
✔ AutoLISP のデバッグと改善
- 実行時の例外エラー解決
- 処理速度改善(ループ削減、リスト処理改善、vla 併用 etc)
必要であれば、
既存の AutoLISP を貼っていただければ解析して問題点を説明し、修正版を提供できます。続きをどうしましょうか?
う~む、頼もしいですね!
では、試しに ChatGPT にオリジナルコマンドを作ってもらいましょう。
試しに ChatGPT にオリジナルコマンドを作ってもらう
ChatGPT にAutoLISPでオリジナルコマンドを作ってもらいます。
まずは、「Hello World !」的なお題として、
「選択したオブジェクトのエンティティを出力する」
では、行ってみましょう。
ChatGPT に投げたプロンプトは以下の通り
AutoCADで 以下の仕様のオリジナルコマンドを作成したい。
使用言語はAutoLISP
###
・選択したオブジェクトのエンティティを出力する
・エンティティデータごとに改行
まず、ChatGPT に AutoLISP でオリジナルコマンドを作りたいと伝えます。
次に、作りたいコマンドの内容を具体的に指示しています。
そして、 ChatGPT の返答がこちら
こういう感じの AutoLISP でできます 👍
- オブジェクトを選択
- それぞれのエンティティの DXF リストを
「1グループ(dotted pair)=1行」 でコマンドラインに出力します。;;; 選択したオブジェクトのエンティティデータを出力 ;;; エンティティごとに区切り行、DXFグループごとに改行 ;;; コマンド名:EDUMP (defun c:EDUMP ( / *error* oldcmdecho ss i ent ed d n ) (defun *error* (msg) (setvar "cmdecho" oldcmdecho) (if (and msg (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")) ) (princ (strcat "\nError: " msg)) ) (princ) ) (setq oldcmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) ;; テキストウィンドウを開く(長い出力用) (textscr) (if (setq ss (ssget)) (progn (prompt (strcat "\n--- エンティティデータ出力開始 / 個数: " (itoa (sslength ss)) " ---" ) ) (setq n 0) (repeat (setq i (sslength ss)) (setq ent (ssname ss (setq i (1- i)))) (setq ed (entget ent)) (setq n (1+ n)) (prompt (strcat "\n\n==== エンティティ " (itoa n) " : " (rtos (cdr (assoc -1 ed)) 2 0) " ====" ) ) ;; DXFグループを1行ずつ出力 (foreach d ed (princ "\n") (prin1 d) ; 例: (0 . "LINE") ) ) (prompt "\n\n--- エンティティデータ出力終了 ---") ) (prompt "\nオブジェクトを選択してください。") ) (*error* nil) (princ) )
使い方
- 上のコードを LISP ファイルに保存して
APPLOADなどで読み込む- コマンドラインで
EDUMPと入力- エンティティを選択
その後、テキストウィンドウ(F2) を開くと
==== エンティティ 1 : ... ====(0 . "LINE")(8 . "0")(10 100.0 200.0 0.0)- …
という形で、DXFの dotted pair ごとに1行で表示されます。
もし「ファイルに書き出したい」などがあれば、その版も用意できます。
出てきました。
適度にコメントも入れてくれるので、何をやろうとしているのかも見て取れます。
何か、エラー時の処理とかも入れてくれていますね。
パッと見、問題なさそうです。
ChatGPT作成のコマンドを実行してみる
では、ChatGPT が作ってくれたコマンドが問題なく動作するのか、実際に試してみましょう。
まず、ChatGPT が書いたコードを EDUMP.lsp という名前(名前は別に何でもよい)で保存します。
そして、EDUMP.lsp のファイルを、作図領域にドラッグ&ドロップすると ChatGPTが作ってくれたEDUMP というオリジナルコマンドが定義されます。
取りあえず、下図の円オブジェクトのエンティティを出力させてみます。
●円オブジェクトのプロパティ
・中心座標 :(2,3,0)
・半径 : 1.5

円オブジェクトを選択して、コマンドプロンプトに EDUMP と入力すると…
テキストウィンドウに、円オブジェクトのエンティティデータが表示されました!

おお!ちゃんと表示されている!!
ちょっと感動…
まとめ
今回は、ChatGPT を使って AutoLISP で AutoCAD のオリジナルコマンドが作れるのか挑戦してみました。
はじめの一歩としては、よい結果ではないでしょうか?
AutoLISP X ChatGPT 、とても可能性を感じます。
これは、使いようによっては化ける!
それにしても、 ChatGPT に限らず、生成 AI の発展速度が速すぎてついて行けない…


コメント