[AutoLISP X ChatGPT] AutoCADのオリジナルコマンドは ChatGPTに書いてもらえば、作業効率はさらにアップ!

AutoLisp

こんにちは、ISDです。

みなさん、AutoLISP 使ってますか? 便利ですよね~ AutoLISP
そして、ChatGPT 使ってますか? 凄いですよね~ 生成AI

AutoCAD の生産性アップに とっても貢献してくれる AutoLISP
プログラミングにとっても貢献してくれる ChatGPT
ということは、AutoLISP X ChatGPT で、作業効率はさらに倍率ドン!?

AutoLISP X ChatGPT で オリジナルコマンドを作ってみる

実は、昔 GPT-3 が公開された頃に、試しに AutoLISP でオリジナルコマンドを書かせてみたことがありました。
しかし、当時の段階では ChatGPT が出してきた コードが
「う~ん? ダメじゃん…」
な感じだったので、あきらめていたのですが。

その後、ChatGPT の機能も扱えるデータ量もだいぶアップデートしてきていますし、私も昔よりプロンプトの出し方に慣れてきたので
「今なら、なんだか行けそうな気がする~」
ということで、今更ながら再挑戦です。

ChatGPT は、一応有料版の PlusGPT-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 にオリジナルコマンドを作ってもらう

ChatGPTAutoLISPでオリジナルコマンドを作ってもらいます。
まずは、「Hello World !」的なお題として、

「選択したオブジェクトのエンティティを出力する」

では、行ってみましょう。
ChatGPT に投げたプロンプトは以下の通り

AutoCADで 以下の仕様のオリジナルコマンドを作成したい。
使用言語はAutoLISP

###
・選択したオブジェクトのエンティティを出力する
・エンティティデータごとに改行

まず、ChatGPTAutoLISP でオリジナルコマンドを作りたいと伝えます。
次に、作りたいコマンドの内容を具体的に指示しています。

そして、 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)
)

使い方

  1. 上のコードを LISP ファイルに保存して APPLOAD などで読み込む
  2. コマンドラインで EDUMP と入力
  3. エンティティを選択

その後、テキストウィンドウ(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 を使って AutoLISPAutoCAD のオリジナルコマンドが作れるのか挑戦してみました。

はじめの一歩としては、よい結果ではないでしょうか?
AutoLISP X ChatGPT 、とても可能性を感じます。

これは、使いようによっては化ける!

それにしても、 ChatGPT に限らず、生成 AI の発展速度が速すぎてついて行けない…

コメント

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