goo blog サービス終了のお知らせ 

CyberChaos(さいばかおす)

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

任意の3点を通る円弧を描くAutolisp言語ソースコードを出力するPythonプログラム

2023-05-27 15:34:40 | Autocad
import tkinter as tk

def generate_autolisp_code():
pt1 = (entry1_x.get(), entry1_y.get())
pt2 = (entry2_x.get(), entry2_y.get())
pt3 = (entry3_x.get(), entry3_y.get())

autolisp_code = '''
(defun c:test ()
(setq pt1 '({} {}))
(setq pt2 '({} {}))
(setq pt3 '({} {}))
(draw-arc-through-points pt1 pt2 pt3)
)

(defun draw-arc-through-points (pt1 pt2 pt3)
(setq center (find-circle-center pt1 pt2 pt3))
(setq radius (distance center pt1))
(setq start-angle (angle pt1 center))
(setq end-angle (angle pt3 center))
(command "arc" center radius start-angle end-angle)
)

(defun find-circle-center (pt1 pt2 pt3)
(setq m1 (/ (- (cdr pt2) (cdr pt1)) (- (car pt2) (car pt1))))
(setq m2 (/ (- (cdr pt3) (cdr pt2)) (- (car pt3) (car pt2))))
(setq x1 (/ (+ (car pt1) (car pt2)) 2.0))
(setq x2 (/ (+ (car pt2) (car pt3)) 2.0))
(setq y1 (/ (+ (cdr pt1) (cdr pt2)) 2.0))
(setq y2 (/ (+ (cdr pt2) (cdr pt3)) 2.0))
(setq dx (- x2 x1))
(setq dy (- y2 y1))
(setq d (- (* m1 dx) dy))
(setq cx (+ x1 (/ (* dy d) (sqrt (+ (* m1 m1) 1.0)))))
(setq cy (+ y1 (/ (* (- dx) d) (sqrt (+ (* m1 m1) 1.0))))))
(list cx cy)
)

(defun distance (pt1 pt2)
(sqrt (+ (expt (- (car pt2) (car pt1)) 2) (expt (- (cdr pt2) (cdr pt1)) 2)))
)

(defun angle (pt center)
(setq dx (- (car pt) (car center)))
(setq dy (- (cdr pt) (cdr center)))
(setq ang (atan dy dx))
(if (< ang 0)
(+ ang (* 2 pi))
ang
)
)
'''.format(*pt1, *pt2, *pt3)

output.delete(1.0, tk.END)
output.insert(tk.END, autolisp_code)

# Create the TKinter window
window = tk.Tk()
window.title("Autolisp Code Generator")

# Create entry fields for point coordinates
entry1_x = tk.Entry(window, width=10)
entry1_x.grid(row=0, column=0)
entry1_y = tk.Entry(window, width=10)
entry1_y.grid(row=0, column=1)

entry2_x = tk.Entry(window, width=10)
entry2_x.grid(row=1, column=0)
entry2_y = tk.Entry(window, width=10)
entry2_y.grid(row=1, column=1)

entry3_x = tk.Entry(window, width=10)
entry3_x.grid(row=2, column=0)
entry3_y = tk.Entry(window, width=10)
entry3_y.grid(row=2, column=1)

# Create a button to generate Autolisp code
generate_button = tk.Button(window, text="Generate Autolisp Code", command=generate_autolisp_code)
generate_button.grid(row=3, columnspan=2)

# Create a text box to display the generated Autolisp code
output = tk.Text(window, width=40, height=10)
output.grid(row=4, columnspan=2)

window.mainloop()


これをコピペしてAutolispが動けばいいんだが・・・
いかんせん、???というエラーメッセージが出るばかりで、どうにもならん。しかも文字化けしてるし。

やはり苦ン白くッ木したAutoCAD2020ではダメなのか、それとも2023や2024じゃないとダメなのか?


Autolisp言語でテトリスを作れるかな?その2

2023-05-21 11:20:53 | Autocad

《第二案》

