図描きの備忘録

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

Lisp実践編 - 27 - 選択セットのそれぞれをズームしてから選ぶ

Lisp実践編 - 27

こんにちは!

エカキオです!

タイトルには表し切れないです!笑


少しマニアックなLispかもしれませんが、フィルターやクイック選択などで、図面の広範囲に対して選択セットを作り、その中の各オブジェクトを1つ1つズームで確認してから、選択の可否を決定できるLispです。


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

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


コード

;選択オブジェクトをZOOM→個別選択
(defun c:SZ( / ss1 ss2 ss3 cnt num l1)
(princ "¥n選択オブジェクトをZOOM→個別選択")
        (setq ss1(ssget))
	(setq cnt 0)
        (setq num (sslength ss1))

	(setq ss2 (ssadd))
	(command "-view" "s" "sz_now")		;ズームを戻す場合(ビュー登録)
	(command "undo" "be")
	(while (< cnt num)
                (setq l1(ssname ss1 cnt))
                (command "zoom" "o" l1 "")
		
		(if (= cnt 0)
		(progn
			(initget 1 "a x  ")
			(setq ss3 (getkword (strcat "¥n選択セットに追加しますか? 追加(a)/終了(x)<次へ> " (rtos (1+ cnt) 2 0) "/" (rtos num 2 0)":")))
		)
		(progn
			(initget 1 "a x  ")
			(setq ss3 (getkword 
			(strcat "¥n追加(a)/終了(x)<次へ> " (rtos (1+ cnt) 2 0) "/" (rtos num 2 0) "  選択SET " (rtos (sslength ss2) 2 0)"個" " :")))
		)
		)
		(cond 
			((= ss3 "a")(ssadd l1 ss2)(setq cnt(1+ cnt)))
			((= ss3 "x")(setq cnt (+ cnt num)))
			(t (setq cnt(1+ cnt)))
		)
	)
	(command "undo" "e")

	(if (= (sslength ss2) 0)
	(command "-view" "r" "sz_now")		;何も選択セットにないとき、ズームを戻す場合
	(command "zoom" "o" ss2 "")		;選択セットがありの場合、選択セットにズーム
	)

	(command "-view" "d" "sz_now")		;ビューを削除を戻す場合

	(sssetfirst nil ss2)
        (princ)
)

参考記事

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

実践編コードの共通事項

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

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


Related Posts Plugin for WordPress, Blogger...