図描きの備忘録

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

Lisp実践編 - 15 - 接頭語、接尾語を一括で付ける

Lisp実践編 - 15

こんにちは!

エカキオです!

文字を編集したい時に、一括して接頭語や接尾語を付加したいことってありませんか?

例えば通り芯を振りたい時とか、語尾に同じ文言を付けたい時とか。


今回紹介するLispでは、選択した文字列の先頭もしくは末尾に同じ文字を付加出来ます。

変数とstrcat関数を用いることで、様々なバリエーションに応用可能です。

ぜひともご活躍いただければと思います。


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


コード

;文字に接頭語or接尾語をつける
(defun c:ht ( / ja ja2 eset cnt h1 num tmpl ed t1 t2 )
(princ "¥n文字に接頭語or接尾語をつける")

(defun myerror (msg)
	(command "undo" "e");エラー処理
	(redraw tmpl 4)
	;(command "-view" "r" "ht_zoom")
	;(command "-view" "d" "ht_zoom")
	(setq *error* temperror)                ; エラー処理を元に戻す
)  
(setq temperror *error*)                ; 標準のエラー処理を保存  
(setq *error* myerror)                  ; 独自のエラー処理 myerror を設定 

	(command "-view" "s" "ht_zoom")

	(setq eset(ssget (list (cons 0 "TEXT"))))
	(setq cnt 0)
	(initget 1 "h e x")
	(setq ja (getkword"¥n接頭語(H) / 接尾語(E) / 個別(X):"))
	;(command "-view" "d" "ht_zoom")
	(cond
		((= ja "h")(initget 1)(setq h1 (getstring"¥n接頭語を入力:")))
		((= ja "e")(initget 1)(setq h1 (getstring"¥n接尾語を入力:")))
		(t)
	)
	(command "undo" "be")

	(setq num (sslength eset))
	(while (< cnt num)
		(setq tmpl (ssname eset cnt))
		(setq ed (entget tmpl))
		(setq t1 (cdr(assoc 1 ed)))
		(cond ((= ja "h")(setq t2 (strcat h1 t1)))
			((= ja "e")(setq t2 (strcat t1 h1)))
			((= ja "x")
					;(command "zoom" "o" tmpl "")
					(redraw tmpl 3) 
					(initget 1 "h e n  ")
					(setq ja2 (getkword"¥n接頭語(H) / 接尾語(E) / 次へ(N):<N>"))
					(if (or (= ja2 n) (= ja2 ""))
							(progn)
							(progn
							(initget 1)(setq h1 (getstring"¥n文字を入力:"))
							(cond
								((= ja2 "h")(setq t2 (strcat h1 t1)))
								((= ja2 "e")(setq t2 (strcat t1 h1)))
							)
							)
					)
					(redraw tmpl 4)
			)
		)
		(if (or (= ja2 n) (= ja2 ""))
		(progn)
		(progn
			(setq ed (subst (cons 1 t2) (assoc 1 ed) ed))
			(entmod ed)
		))
		(setq cnt (1+ cnt))
	)

	(command "undo" "e")
	(setq *error* temperror)                ; エラー処理を元に戻す(最後に張る)
	(princ)
)

参考記事

AutoCAD Lisp 入門 - 2 - オブジェクトの情報を抽出 - 図描きの備忘録

AutoCAD Lisp 入門 - 7 - 繰り返し処理 - 図描きの備忘録

AutoCAD Lisp 入門 - 8 - 文字連結 - 図描きの備忘録

AutoCAD Lisp 入門 - 10 - フィルターオブジェクト選択 - 図描きの備忘録

Lisp入門 - 12 - システム変数とエラー処理 - 図描きの備忘録

実践編コードの共通事項

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

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

Related Posts Plugin for WordPress, Blogger...