画層のプロパティとして、線色、線種、線幅、印刷スタイルなどはありますが、線種尺度はありません。線種尺度=ByLayerという設定の代わりになりそうなものを考えてみました。
Visual LISP で作成したので、AutoCAD 系の他のCAD でも使えると思います。
;;; ----------------------------------------------------------
;;; 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)
))
使い方は、図面を開いたときに自動的に読み込まれるLISPファイルとしてどこかに登録してください。AutoCADなら、acad2025doc.lsp ファイルに、(load "LayLScale.lsp") と書くとかですね。
0 件のコメント:
コメントを投稿