2024年5月25日土曜日

Visual LISP ~ 図形を画層に振り分けたら線種尺度を設定する

画層のプロパティとして、線色、線種、線幅、印刷スタイルなどはありますが、線種尺度はありません。線種尺度=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 件のコメント:

コメントを投稿

ARESのトリニティ(三位一体)

 ARESのトリニティ戦略、どこがトリニティなんでしょう。 まずはデスクトップCADが、WindowsにもMacにもLinux版もあるというトリニティ。 デスクトップCADと、モバイルCAD(ARES Touch)と、ブラウザとサーバーCAD(ARES Kudo)のトリニティ。 ...