CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

Autolisp言語で簡易CADチャットボットのプログラムを書いてもらった。

2023-05-19 19:30:25 | Autocad

Pythonで簡易CADチャットボットを作った - CyberChaos(さいばかおす) (goo.ne.jp)

でChatGPTにPythonで書いてもらったCADチャットボットプログラムを

今度はAutolisp言語で書き換えてもらった。

さて結果はどうなることやら。以下がそのコード。

(defun create-line ()
(setq start-x (atoi (vl-string->list (getstring "始点のX座標を入力してください。"))))
(setq start-y (atoi (vl-string->list (getstring "始点のY座標を入力してください。"))))
(setq end-x (atoi (vl-string->list (getstring "終点のX座標を入力してください。"))))
(setq end-y (atoi (vl-string->list (getstring "終点のY座標を入力してください。"))))

(command "_line" (list start-x start-y) (list end-x end-y))
)

(defun create-circle ()
(setq center-x (atoi (vl-string->list (getstring "中心のX座標を入力してください。"))))
(setq center-y (atoi (vl-string->list (getstring "中心のY座標を入力してください。"))))
(setq radius (atoi (vl-string->list (getstring "半径を入力してください。"))))

(setq x1 (- center-x radius))
(setq y1 (- center-y radius))
(setq x2 (+ center-x radius))
(setq y2 (+ center-y radius))

(command "_circle" (list center-x center-y) radius)
)

(defun process-user-input ()
(setq user-input (getstring "何をしましょうか?"))
(setq has-line (vl-string-search "直線" user-input))
(setq has-circle (vl-string-search "円" user-input))

(if has-line
(create-line)
(if has-circle
(create-circle)
(alert "そのような操作はできません。"))
)
)

