Sponsored links

【AutoLISP サンプル】画層名ラベル

Sponsored links
AutoLISP
Sponsored links
Jagaimo
Jagaimo

選択した図形の外部参照図面名|画層名のマルチテキストを作成するコマンドです。

外部参照がついていたり、何だかよくわからない線がたくさんある図面を扱うときに画層名ラベルをつけると便利です。

Sponsored links

コマンドの内容

選択した図形の画層名、(外部参照の場合は図面名|画層名)のをマルチテキストを作成します。

ユーザー入力は、getpointで得る2点です。
入力時はオブジェクトスナップが近接点のみになります。(コマンド実行後は元に戻ります。)

1点目は、マルチテキストの挿入点です。
2点目は、画層情報を得る箇所と、1点目-2点目の角度がマルチテキストの角度になります。

作成されるマルチテキストは、高さ2、画層 Jaga-Label、背景マスクサイズ1です。
画層 Jaga-Label が無い場合は 線種Continuous、色140、印刷しない で新規作成されます。
画層 Jaga-Label が非表示、フリーズしているときは、表示、フリーズ解除されます。

コマンド名はTestになっています。
好きなコマンド名に変更して使ってください。

AutoLISP サンプル

;/////////////////////////////////////////////
;|
Jagaimo Lisp 
Label On Line 20210708
|;
;/////////////////////////////////////////////


(defun C:Test (/ *error* JagaEnd LkLy OldDynMode OldCmdEcho OldOsmode 
               Pt1 Pt2 Tx LyNm LyInfo Ly62 Ly70 Lst
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--------------------------------------- 
    (setq OldCmdEcho (getvar "CMDECHO")) 
    (setvar "CMDECHO" 0)
    (setq OldDynMode (getvar "DYNMODE")) 
    (setvar "DYNMODE" 3)
    (setq OldOsmode (getvar "OSMODE"))
;-----------------------------------------
  (defun JagaEnd ()
   (if LkLy (command-s "._LAYER" "LO" LkLy "")) 
  ;-----------------------------------------	
    (setvar "DYNMODE" OldDynMode)
    (setvar "CMDECHO" OldCmdEcho)
    (setvar "OSMODE" OldOsmode)	
  ;-----------------------------------------	 
  (princ "\n=========== JagaimoLISP.com ===========")
  (princ));defun
  ;-----------------------------------------
    (defun *error* (msg)	
      (princ (strcat"\nLabel On Line ERR\n " msg))
      (JagaEnd)
    (princ));defun Err
 
  ;----------------------------------------------------
  (setq LyNm "Jaga-Label")

    (if (not (tblsearch "layer" LyNm ))
	(progn
	    (command-s "._LAYER" "_N" LyNm
				 "_L" "Continuous" LyNm 
				 "_C" 140 LyNm 
                                 "_P" "N" LyNm 
             "")
    (alert (strcat " \n 画層 < " LyNm " > 作成しました。\n")) 
  ));progn if	 
  
;----------------------------------------------------  
    (setvar "OSMODE" 512)
  
	(setq Pt1 (getpoint "Text's Insert Point: "))
	(setq Pt2 (getpoint "Point for Angle and Getting Layer Name: "))
	
	(setvar "OSMODE" 0)
  
	(setq Tx (cdr(assoc 8 (entget (car (nentselp Pt2))))))
  
  (if (= Tx "0")
  	(setq Tx (cdr(assoc 8 (entget (car (nth 3 (nentselp Pt2)))))))
  );if
  
 ;----------------------------------------------------
  (setq LyInfo (tblsearch "layer" LyNm)) ;
		  
   (if LyInfo 
   (progn
      (setq 
          Ly62 (cdr(assoc 62 LyInfo)) 
          Ly70 (cdr(assoc 70 LyInfo))
      ) ;setq 
;----------------------------------------------------  
     (if (> 0 Ly62) 
      (progn
            (command-s "._LAYER" "ON" LyNm "") 
            (alert (strcat " \n 画層 < " LyNm " > 非表示だったので表示にしました\n")) 
      ));if progn
;----------------------------------------------------      
      (if (= 1 (logand 1 Ly70)) 
         (progn
         (command-s "._LAYER" "T" LyNm "") 
            (alert (strcat " \n 画層 < " LyNm " > フリーズ解除しました")) 
      ));if progn
;---------------------------------------------------- 
    (if (= 4 (logand 4 Ly70)) 
        (progn
          (command-s "._LAYER" "U" LyNm "")
          (setq LkLy LyNm)
        ));if progn
   ));if progn
;----------------------------------------------------
    
  (setq Lst
  (list (cons 0 "MTEXT")         
        (cons 100 "AcDbEntity")
        (cons 100 "AcDbMText")
        (cons 10 Pt1)
        (cons 1 Tx)
	(cons 8  "Jaga-Label")
	(cons 40 2)
	(cons 71 5)
	(cons 72 5)
	(cons 50  (angle Pt1 Pt2))
        (cons 90 3)
        (cons 45 1)       
    );list
   );setq Lst

   (entmake Lst)
  
(JagaEnd)
(princ));defun

参考記事

ユーザー入力でクリックされた座標点の値を得る関数です。

非表示画層を表示する関数です。
関数 strcat で文字をつなげることについても書いています。

画層がフリーズかどうかを調べて、もしフリーズなら解凍する方法についてです。

画層がロックされているかどうかを調べて、ロックされていたら解除する方法についてです。
ビットコードが含まれているかどうかを調べる logand について書いてあります。
画層だけでなく、オブジェクトスナップなど、ビットコードで設定されているものを変更したいとき、この関数はとても便利です。

Comments