(defun TetrisGame ()
;; フィールドの幅と高さ
(setq FIELD_WIDTH 10
FIELD_HEIGHT 20)

;; フィールドの初期化
(setq field (make-array '(20 10) :initial-element nil))

;; ブロックの初期化
(defun TetrisBlock ()
(setq shapes '(
((0 0) (0 1) (1 0) (1 1)) ; 四角
((0 0) (0 1) (0 2) (0 3)) ; 直線
((0 0) (0 1) (0 2) (1 2)) ; L字
((0 0) (1 0) (1 1) (1 2)) ; 逆L字
((0 0) (0 1) (1 1) (1 2)) ; S字
((0 1) (0 2) (1 0) (1 1)) ; 逆S字
((0 0) (0 1) (0 2) (1 1)) ; T字
))
(setq random-block (nth (random (length shapes)) shapes))
(setq x (/ (- FIELD_WIDTH (car (last random-block))) 2))
(setq y (- FIELD_HEIGHT 1))
(list random-block x y))

;; ブロックの描画
(defun DrawBlock (block)
(setq cords (cdr block))
(foreach cord cords
(setq x (+ (car cord) (car (cdr block))))
(setq y (+ (cadr cord) (cadr (cdr block))))
(setq field[y][x] 'X)))

;; ブロックの操作
(defun RotateBlock (block)
(setq cords (cdr block))
(setq rotated-block (list (car cords) (list (- (cadr cords)) (car (car cords))))
x (car (cddr block))
y (cadr (cddr block)))

;; 回転後のブロックがフィールド内に収まるかチェック
(if (or (< x 0) (> (+ x (car (last (car rotated-block)))) (- FIELD_WIDTH 1))
(setq rotated-block block))
(if (or (< y 0) (> (+ y (cadr (last (car rotated-block)))) (- FIELD_HEIGHT 1)))
(setq rotated-block block))

rotated-block)

(defun MoveBlock (block direction)
(setq cords (cdr block))
(setq new-cords '())
(setq x (car (cddr block))
y (cadr (cddr block)))

;; 移動後のブロックがフィールド内に収まるかチェック
(if (or (< x 0) (> (+ x (car (last (car cords)))) (- FIELD_WIDTH 1)))
(setq new-cords cords))
(if (or (< y 0) (> (+ y (cadr (last (car cords)))) (- FIELD_HEIGHT 1)))
(setq new-cords cords))

(if (equal direction 'MOVE_LEFT)
(progn
(foreach cord cords
(setq new-cords (cons (list (- (car cord) 1) (cadr cord)) new-cords))))
(progn
(foreach cord cords
(setq new-cords (cons (list (+ (car cord) 1) (cadr cord)) new-cords)))))

(list (car block) (car (cdr block)) (car (cddr block)) (list new-cords x y)))

;; ブロックの衝突判定
(defun CheckCollision (block)
(setq cords (cdr block))
(foreach cord cords
(setq x (+ (car cord) (car (cdr block))))
(setq y (+ (cadr cord) (cadr (cdr block))))
(if (or (< x 0) (> x (- FIELD_WIDTH 1)) (< y 0) (> y (- FIELD_HEIGHT 1)) (not (null field[y][x])))
(return t)))
nil)

;; ブロックの固定
(defun FixBlock (block)
(setq cords (cdr block))
(foreach cord cords
(setq x (+ (car cord) (car (cdr block))))
(setq y (+ (cadr cord) (cadr (cdr block))))
(setq field[y][x] 'X)))

;; ラインの消去判定とスコアの更新
(defun CheckLines ()
(setq full-lines nil)
(repeat FIELD_HEIGHT
(setq line-full t)
(repeat FIELD_WIDTH
(if (null field[row][col])
(setq line-full nil)))
(if line-full
(setq full-lines (cons row full-lines))))

(if full-lines
(progn
(foreach line full-lines
(setq row (- line (length full-lines)))
(repeat FIELD_WIDTH
(setq field[row][col] nil))
(setq score (+ score 100)))
(setq full-lines nil)
(setq line-shift 0)
(setq row (- FIELD_HEIGHT 2))
(while (>= row 0)
(if (null (nth row field))
(setq line-shift (+ line-shift 1))
(setq field[(- row line-shift)] (nth row field)))
(setq row (- row 1)))
(repeat line-shift
(setq field[(- FIELD_HEIGHT (- line-shift (- it 1)))] (make-array FIELD_WIDTH :initial-element nil))))))

;; ゲームオーバー判定
(defun CheckGameOver (block)
(setq cords (cdr block))
(foreach cord cords
(setq x (car cord)
y (cadr cord))
(if (< y 0)
(return t)))
nil)

;; ゲームオーバー時の処理
(defun GameOver ()
(princ " Game Over!")
(princ " Score: ")
(princ score)
(exit))

;; ゲームループ
(setq score 0)
(setq current-block (TetrisBlock))
(setq game-over nil)
(setq move-direction nil)

(while (not game-over)
(command "_.zoom" "_extents")

;; キー入力の取得
(setq key (getvar 'Error))

;; ブロックの操作
(cond
((equal key 'MOVE_LEFT) (setq move-direction 'MOVE_LEFT))
((equal key 'MOVE_RIGHT) (setq move-direction 'MOVE_RIGHT))
((equal key 'ROTATE) (setq current-block (RotateBlock current-block))))

;; ブロックの移動
(setq moved-block (MoveBlock current-block move-direction))

;; 衝突判定
(setq collision (CheckCollision moved-block))
(if collision
(progn
(if (equal move-direction 'MOVE_LEFT)
(setq moved-block (MoveBlock current-block 'MOVE_RIGHT))
(setq moved-block (MoveBlock current-block 'MOVE_LEFT)))
(setq collision (CheckCollision moved-block))))

;; ブロックの固定またはゲームオーバー判定
(if (or collision (CheckGameOver moved-block))
(progn
(FixBlock current-block)
(CheckLines)
(if (CheckGameOver (TetrisBlock))
(setq game-over t))
(setq current-block (TetrisBlock))
(setq move-direction nil))
(setq current-block moved-block))

;; フィールドの描画
(princ " ")
(repeat FIELD_HEIGHT
(princ " ")
(repeat FIELD_WIDTH
(if (null field[row][col])
(princ " ")
(princ "X")))
(princ " "))

;; スコアの表示
(princ " Score: ")
(princ score)
(princ " ")

;; 一時停止
(if (equal key 'PAUSE)
(progn
(setq key nil)
(while (not (equal key 'PAUSE))
(setq key (getvar 'Error))))))

(GameOver))

これもダメorz

参ったなぁ


Autolisp言語でテトリスを作れるかな?

2023-05-21 10:57:30 | Autocad

前述のPythonソースコードをAutolisp言語に書き換えてAutocadのVisualLispで実行できるようにしてほしい。
ChatGPT 申し訳ありませんが、VisualLispに直接変換することはできません。VisualLispはAutoCADの独自のLisp方言であり、Pythonのコードをそのまま変換することは困難です。 ただし、Pythonのコードを参考にしてVisualLispで同様の機能を実装することは可能です。以下に、Pythonのコードを参考にしたAutolispの実装例を示します。 ;; 定数 (setq BLOCK_SIZE 25) ; ブロックの縦横サイズpx (setq FIELD_WIDTH 10) ; フィールドの幅 (setq FIELD_HEIGHT 20) ; フィールドの高さ (setq MOVE_LEFT 0) ; 左にブロックを移動することを示す定数 (setq MOVE_RIGHT 1) ; 右にブロックを移動することを示す定数 (setq MOVE_DOWN 2) ; 下にブロックを移動することを示す定数 ;; ブロックを構成する正方形のクラス (defun TetrisSquare (x y color) (list x y color)) ;; テトリス画面を描画する関数 (defun TetrisCanvas (field) ;; キャンバスの描画処理 (princ) ) ;; テトリスのブロックのクラス (defun TetrisBlock () ;; ブロックの形をランダムに決定 (setq block-type (random 4)) ;; ブロックの形に応じて正方形の座標と色を決定 (if (= block-type 1) (setq color "red" cords (list (list (/ FIELD_WIDTH 2) 0) (list (/ FIELD_WIDTH 2) 1) (list (/ FIELD_WIDTH 2) 2) (list (/ FIELD_WIDTH 2) 3))) (if (= block-type 2) (setq color "blue" cords (list (list (/ FIELD_WIDTH 2) 0) (list (/ FIELD_WIDTH 2) 1) (list (- (/ FIELD_WIDTH 2) 1) 0) (list (- (/ FIELD_WIDTH 2) 1) 1))) (if (= block-type 3) (setq color "green" cords (list (list (- (/ FIELD_WIDTH 2) 1) 0) (list (/ FIELD_WIDTH 2) 0) (list (/ FIELD_WIDTH 2) 1) (list (/ FIELD_WIDTH 2) 2))) (setq color "orange" cords (list (list (/ FIELD_WIDTH 2) 0) (list (- (/ FIELD_WIDTH 2) 1) 0) (list (- (/ FIELD_WIDTH 2) 1) 1) (list (- (/ FIELD_WIDTH 2) 1) 2)))))) ;; ブロックの情報を返す (list color cords)) ;; テトリスゲームを制御する関数 (defun TetrisGame () ;; フィールドの初期化 (setq field (make-array (list FIELD_HEIGHT FIELD_WIDTH) :initial-element nil)) ;; 新しいブロックの生成 (setq current-block (TetrisBlock)) ;; ゲームループ (while t ;; ブロックの描画 (setq cords (cdr current-block)) (foreach cord cords (setq x (car cord) y (cadr cord)) (setq field[y][x] (TetrisSquare x y (car current-block)))) ;; フィールドの描画 (TetrisCanvas field) ;; ブロックの操作 (command "_.zoom" "_extents") (setq move-direction (getvar 'Error)) ;; ブロックの移動 (if (= move-direction MOVE_LEFT) (progn (setq cords (cdr current-block)) (foreach cord cords (setq x (car cord) y (cadr cord)) (setq field[y][x] nil)) (setq cords (mapcar '(lambda (cord) (list (- (car cord) 1) (cadr cord))) cords)) (setq current-block (list (car current-block) cords)))) (if (= move-direction MOVE_RIGHT) (progn (setq cords (cdr current-block)) (foreach cord cords (setq x (car cord) y (cadr cord)) (setq field[y][x] nil)) (setq cords (mapcar '(lambda (cord) (list (+ (car cord) 1) (cadr cord))) cords)) (setq current-block (list (car current-block) cords)))) (if (= move-direction MOVE_DOWN) (progn (setq cords (cdr current-block)) (foreach cord cords (setq x (car cord) y (cadr cord)) (setq field[y][x] nil)) (setq cords (mapcar '(lambda (cord) (list (car cord) (+ (cadr cord) 1))) cords)) (setq current-block (list (car current-block) cords)))) ;; ブロックの衝突判定 (setq collided nil) (foreach cord cords (setq x (car cord) y (cadr cord)) (if (or (< x 0) (>= x FIELD_WIDTH) (< y 0) (>= y FIELD_HEIGHT) (not (null field[y][x]))) (setq collided t))) ;; ブロックがフィールドの底に到達した場合 (if (or (= move-direction MOVE_DOWN) collided) (progn ;; ブロックをフィールドに固定する (foreach cord cords (setq x (car cord) y (cadr cord)) (setq field[y][x] (TetrisSquare x y (car current-block)))) ;; ラインの消去判定 (setq full-lines nil) (repeat FIELD_HEIGHT (setq line-full t) (repeat FIELD_WIDTH (if (null field[row][col]) (setq line-full nil))) (if line-full (setq full-lines (cons row full-lines)))) ;; ラインの消去とスコアの更新 (if full-lines (progn (foreach line full-lines (setq row (- line (length full-lines))) (repeat FIELD_WIDTH (setq field[row][col] nil)) (setq score (+ score 100))) ; 1行ごとに100点加算 (setq full-lines nil) (setq line-shift 0) (setq row (- FIELD_HEIGHT 2)) (while (>= row 0) (if (null (nth row field)) (setq line-shift (+ line-shift 1)) (setq field[(- row line-shift)] (nth row field))) (setq row (- row 1))) (repeat line-shift (setq field[(- FIELD_HEIGHT (- line-shift (- it 1)))] (make-array FIELD_WIDTH :initial-element nil)))))) ;; ゲームオーバー判定 (setq cords (cdr current-block)) (foreach cord cords (setq x (car cord) y (cadr cord)) (if (< y 0) (setq game-over t))) ;; ゲームオーバーの処理 (if game-over (progn (princ " Game Over!") (princ " Score: ") (princ score) (exit))) ;; 新しいブロックの生成 (setq current-block (TetrisBlock)) ;; 少し待つ (command "_.zoom" "_extents") (setq key (getvar 'Error)) (if (member key '(MOVE_LEFT MOVE_RIGHT MOVE_DOWN)) (setq move-direction key)))) ;; 少し待つ (command "_.zoom" "_extents") (setq key (getvar 'Error)) (if (member key '(MOVE_LEFT MOVE_RIGHT MOVE_DOWN)) (setq move-direction key)))) この実装では、フィールドの初期化、ブロックの描画、ブロックの操作、ブロックの移動、ブロックの衝突判定、フィールドへのブロックの固定、ラインの消去判定とスコアの更新、ゲームオーバー判定などが含まれています。また、キー入力によるブロックの操作やゲームオーバー時の処理も実装されています。 ただし、この実装は一例であり、使用されている関数や変数の具体的な実装は参考のために示したものです。実際のプログラムでは、それぞれの関数や変数の定義や実装に合わせて適切に修正する必要があります。
全然ダメだわorz

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の機能を拡張するためのプログラミング言語であるため、構文や機能面で差異があります。