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じゃないとダメなのか?