LISP で図形のプロパティの情報を取得するには、どうすればいいの?
こんにちは、メモだよ!!管理人です。
今回は、LISP を使用して、図形のプロパティの情報を取得したり変更する方法を紹介します。
vlax-get-property 関数でプロパティを取得
vlax-get-property という関数を使用すると、図形のプロパティを取得することができます。
(vlax-get-property object 'property)
object
VLA オブジェクト
'property
取得するプロパティの名前
例えば、選択した図形の色の情報を取得するには、以下のようにします。
(defun C:GetColor ()
' アクティブ ドキュメントの VLA オブジェクトを取得
(setq activeDocument (vla-get-activedocument (vlax-get-acad-object)))
' ドキュメントの Utilyti オブジェクトを取得
(setq utility (vla-get-utility activeDocument))
' 選択した図形の VLA オブジェクトを取得(変数 vlaObject に設定)
(vla-getentity utility 'vlaObject 'pickedPoint "\nオブジェクトをを選択:")
' 選択した図形の color プロパティを取得
(setq color (vlax-get-property vlaObject 'color))
' 取得したプロパティを表示
(alert (strcat "選択した図形の色番号は " (itoa color) " です。"))
(princ)
)
上記 LISP をロードして、GetColor コマンドを実行します。
「オブジェクトを選択」と表示されるので、色の情報を取得したい図形を選択します。
すると、選択した図形の色場号が警告メッセージに表示されます。
線種を取得したいときは、(vlax-get-property vlaObject 'color) の部分を以下に変更します。
(vlax-get-property vlaObject 'linetype)
使い方はなんとなくわかったけど…
プロパティって、color や linetype 以外にどんなものが使えるの?
プロパティは、図形によって変わってくるよ。
例えば、円には center というプロパティがあるけど、線分にはないよね。
図形ごとにどんなプロパティを使用できるかは、ActiveX リファレンスガイドを見れば確認できるよ。
例えば、円(Circle)のプロパティを確認するには、以下のようにします。
ActiveX リファレンスガイドを表示して、オブジェクト > C オブジェクト > Circle オブジェクト(ActiveX) を選択します。
すると、そこにプロパティの一覧が表示されるので、そこにあるものを使用できます。
vlax-property-available-p 関数を使用すると、vlaObject に対してあるプロパティが使用できるかどうかを確認することができます。
例えば、以下を実行したとします。
(vlax-property-available-p vlaObject 'center)
vlaObject が円のときは、T を返します。
vlaObject が線分のときは、nil を返します。
vlax-put-property 関数でプロパティを変更
vlax-put-property 関数を使用して、プロパティを変更することができます。
(vlax-put-property vlaObject 'color 5)
上記を実行すると、図形 vlaObject の色番号を 5(青)に変更できます。
ここで使用できるプロパティも、vlax-get-property 関数のときと同じようにActiveX リファレンスガイドで確認できます。
ただし、プロパティには、読み取り専用で変更できないものもあります。
例えば、円(Circle)のプロパティは、ActiveX リファレンスガイドを表示して、オブジェクト > C オブジェクト > Circle オブジェクト(ActiveX) を選択で確認できます。
ここでプロパティをクリックすると、その情報が表示されるので、そこで読み取り専用かどうかを確認できます。
例えば、Layer を選択すると、以下のように表示されます。
「プロパティの値」で「読み込み専用」が「いいえ」になっているので、この図形の画層を変更できることが確認できます。
ObjectName のように、変更できないプロパティの場合は、「読み取り専用」が「はい」になっています。
VLA オブジェクトを取得すれば、簡単にいろんなプロパティの確認や変更ができますね。😄