Sponsored links

【AutoLISP サンプル】雲マークと△マーク

Sponsored links
AutoLISP
Sponsored links
Sponsored links

コマンドの内容

概要

3つのコマンドのセットです。

雲マークコマンド

円、ポリラインなどの図形を雲マークにし、設定した画層にします。

数値が設定されていないときは、ユーザー設定するためのダイアログボックスがまず開きます。

三角印ブロックコマンド

ブロック”Revision_Triangle” を挿入します。
ブロック内の属性に、設定した改訂番号が入力され、設定した画層にします。

数値が設定されていないときは、ユーザー設定するためのダイアログボックスがまず開きます。

属性が入ったブロック ”Revision_Triangle” が必要です。

ブロック名”Revision_Triangle XYZ尺度を均一に設定してください。
ブロック内の属性は、タグ名: TAG プリセット: なし に設定してください。

上記の設定のブロック Revision_Triangleが図面ファイル内にあるか、検索パス内にあるフォルダに保存してあることを前提に、AutoLISPが組まれています。

ブロックを別ファイルにして保存する方法はコチラの記事にあります。

ユーザー設定コマンド

ユーザー設定するダイアログボックスを出します。

Revision Number(改訂番号)

画層設定がJaga_Rev-#になっているときに#に入る番号、もしくは△ブロックに入る数字(記号)です。

初期値はXです。

Cloud Arc Size (雲マークの円弧の長さ)

雲マークコマンドにて作成する雲マークの円弧のサイズです。

初期値は5です。

Layer (画層設定)

Jaga_Rev-# #に改訂番号が入ったものが画層名になります。
画層が無ければ色3 (緑) 線種continuous で作成されます。

Jaga-No_Plot が画層名になります。
画層が無ければ、色171 線種continuous 印刷しない で作成されます。

Do not Change 画層変更無し。
雲マークは元の図形の画層をキープ。△印ブロックは現在の画層に挿入されます。

初期値は Jaga_Rev-# です。

全ての値は一度図面ファイルを閉じるとリセットされます。
グローバル変数をレジストリに読み書きするコードを加えると設定が保存されるコマンドになります。(図面を閉じても別ファイルでも一度設定した数値が使えるようになります。)

画層作成 表示 フリーズオフ

設定したブロックや雲マークの画層が無い、非表示、フリーズになっていた場合、作成、表示、解凍します。

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

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

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

コマンド名

コマンド名は、

  • 雲マーク RC
  • ブロック RB
  • 設定ダイアログ REV-DB

好みに合わせて変えてください。

AutoLISP プログラム

コマンド部分

(defun c:Rev-DB ()
   (RevCldBlk_DB)
 (princ))

;=============================================================
(defun c:RC ( / Nm)
  (Jaga00START)

  (setq Nm (RevCldBlk_LyCk))
  
	(command-s "._REVCLOUD" "_A" g00CldNum g00CldNum "_O" pause "_N")	
    
  (if (/= g00LySel "3")
        (command-s "._CHANGE"  (entlast) "" "_P" "_LA" Nm "")
  );if
  (Jaga00END)
(princ));defun

;=============================================================

(defun c:RB (/ Nm VlObj)
  (vl-load-com)
   (Jaga00START)
  
  (setq Nm (RevCldBlk_LyCk))
  (command-s "._-INSERT" "Revision_Triangle" pause "1" "1" "0")

  (setq Obj (entlast))
  (setq VlObj (vlax-ename->vla-object Obj))
  
	(vl-some
       '(lambda (att)
            (if (= "TAG" (strcase (vla-get-tagstring att)))
                (progn (vla-put-textstring att g00RevNum) g00RevNum)
            );if
        );lambda
        (vlax-invoke VlObj 'getattributes)
    );vlsome

  
    (if (/= g00LySel "3")
        (command-s "._CHANGE"  Obj "" "_P" "_LA" Nm "")
  );if
  
(Jaga00END)
(princ))

;=====================================================================================
;=====================================================================================
  
