画層毎に線種尺度を設定することが可能です。
ソースコード
;;; ----------------------------------------------------------
;;; LayLScale.lsp
;;; 画層毎に線種尺度を設定する
;;; (C) Copyrights 2024 Graebert Japan LLC.
;;; ----------------------------------------------------------
;; 画層名と線種尺度のペアを設定(いくらでも追加可能)
(setq #LayLScale '(
("MODEL" . 1.0)
("MODEL2" . 2.0)
("MODEL4" . 4.0)
("MODEL8" . 8.0)
))
;; 線種尺度を書き換えるコールバック関数
(defun layLscaleReactor( cb data / obj item )
; 図形名をVLAオブジェクトに変換
(if (setq obj (vlax-ename->vla-object (last data)))
; VLAオブジェクトは画層と線種尺度が使用できるか
(if (and (vlax-property-available-p obj 'Layer)
(vlax-property-available-p obj 'LinetypeScale T))
; 図形の画層から線種尺度のペアを取得できるか
(if (setq item (assoc (vla-get-Layer obj) #LayLScale))
; 線種尺度がペアの設定値と一致していないとき
(if (/= (cdr item) (vla-get-LinetypeScale obj))
; 線種尺度を修正する
(vla-put-LinetypeScale obj (cdr item))
)
)
)
)
; VLAオブジェクトを解放する
(setq obj nil)
)
;; Visual LISP データベース リアクターを設定
(vlr-acdb-reactor nil '(
(:vlr-objectappended . layLscaleReactor)
(:vlr-objectmodified . layLscaleReactor)
))
使い方
- 上記のコードを LayLScale.lsp というファイル名で保存します。
- LOADAPPLICATION コマンドで LayLScale.lsp ファイルをロードします。
- アクティブな画層を MODEL2, MODEL4 などに切り替えて図形を描くと、指定された線種尺度に変わります。
- 図形を選んで、プロパティパレットで MODEL2, MODEL4 画層に変更すると、指定された線種尺度に変わります。
変数 #LayLScale の値を変更すれば、任意の図面での利用が可能です。