2008年11月27日

AutoCAD:属性取得

LTで属性を取得する方法。

・ハケ(オブジェクトプロパティコピー)を使う
→オブジェクトを作図しておき後から属性変更
・配布されているVBSを使う
→既存オブジェクトから属性を取得して新規に作図する

・2008/11 VBSにRGB対応用修正部分追記、加筆修正箇所分かりやすく新旧対応記載に



■ハケ(オブジェクトプロパティコピー・MATCHPROP)
基本コマンドの一つです。
・基準オブジェクトを選択し、他のオブジェクトにプロパティをコピー
・アタマに'で割り込み可能
・Sオプションでコピー内容設定できます
※設定内容は該当図面を閉じるまで保持されます
・図面間操作可能
図面間操作ができるのが一番のポイントでしょうか。
■AcadRemoconのGetProp.vbsを使う
KJU FACTORY様で配布されているAcadRemoconのサンプルプログラムページ
『選択したオブジェクトの属性を現在値に設定』(GetProp.vbs)
を使います。
・作成済みの凡例等から属性を取得し、新規オブジェクトを作図できる
・DLしたVBSをダブルクリックするか、マクロボタンに登録するなどして使う(マクロボタン登録支援ツールも有)
※ボタン登録する場合、VBS保存フォルダをサポートパスに追加しておく
一々プルダウンしなくて良いのでらくちんです。ハケと組み合わせて効率よく。

■参考■
上記のVBSに少し加筆するだけでオブジェクトの印刷スタイルも取得できます。
H20.11 RGB対応版(LT2009で確認)
※CECOLORにRGBが使えるVerのみ有効
※バージョン混在環境の方は、AutoCADのVerチェックをどこかでやっておくと良いかも

加筆修正箇所は4箇所だけです。変更箇所のみ抜粋記載。
新旧比較を参考に太字部分を加筆/修正してくだされ。ここに書くまでもなさそーなシンプルカスタマイズですが。
CTB使ってる図面・STB使ってる図面双方で使えます。使い分けしなくて良いです。
さすがに全文のっけるワケにはいきませんのでピンとこない方は・・・
□加筆修正前
Sub Main()
 Set Acad = CreateObject("AcadRemocon.Body") 'AcadRemocon初期化

 '選択オブジェクトの色、画層、線種、線種尺度、線の太さ、印刷スタイルを取得
   (中略)
If Not Acad.acSendCommand("^MLW ", "新*線の太さ*") Then Er: Exit Sub
If Not Acad.acGetDefaultValue(LW) Then Er: Exit Sub

'線の太さをフラグ化
   (中略)

'取得したプロパティを現在の設定値にする
If Not Acad.acSetVar("CECOLOR", CO) Then Er: Exit Sub
   (中略)
If Not Acad.acSetVar("CELWEIGHT", LW) Then Er: Exit Sub
   (以下略)
□加筆修正後
Sub Main()
 Set Acad = CreateObject("AcadRemocon.Body") 'AcadRemocon初期化
Acad.acGetVar "PSTYLEMODE",ST 'CTBかSTBかの判断

 '選択オブジェクトの色、画層、線種、線種尺度、線の太さ、印刷スタイルを取得
   (中略)
If Not Acad.acSendCommand("^MLW ", "新*線の太さ*") Then Er: Exit Sub
If Not Acad.acGetDefaultValue(LW) Then Er: Exit Sub
If ST=0 then
If Not Acad.acSendCommand("^MPL ","印刷スタイル*") Then Er:Exit Sub 'STBを使っている図面で印刷スタイルを取得
If Not Acad.acGetDefaultValue(PL) Then Er: Exit Sub
End If


'線の太さをフラグ化
   (中略)

'取得したプロパティを現在の設定値にする
If InStr(CO,",") > 0 Then 'RGBの判定
If Not Acad.acSetVar("CECOLOR", "RGB:" & CO) Then Er: Exit Sub
Else If Not Acad.acSetVar("CECOLOR" , CO) Then Er: Exit Sub
End If

   (中略)
If Not Acad.acSetVar("CELWEIGHT", LW) Then Er: Exit Sub
If ST=0 then
If Not Acad.acSetVar("CPLOTSTYLE",PL) Then Er: Exit Sub 'STBを使っている図面で印刷スタイルを設定
End If

(以下略)
このVBS使うとmodemacroの設定はぶっとんじゃうので必要に応じて加筆してくださいまし。

12:39│CAD近辺覚書 | |blogram投票ボタン|日コマ雑記帖