(defun RevCldBlk_LyCk ( / Ly)
    (if (or (null g00LySel) (null g00RevNum) (null g00CldNum))
      (RevCldBlk_DB)
    );if

	(cond 
		((= g00LySel "1")
        (setq Ly (strcat "Jaga_Rev-" g00RevNum ))
        (Jaga01LyCk Ly "continuous" 3 "_P")
    )
    ((= g00LySel "2")
        (setq Ly "Jaga-No_Plot")
        (Jaga01LyCk Ly "continuous" 171 "_N")
     )
		((= g00LySel "3") (setq Ly (getvar "CLAYER")))
	);cond
Ly
);defun
;=====================================================================================
(defun Jaga01LyCk (LyNm Lt Col Pl / LyInfo Ly62 Ly70)
         
(if (null (tblsearch "layer" LyNm )) 
    (progn
      (command-s ".-layer" 
                  "_N" LyNm 
		              "_L" Lt LyNm 
		              "_C" Col LyNm 
                  "_P" Pl LyNm 
      "") ;
       
  (alert (strcat " \n 画層 < " LyNm " > 作成しました\n")) 
  
  )) ;if progn
;----------------------------------------------------
;----------------------------------------------------
  (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 progn
;----------------------------------------------------
);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

ダイアログボックス部分

ダイアログボックスを呼び出す部分は別に関数にしました。

AutoLISP

(defun RevCldBlk_DB ( / dcl_id Act )

   (setq dcl_id (load_dialog "JagaDCL.dcl"))
   
      (if (not (new_dialog "RevCldBlk" dcl_id))
	      (progn
            (princ "***ダイアログボックスが見つかりません***")
            (exit)
      ));progn if 
          ;-----------------------------------------------------------
            (if (null g00LySel) (setq g00LySel "1"))
            (if (null g00CldNum) (setq g00CldNum "5"))
            (if (null g00RevNum) (setq g00RevNum "X"))
          ;-----------------------------------------------------------
  	    (set_tile "LySel" g00LySel)
            (set_tile "CldNum" g00CldNum)
            (set_tile "RevNum" g00RevNum)
          ;-----------------------------------------------------------
            (action_tile "accept" "(RevCldBlk_SetVar)(done_dialog 1)")
            (action_tile "cancel" "(done_dialog 0)")
          ;-----------------------------------------------------------
            (setq Act (start_dialog))
            (unload_dialog dcl_id)
          ;-----------------------------------------------------------
            (cond 
              ((= Act 0) (princ "ユーザーキャンセル"))
              ((= Act 1) (princ))
            );cond
          ;----------------------------------------------------------				
(princ))

;===========================================
(defun RevCldBlk_SetVar ()
    (setq g00LySel (get_tile "LySel"))
    (setq g00CldNum (get_tile "CldNum"))
    (setq g00RevNum (get_tile "RevNum"))
  (princ "setvar")
)

DCL (ダイアログボックス コントロール言語)

JagaDCL.dcl というファイル名でサポートファイルの検索パス内にあるフォルダに保存してあることを前提で上のAutoLISPにプログラムされています。

RevCldBlk :dialog
      {label = "Revision Cloud & Block"; 
//-------------------------------------------------------- 
          spacer_1;

          :edit_box{ key = "RevNum"; label = "Revision Number"; edit_width = 3;}

          spacer_1;

          :edit_box{ key = "CldNum"; label = "Cloud Arc Size"; edit_width = 3; }

          spacer_1;

          :radio_column{ key="LySel"; label = "Layer";
            :radio_button{ label="Jaga_Rev-#"; key="1";}
            :radio_button{ label="Jaga-No_Plot"; key="2";}
            :radio_button{ label="Do not Change"; key="3";}
		      } // RADIO	COLUMN END
        
           spacer_1;
 //--------------------------------------------------------   
        ok_cancel;
      }

参考記事

検索パス内にあるフォルダに保存する用にブロックを書き出す方法

ブロック挿入コマンド

検索パス内にあるフォルダに保存

ダイアログボックス作成

画層が無かったりフリーズ/非表示していた時の対策

図形の画層変更

エラー処理