スピログラフ
昔、歯車がついた定規がありました。
その定規で、下の紙が破れるまでグルグル回した記憶があります。
これをAutolispで作成。意外と簡単な命令なんですね。
ノーマルな命令しか使っていないので、自由に改造、
例えば色を付けるとか、挑戦してみて下さい。
------------この下から---------
(defun c:sg (/ CH KA P0 P2 P3 P4 P5 PP R1 R2 R3 R4 R5 ST TB)
;spirograph スピログラフ by nsmaster 2016/08/17
(setq p0 (getpoint "\n[スピログラフ] 作図点:"))
(setq r1 (getreal "\n[スピログラフ] 大半径:"))
(setq r2 (getreal "\n[スピログラフ] 小半径:"))
(setq r3 (getreal "\n[スピログラフ] 変芯量:"))
;////諸計算////
(setq pp 1.0 st (* pi (/ pp 180.0)));作図精度(deg,rad)
(setq r4 (- r1 r2));大半径-小半径の差
(setq tb (/ r1 r2));大半径/小半径の比率
;////情報表示/////
(command ".undo" "be")
(entmake (list '(0 . "POINT")(append '(10) p0)))
(setq r5 (+ (- r1 r2) r3));最大半径の計算
(setq p5 (polar p0 (* pi 1.25) (* r5 (sqrt 2.0))));左下の角点
(entmake (list '(0 . "TEXT")(append '(10) p5)(append '(11) p5)
(cons 1 (strcat "R1:" (rtos r1 2 3) " R2:" (rtos r2 2 3) " R3:" (rtos r3 2 3)))
(cons 71 0)(cons 72 0)(cons 73 1)(cons 41 0.8)(cons 40 (/ r1 50.0))
);入力値作図
)
;////作図計算////
(setq ka 0.0);作図開始角度(rad)
(setq p2 (polar (polar p0 ka r4) (* ka tb) r3) p4 p2);最初の位置計算
(setq ch 0)
(while (= ch 0)
(setq ka (+ ka st));角度増値
(setq p3 (polar (polar p0 ka r4) (* ka tb) r3));座標計算
(entmake (list '(0 . "LINE") (append '(10) p2)(append '(11) p3)));作図
(if (< (distance p4 p3) 0.0001)(setq ch 1)(setq p2 p3));最初の位置になったか?
)
(command ".undo" "e")
(princ)
)
------------この上までをコピーして、sg.lsp の名前で保存
ツール→Autolisp→アプリケーションのロード→
先ほどの sg.lsp を読み込み
コマンドラインで sg リターン
線の容量は半端なく増えますが、仕事の息抜きにどうぞ。