(defun cad ()
(setq root (vlax-get-or-create-object "AutoCAD.Application"))
(setq doc (vla-get-ActiveDocument root))
(setq model-space (vla-get-ModelSpace doc))

(setq canvas (vla-AddCanvas model-space (vlax-3d-point '(0 0 0)) 400 400))

(setq button (vla-AddButton canvas "操作を入力" '(0 0 0) "process-user-input"))
(vla-put_Enabled button :vlax-true)

(vla-ShowBalloon button "CAD" "CAD" "操作を入力してください。" 1)
)

(defun c:cad ()
(cad)
(princ)
)

上記のコードは、AutoCADのカスタムコマンドとして実行することを想定しています。c:cadというコマンドを呼び出すことで、CAD環境が起動し、操作を受け付けます。

このコードをAutoCADのLISPエディタに貼り付け、保存してからc:cadというコマンドを実行すると、CADアプリケーションが起動し、指定された操作を行うことができます。

ご注意ください。

P.S.

全く動かんorz

やはり苦楽したAutocad2020ではダメなのか?

禿臆で更新できるAutocad2023とかを扱ってる輩から買い直すしかないのか?


autolispでpythonを呼び出して自動でautocadでモデリング

2023-05-13 12:36:45 | Autocad
autolispでpythonを呼び出して自動でautocadでモデリングをしたい

はい、Autolispを使用してPythonを呼び出してAutoCADで自動モデリングを行うことができます。AutolispはAutoCADで使用できるプログラミング言語であり、Pythonは強力で用途の広いプログラミング言語です。 Autolispを使用してPythonを呼び出すと、AutoCADで複雑なモデリングタスクを自動化できます。

Autolispを使用してPythonを呼び出すには、Autolisp関数acedEval()を使用する必要があります。acedEval()関数は、Pythonコード文字列を実行するために使用されます。たとえば、次のAutolispコードは、Pythonコード文字列print("Hello, world!")を実行します。

(acedEval "print('Hello, world!')")

詳細
Autolispを使用してPython関数を呼び出すこともできます。たとえば、次のAutolispコードは、Python関数math.sqrt()を呼び出して2の平方根を計算します。

(acedEval "(math.sqrt 2)")

詳細
Autolispを使用してPythonライブラリをロードすることもできます。たとえば、次のAutolispコードは、Pythonライブラリnumpyをロードします。

(acedEval "import numpy")

詳細
Autolispを使用してPythonオブジェクトを作成することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトnumpy.array([1, 2, 3])を作成します。

(acedEval "arr = numpy.array([1, 2, 3])")

詳細
Autolispを使用してPythonオブジェクトを操作することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトarrの要素の合計を計算します。

(acedEval "print(arr.sum())")

詳細
Autolispを使用してPythonオブジェクトを保存することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトarrをファイルoutput.csvに保存します。

(acedEval "arr.tofile('output.csv')")

詳細
Autolispを使用してPythonオブジェクトを読み込むこともできます。たとえば、次のAutolispコードは、ファイルinput.csvからPythonオブジェクトarrを読み込みます。

(acedEval "arr = numpy.loadtxt('input.csv', delimiter=',')")

詳細
Autolispを使用してPythonオブジェクトを表示することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトarrを図面に表示します。

(acedEval "arr.plot()")

詳細
これらは、Autolispを使用してPythonを呼び出してAutoCADで自動モデリングを行う方法のほんの一例です。Autolispを使用してPythonを呼び出す方法は他にもたくさんあります。Autolispを使用してPythonを呼び出す具体的な方法は、実行しようとしている特定のタスクによって異なります。

…だとよ。マジか?
これが本当だったらChatGPT死亡確定だぞwww
めちゃくちゃ応答が早いし。


AutoCADプラグイン・アドイン開発

2023-05-06 12:51:41 | Autocad

AutoCADのAddinをC#で書いてみるー③ | AMDlab Tech Blog

AutoCADのAddinをC#で書いてみるー③ | AMDlab Tech Blog

こんにちは、AMDlabの森山です。前回まででAutoCADの基本的なアドインの作り方は説明し終えています。BricsCADやIJCADなど2DCADはほとんど同じ考え方な気がします。

AMDlab Tech Blog | 建築を中心として、3Dモデリング、IoT、デジタルファブリケーション、Webなどの様々なテクノロジーに関する記事を提供しています。

やっと求めている情報にたどり着いた!

Autocadのアドイン・プラグインの開発はどうすればよいのか、書籍は無いのか、いろいろ試行錯誤してきた。

このサイトはC#でアドイン・プラグイン開発をやっているとのこと。

ゲームエンジンのUnityもC#だ。



チャットボットもC#で作ればAutocadのプラグインとして使えるようになると思われる。



LineAPIとAutocadの連携は果たして可能なのか?

2023-05-01 13:35:40 | Autocad
LineAPIとAutocadの連携は可能ですか?例えば、Lineで「始点の(X,Y)座標が(0,0)、終点の(X,Y)座標が(100,100)の直線を描いて」と書くとAutocadのワークスペースに始点の(X,Y)座標が(0,0)、終点の(X,Y)座標が(100,100)の直線が描かれるようにすることは可能ですか?


LineAPIとAutoCADを連携させることは可能ですが、それぞれのAPIやプログラミング言語に熟練している必要があります。

一般的に、LineAPIはPythonやJavaなどのプログラミング言語を使用して開発され、AutoCADはAutoLISPや.NETなどの言語を使用して開発されます。そのため、LineAPIとAutoCADを連携させるには、どちらかのAPIを介して通信する必要があります。

例えば、PythonでLineAPIを使用して始点の(X,Y)座標と終点の(X,Y)座標を取得し、AutoCADのAutoLISPを使用して直線を描画することができます。しかし、このような機能を実装するには、相応のプログラミングスキルと、AutoCADとLineAPIのAPIドキュメントの理解が必要です。

簡単に言えば、LineAPIとAutoCADの連携を実現することは可能ですが、そのためには開発者が必要な知識と技能があることが必要です。

また、同様なことをtwitterAPIとautocadで連携してできますか?

TwitterAPIとAutoCADを連携させることも可能ですが、それぞれのAPIやプログラミング言語に熟練している必要があります。

TwitterAPIは一般的にPythonやJavaなどのプログラミング言語を使用して開発され、AutoCADはAutoLISPや.NETなどの言語を使用して開発されます。そのため、TwitterAPIとAutoCADを連携させるには、どちらかのAPIを介して通信する必要があります。

例えば、PythonでTwitterAPIを使用して、ツイートの内容から始点の(X,Y)座標と終点の(X,Y)座標を取得し、AutoCADのAutoLISPを使用して直線を描画することができます。しかし、このような機能を実装するには、相応のプログラミングスキルと、AutoCADとTwitterAPIのAPIドキュメントの理解が必要です。

簡単に言えば、TwitterAPIとAutoCADの連携を実現することは可能ですが、そのためには開発者が必要な知識と技能があることが必要です。

AutoLispでLineのようなChatアプリを作りたいのだが…

2023-05-01 13:32:13 | Autocad
AutoLispでLineのようなChatアプリを作ることは可能ですか?

AutoLISPは、主にAutoCADといったCADソフトウェア向けに開発されたプログラミング言語です。AutoLISPを使用してLineのようなChatアプリケーションを作成することは可能ですが、それにはいくつかの制限があります。

AutoLISPは、インターネット通信やデータベースアクセスなどの一般的なタスクを実行するための十分なライブラリを持っていません。したがって、Chatアプリケーションを開発するために必要なネットワーク通信、データベースアクセス、セキュリティ、およびその他の機能を実装するには、他のプログラミング言語を使用することが必要です。

また、AutoLISPはCADアプリケーションに特化しており、グラフィックス処理に優れた機能を提供していますが、GUIアプリケーションの開発には適していません。

そのため、AutoLISPを使用してChatアプリケーションを開発することは可能ですが、他のプログラミング言語を使用する方がより適切であると言えます。


Lisp言語とAutoLispの違いをChatGPTに訊いてみた

2023-05-01 13:15:26 | Autocad
Lisp言語とAutoLispの違いは?

Lisp (LISt Processing) は、AIや自然言語処理、数学、コンピュータ科学など、様々な分野で広く使用されているプログラミング言語の一種です。一方、AutoLISPは、Lispをベースにして、AutoCADなどのCADソフトウェアで使用されるプログラミング言語です。

Lisp言語とAutoLISPの主な違いは、以下の通りです。

用途
Lisp言語は、一般的なプログラミング言語であり、様々な分野で使用されます。一方、AutoLISPは、CADソフトウェアでのみ使用されることが多く、AutoCADなどのアプリケーションを拡張するためのプログラミング言語として使用されます。

構文
Lisp言語とAutoLISPの構文は似ていますが、AutoLISPはAutoCADのオブジェクトやコマンドにアクセスするための固有の関数や変数を持っています。また、AutoLISPでは、AutoCADで使用される座標系や単位系に関する処理をサポートしています。

拡張性
Lisp言語は非常に柔軟で拡張性が高い言語であり、新しい関数やマクロを定義することが容易です。AutoLISPも同様に拡張性が高いですが、AutoCADのAPIにアクセスできるため、AutoCADの機能を拡張することができます。

開発環境
Lisp言語には、EmacsやSBCLなど、多数の開発環境があります。一方、AutoLISPは、AutoCADの内部で動作するため、AutoCADが開発環境となります。

総合的に見て、Lisp言語とAutoLISPは非常に似ていますが、AutoLISPはAutoCADの機能を拡張するためのプログラミング言語であるため、構文や機能面で差異があります。