Sponsored links

【AutoLISP サンプル】2点を選択してブロック/テキストの回転角度を変更

Sponsored links
AutoLISP
Sponsored links
Jagaimo
Jagaimo

2点を選択して回転角度を決めて、選択したテキストかブロックの回転角度を変更します。

Sponsored links

コマンドの内容

概要

2つの端点で定義される線分の角度を回転角度とし、選択したブロック、テキスト、マルチテキストの回転角度を変更します。

ユーザー入力

角度を定義する 2点

クリックして2点を入力します。

図形選択

2点を選択した後、図形選択します。

図形は1つづつ、ブロック、テキスト、マルチテキストを選ぶようにしています。
(外部参照もブロックと同じ属性なので選択できます。)

それ以外を選択すると、アラートが出て、図形選択に戻ります。

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

角度を定義する2点は、線分上にあることを想定して、オブジェクトスナップが近接点のみになるようにしています。
好みによって変更してください。

エラー処理を定義しているので、コマンド終了時には元の設定に戻ります。

AutoLISPプログラム

(defun c:Pt-Ro ( / *error* Pt1 Pt2 Ang Ent Ent0 OS)
  ;-----------------------------------------   
    (defun *error* (msg)
      (if OS (setvar "OSMODE" OS)) 
      (princ msg)
    (princ))
;-----------------------------------------
    (setq OS (getvar "OSMODE")) 
;-----------------------------------------
  
     (setvar "OSMODE" 512) 
  
      (setq 
        Pt1 (getpoint "点1を選択:") 
        Pt2 (getpoint "点2 を選択:") 
        Ang (angle Pt1 Pt2) 
      ) ; setq
  
  (while T
    
    	(setq flg "a" Obj nil)
     (while flg	
		   (while (null Obj)
			    (setq Obj (car(entsel "\nブロック /(マルチ)テキストを選択:\n")))
		   );while	(null Obj)
   
		(setq Ent (entget Obj))
			(setq Ent0 (cdr(assoc 0 Ent)))		
				(if (or(= Ent0 "INSERT" )(= Ent0 "MTEXT" )(= Ent0 "TEXT" ))
				(progn 
					(entmod (subst (cons 50 Ang) (assoc 50 Ent) Ent))
					(setq flg nil)
				);progn else
					(progn (alert "\nこのコマンドはブロックか(マルチ)テキストのみ対応です\n")
					(setq flg "a" OBJ nil)
				));if progn
	   );while flg
    
  );while T 

(progn))

参考記事

2点から角度を得る関数について

角度の変更(DXF図形情報の書き換え)について

エラー処理について

オブジェクトスナップの変更について

特定の図形を選択する方法について