LISP でオブジェクトの 色 や 線種 や 線の太さ を変更したいんだけど…
どうすればいいのかなぁ?
こんにちは、メモだよ!!管理人です。
今回は、そんなあなたに、AutoCAD で LISP を使用して、オブジェクトの色、線種、線の太さを変更する方法を紹介します。
オブジェクトの色を変更する方法
LISP でオブジェクトの色を変更するには、vla-put-truecolor 関数を使用します。
サンプル コードは以下になります。
(defun c:ChangeColor ()
; AutoCAD のオブジェクトを取得
(setq acadObject (vlax-get-acad-object))
; アクティブなドキュメントを取得
(setq activeDocument (vla-get-activedocument acadObject))
; ドキュメントの Utilyty オブジェクトを取得
(setq utility (vla-get-utility activeDocument))
; 選択した図形の VLA オブジェクトを取得
(vla-getentity utility 'vlaObject 'pickedPoint "\nオブジェクトをを選択:")
; 変更後の色のオブジェクトを作成(青(カラー インデックス 5))
(setq newcolor (vlax-create-object (strcat "AutoCAD.AcCmColor." (substr (getvar "ACADVER") 1 2))))
(vla-put-colorindex newcolor 5)
; オブジェクトの色を変更
(vla-put-truecolor vlaObject newcolor)
)
この LISP をロードして、ChangeColor コマンドを実行してみてください。
「オブジェクトを選択」と聞かれるので、適当なオブジェクトを選択してみてください。
やったー!!
選択したオブジェクトの色を、青色に変更できた!!
色の指定は、AcCmColor オブジェクトを作成して、それに色番号を割り当てています。
; 変更後の色のオブジェクトを作成(青(カラー インデックス 5))
(setq newcolor (vlax-create-object (strcat "AutoCAD.AcCmColor." (substr (getvar "ACADVER") 1 2))))
(vla-put-colorindex newcolor 5)
vlax-create-object 関数でオブジェクトを取得するには、<Vendor>.<Component>.<Version> を指定します。
AutoCAD の AcCmColor オブジェクトなので、「AutoCAD.AcCmColor.」まではいいですよね。
最後の Version は、システム変数 ACADVER の最初の 2 文字から取ってきています。
例えば、AutoCAD 2022.1.1 の ACADVER の値は、"24.1s (LMS Tech)" なので、最初の 2 文字の 24 がバージョンになっているということです。
そして、vla-put-colorindex 関数で、色番号 5(青色)を割り当てています。
オブジェクトの線種を変更する方法
LISP でオブジェクトの線種を変更するには、vla-put-linetype 関数を使用します。
サンプル コードは以下になります。
(defun c:ChangeLinetype ()
; AutoCAD のオブジェクトを取得
(setq acadObject (vlax-get-acad-object))
; アクティブなドキュメントを取得
(setq activeDocument (vla-get-activedocument acadObject))
; ドキュメントの Utilyty オブジェクトを取得
(setq utility (vla-get-utility activeDocument))
; 選択した図形の VLA オブジェクトを取得
(vla-getentity utility 'vlaObject 'pickedPoint "\nオブジェクトをを選択:")
: 変更後の線種の設定
(setq newlinetype "DASHED")
; 図面に変更したい線種が存在するか確認し、ないときはロードする
(setq haslinetype nil)
(setq linetypes (vla-get-linetypes activeDocument))
(vlax-for linetype linetypes
(setq name (vla-get-name linetype))
(if (= name newlinetype)
(setq haslinetype T)
)
)
(if (not haslinetype)
(command "._linetype" "_l" newlinetype "" "")
)
; 線種を変更
(vla-put-linetype vlaObject newlinetype)
)
この LISP をロードして、ChangeLinetype コマンドを実行してみてください。
「オブジェクトを選択」と聞かれるので、適当なオブジェクトを選択してみてください。
やったー!!
選択したオブジェクトの線種を、DASHED に変更できた!!
図面に存在しない線種をオブジェクトに割り当てようとすると、エラーになってしまいます。
そのため、事前に線種が存在するか確認して、存在しないときはロードしておく必要があります。
; 図面に変更したい線種が存在するか確認し、ないときはロードする
(setq haslinetype nil)
(setq linetypes (vla-get-linetypes activeDocument))
(vlax-for linetype linetypes
(setq name (vla-get-name linetype))
(if (= name newlinetype)
(setq haslinetype T)
)
)
(if (not haslinetype)
(command "._linetype" "_l" newlinetype "" "")
)
vla-get-linetypes 関数で、図面の中の線種のテーブルを取得できます。
vlax-for 関数で、その中の線種の名前を取得して、変更したい線種があるかどうかを確認しています。
そして、もしその線種がなければ、command 関数で LINETYPE コマンドを実行して、線種をロードしています。
オブジェクトの線の太さを変更する方法
LISP でオブジェクトの線の太さを変更するには、vla-put-lineweight 関数を使用します。
サンプル コードは以下になります。
(defun c:ChangeLineweight ()
; AutoCAD のオブジェクトを取得
(setq acadObject (vlax-get-acad-object))
; アクティブなドキュメントを取得
(setq activeDocument (vla-get-activedocument acadObject))
; ドキュメントの Utilyty オブジェクトを取得
(setq utility (vla-get-utility activeDocument))
; 選択した図形の VLA オブジェクトを取得
(vla-getentity utility 'vlaObject 'pickedPoint "\nオブジェクトをを選択:")
; 先の太さを 2.00 に変更
(vla-put-lineweight vlaObject acLnWt200)
)
この LISP をロードして、ChangeLineweight コマンドを実行してみてください。
「オブジェクトを選択」と聞かれるので、適当なオブジェクトを選択してみてください。
やったー!!
選択したオブジェクトの線の太さを、2.00 に変更できた!!
acLnWt200 が 2.00 の線の太さを示しています。
; 先の太さを 2.00 に変更
(vla-put-lineweight vlaObject acLnWt200)
その他の線の太さは、以下のようになります。
- acLnWt000
- acLnWt005
- acLnWt009
- acLnWt013
- acLnWt015
- acLnWt018
- acLnWt020
- acLnWt025
- acLnWt030
- acLnWt035
- acLnWt040
- acLnWt050
- acLnWt053
- acLnWt060
- acLnWt070
- acLnWt080
- acLnWt090
- acLnWt100
- acLnWt106
- acLnWt120
- acLnWt140
- acLnWt158
- acLnWt200
- acLnWt211
- acLnWtByLayer
- acLnWtByBlock
- acLnWtByLwDefault