Sponsored links

【AutoLISP サンプル】ブロック名変更

Sponsored links
AutoLISP
Sponsored links
Sponsored links

コマンドの内容

概要

図形を選択し、新しいブロック名を入力すると、選択したブロックのブロック名を変更するコマンドです。

図形選択

図形選択は1つだけです。コマンド実行前でも後でも図形を選択できます。

ブロックのみ選択できるようになっています。

ブロック以外を選択した場合、先に進まず図形選択のプロンプトが出続けます。

システム変数変更(コマンド実行中だけ)

コマンド実行時は、システム変数CMDECHOを0にして、必要ないプロンプトとエコーバックがコマンドラインに表示されないようになっています。
システム変数DYNMODEは3になり、ダイナミック入力モードしてプロンプトが目立つようにしています。

エラー処理も入れているので、エラー中断、ESCキーでの中断してもシステム変数は元の設定に戻ります。

ブロック名チェック

すでに図面内にある名前を入力すると、アラートメッセージが出て、新しいブロック名入力を促すところにに戻ります。

コマンド名

コマンド名は、BlkReNmです。好みに合わせて変えてください。

AutoLISPプログラム

(defun c:BlkReNm ( / Obj CuNm NwNm flg)
  (vl-load-com)
  (Jaga00START)
  
	(setq Obj (Jaga00ObjIns))
  (setq CuNm (vla-get-Effectivename (vlax-ename->vla-object Obj)))
  
  (while (null flg)
    (setq NwNm (getstring T (strcat "新しいブロック名を入力 <" CuNm ">:")))
    (if (tblobjname "block" NwNm)
        (alert "\nそのブロック名はすでに図面内で使われています。\n")
        (setq flg 1)
    );if
  );while flg
   
  (command-s "._RENAME" "_B" CuNm NwNm )
  
(Jaga00END)
(princ))


;====================================================
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;JagaimoLisp関数  var.20200528
;----------------------------------------------
;ブロック選択/エラー処理
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;====================================================

;=====================================================================================
(defun Jaga00ObjIns( / Objs Obj)
	(setq Objs (ssget "_I" '((0 . "INSERT"))))
		(if Objs 
			(setq Obj (ssname Objs 0))
			(progn
				(setq Obj nil flg "No")
				(while flg
					(while (null Obj)
						(setq Obj (car (entsel "\nブロックを選択: ")))
					);while null Obj
					(if (= "INSERT" (cdr(assoc 0 (entget Obj))))
						(setq flg nil)
						(setq flg "No" Obj nil)
					);if
				);while flg
			);progn	
		);if
Obj		
);defun
;=====================================================================================
;=====================================================================================
(defun Jaga00START ()
  (setq DefErr *error* *error* Jaga00ERR) 
;--------------------------------------- 
  (setq DefCmdEcho (getvar "CMDECHO")) 
    (setvar "CMDECHO" 0)
  (setq DefDynMode (getvar "DYNMODE")) 
    (setvar "DYNMODE" 3)
;-----------------------------------------
(princ "\nJaga00START\n") 
(princ));defun
;=====================================================================================
(defun Jaga00END ()
  (setvar "DYNMODE" DefDynMode)
  (setvar "CMDECHO" DefCmdEcho)
 ;-----------------------------------------	 
   (setq *error* DefErr) 
(princ "\nJaga00END\n")
(princ "\n=========== JagaimoLISP.com ===========")
(princ));defun
;=====================================================================================
(defun Jaga00ERR (msg)	
   (Jaga00END)
(princ (strcat"\nJaga00ERR\n " msg))
(princ));defun
;=====================================================================================

参考記事

同じコマンドですが、ブロック名入力部分をダイアログボックスにしたバージョンです。

ブロック名を得るコードについて。VLISP関数を使っています。

文字列のユーザー入力について。

(ssget “_I”) で、暗黙選択(コマンド実行前に選択していた図形を暗黙の了解で編集する図形として選択)について。

必要無いエコーバックとプロンプトを消す設定と、ダイナミック入力にする設定にコマンド実行中は替えています。それらのシステム変数について。

引数付きの自作関数について。

エラー処理についてはコチラの記事リストを。