図描きの備忘録

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

Lisp実践編 - 25 - ポリラインを利用した選択範囲

Lisp実践編 - 25

こんにちは!

エカキオです!

オブジェクト選択範囲をする時には色々な選択方法があります。

  • オブジェクト毎にクリックしていく
  • 矩形選択
  • ポリゴン状に変形した選択


今回ご紹介するLispでは、このポリゴン状の選択範囲のポリゴンをポリラインの範囲で指定できるというものになります。

良く使うポリゴンの範囲などあれば使ってみてください。

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

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


コード

;ポリラインで選択範囲を作成
(defun c:pls ( / ss1 ja cnt num en l1 l2 ss3 l3 aa2 cnt2 num2 ap) 
	(princ "¥nポリラインで選択範囲を作成")
	(setq ss1 (ssget (list (cons 0 "LWPOLYLINE"))))
	(initget 1 "Cp Wp  ")
	(setq ja (getkword "¥n窓選択(W)/交差選択(C)<W>:"))
	(setq cnt 0)
	(setq num (sslength ss1))
	(setq ss3 (ssadd))	
	(while (< cnt num)
		(setq en (ssname ss1 cnt))
		(setq l1 (entget en))
		(setq l2 (assoc 10 l1))
		(setq l3 (member l2 l1))
		(while (/= (member l2 l1) nil)
			(setq l3 (member l2 l1))
			(setq l1 (cdr l3) pt (cdr l2))
			(setq ap (append ap (list pt)))	
			(setq l2 (assoc 10 l1))
		)
		(setq ss2 (ssget ja ap))
		
		(setq cnt2 0)
		(setq num2 (sslength ss2))
		(while (< cnt2 num2)
			(setq en2 (ssname ss2 cnt2))
			(setq ss3 (ssadd en2 ss3))
			(setq cnt2 (1+ cnt2))
		)
		(setq ap nil)
		(setq cnt(1+ cnt))
	)
	(command "pselect" ss3 "")
	(princ)
)

参考記事

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

実践編コードの共通事項

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

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

Related Posts Plugin for WordPress, Blogger...