図描きの備忘録

日々の業務の時間短縮。残業しないで帰る事を目指し、悪戦苦闘中。AutoCAD、Lisp、効率化、自動化、合理的、プログラミング、資産運用勉強中

Lisp実践編 - 26 - 単純作業を簡単に繰り返す

Lisp実践編 - 26

こんにちは!

エカキオです!

単純作業を繰り返し入力する時ほど、面倒なことはありませんね。
更にそれが同じパターンなら一括でやる方法もあると思いますが、任意で選んだものに対して、同じ動作をさせる時は非常に面倒です。


今回ご紹介するLispでは、単純作業で同じ動作を作用させる場合において効果を発揮するLispになります。

例として記載しているものは、特定のオブジェクトをY方向にコピーするというもので、1度入力した数値は次回記憶されていて再利用可能というものです。

後半のコマンドの内容を書き換えれば応用可能と思います。
rotateにするなり、scaleにするなり、その他にするなり。

各人でお好きなようにカスタマイズしていただければと思います!


ぜひともご利用ください!

そのままコピーして、好きなコマンド・好きなファイル名にしていただいても構いません。
保存と利用方法はこちら。
AutoCAD Lisp 入門 - 1 - 最強の時短ツール「Lisp」とは - 図描きの備忘録


コード

;オブジェクトをY方向にコピー
(defun c:TY( / ss1 cnt num y1 l1 et p1 p2)
(princ "¥nオブジェクトをY方向にコピー")
        (setq ss1(ssget))
	(setq cnt 0)
        (setq num (sslength ss1))

	(if (null TY_def)
	(setq TY_def 3.5)			;デフォルトは3.5
	)

	(initget 1 " ")
	(setq y1 (getreal (strcat "¥n下にいくつ移動しますか?(負の数値は上へ) <" (rtos TY_def 2 2) ">:")))

	(if (= y1 "")
	(setq y1 TY_def)
	)

	(setq TY_def y1)			;デフォルトを変更
	
	(command "undo" "be")
	(while (< cnt num)
                  (setq l1(ssname ss1 cnt))
                  (setq et(entget l1))
                  (setq p1(cdr(assoc 10 et)))
                  (setq p2(list (car p1)(- (cadr p1) y1)(caddr p1)))
                  (command "copy" l1 "" "non" p1 "non" p2)
                  (setq cnt(1+ cnt))
           )
	(command "undo" "e")
           (princ)
)

参考記事

Lisp 入門編 カテゴリーの記事一覧 - 図描きの備忘録

実践編コードの共通事項

最上段には、コメントを入れています。
こちらのLispは何を目的にしているかを一目で判断するためです。
また、「(defun c:※※ ()」の直下には、
(princ "¥n〜")を入れることで、コマンド実行の際も、コマンドの目的がわかりやすくなっています。(たくさん作ってると後々忘れてしまいます。)

※こちらのLispは自己責任でお使い下さい。万が一、AutoCADがフリーズ、強制終了
した場合など不慮の事故が起きた場合も当ブログでは責任を負いかねます。
まずは何もないデータなどで、使用感を確かめてから使用することをお勧めします。


Related Posts Plugin for WordPress, Blogger...