2010年8月20日金曜日

.NET - ブロックに含まれる属性の値を変更するサンプル コード(AutoCAD 2011)

.NET でブロックに含まれる属性の値を変更できるか試してみました。

試してみたところ、手順としては以下のような感じでできました。
  1. 図面中のブロック参照を抽出
  2. 該当する名前のブロック参照に対して AttributeCollection を称して属性を抽出
  3. 属性の値(TextString)を変更
AVDO_UpdateAttribute.dll は こちら、ソースは こちら、試しに使用する test.dwg は こちら にあります。

試し方は以下のとおりです。
  1. NETLOAD コマンドで AVDO_UpdateAttribute.dll をロードします。
  2. test.dwg を開きます。(属性付きのブロック参照 『表題欄』 が表示されます。)
  3. AVDO_UpdateAttribute コマンドを実行します。
  4. 表示された [属性編集] ダイアログで、新しい値を入力して [OK] ボタンをクリックします。
これで、ブロック参照 『表題欄』 に含まれる属性の値が変更されます。

2010年8月19日木曜日

.NET(サンプル プログラム) - 「AutoCAD LT の グループ ツールバーと同様の動作にする」(AutoCAD 2011)

AutoCAD LT のグループ コマンドは AutoCAD のとは違うということはなんとなく知ってはいたんですが、今回いろいろ触ってみました。確かに AutoCAD LT の方が簡単にグループを作ったり分解したりできるんですね。

AutoCAD LT には、PKFSTGROUP や PKUNGROUP っていう AutoCAD には無いコマンドがあります。
これらのコマンドは、PICKFIRST に対応してるので、簡単にグループを作ったり分解できます。(AutoCAD の GROUP コマンドは PICKFIRST に対応してないようです。)

また、ツイッターで 『AutoCAD LTの「グループ」ツールバーをAutoCADでも使えるようにしたい』 っていうリクエストもいただいたので、PKFSTGROUP や PKUNGROUP のようなコマンドを AutoCAD でも使えるように .NET で作ってみました。
(他にも何かリクエストがあれば、アンケート などからお知らせいただければ、できる限りブログに情報をアップしたいと思ってます。)

AVDO_PKFSTGROUP.dll が こちら で、ソースが こちら です。

AutoCAD LT の PKFSTGROUP コマンドに対応するのが AVDO_PKFSTGROUP コマンドです。
AutoCAD LT の PKUNGROUP コマンドに対応するのが AVDO_PKUNGROUP コマンドです。

また、ツールバーの作成例も含んだ動画を作りましたので、見てみてください。



ツールバーのマクロは以下のとおりです。
【グループ】
^C^C_AVDO_PKFSTGROUP

【グループを解除】
^C^C_AVDO_PKUNGROUP

【グループ管理...】
^C^C_GROUP

【グループ選択オン/オフ】
'_setvar;pickstyle;$M=$(if,$(eq,$(getvar,pickstyle),0),1,$(if,$(eq,$(getvar,pickstyle),1),0,$(if,$(eq,$(getvar,pickstyle),2),3,2))) 

2010年8月13日金曜日

.NET(サンプル プログラム) - 「点オブジェクトと似た動作をするブロックの作成」(AutoCAD 2011)

久しぶりに .NET の勉強のため、サンプル プログラムを作ってみました。

しばらくやらないと、せっかく勉強したこともなかなか思い出せなくてダメですね。

DDPTYPE[点スタイル管理 D] コマンドで点オブジェクトの表示スタイルを変更できますが、表示スタイルは AutoCAD が用意したものしか使えないので、ブロックを点オブジェクトと似た動作をするようにしてみました。

ただし、ブロックなので、レイアウトで複数のビューポートがあるときは、点オブジェクトと違った動きになります。

プログラムの内容としては、今まで勉強してきた以下の機能を使ってみました。
ディクショナリの登録
ブロックに Xrecord を追加
イベント
などなど
作ったコマンドはこんな感じです。
AVDO_DDPTYPE(または AVD)コマンド : [点スタイル管理(AVDO_Point)] ダイアログを表示するコマンド
AVDO_POINT(または AVP)コマンド : ブロックを点として挿入するコマンド
AVDO_POINT_EVENT(または AVPE)コマンド : イベントを登録するコマンド
AVDO_POINT_EVENT_REMOVE(または AVPER)コマンド : イベントの登録を解除するコマンド

動作の詳細は、動画を見てみてください。



DLL は こちら、ソースは こちら にあります。

※ レイアウトでモデル空間をアクティブにしても、ペーパー空間にブロックが作成されてしまう間違いを修正してファイルを置き換えました。(2010/08/14)
※ ロックされた画層に点ブロックがあって再作図すると大きさが変わらない現象も見つけたので修正してファイルを置き換えました。(2010/08/14)