2010年9月2日木曜日

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

.NET でブロックに含まれる属性の値と位置を所得できるか試してみました。

属性値は AttributeReference.TextString Propertyで、位置は AttributeReference.Position Property で取得できました。

位置に関しては、ブロックが入れ子になっているときは、TransformBy Method で Matrix3d を使用してあげるとちゃんとした位置を取得できるようです。

サンプル コードでは、入れ子は 1 階層まで見るようになってます。また、ブロックに尺度が付いている場合は、X と Y が同じ尺度になっている場合にうまく行くようになっています。X と Y の尺度が違う時は、正しい場所を取得してくれないと思います。もし、X と Y の尺度が違う時も対応したいときは、別のマトリックスの指定をする必要があると思います。

サンプル コードは こちら です。
DLL は こちら です。
試してみた図面は こちら です。

2010年9月1日水曜日

.NET(サンプル プログラム) - 「実行中のコマンドのエイリアスを設定」(AutoCAD 2011)

例えば、LINE[線分] コマンドを実行するときに、コマンド ラインに 「L」 と入力してコマンドを実行することができますよね。
慣れていると、リボンのタブを選んでボタンを選んでってするより早いと思います。

この設定は、acad.pgp ってファイルにされているんですが、それを変更する方法としては [管理] タブの [エイリアスを編集] を選択して、手動で acad.pgp を修正したり、Express Tools の ALIASEDIT[Command Alias] コマンドで変更することができます。

でも、ちょっと面倒くさくてなかなかやらないかなっと思ったので、今回は、もっと簡単に設定することができないかと思って、.NET でカスタマイズしてみました。

使い方はこんな感じです。
  1. NETLOAD コマンドで AVDO_SetAlias.dll をロードする。
    ※ acad.lsp で自動的にロードするよう設定しておけば、AutoCAD を起動するたびにロードする必要がないので楽ちんです。
  2. エイリアスを設定したいコマンドを実行。
  3. 割り込みコマンドで AVDO_SetAlias コマンドを実行。
  4. 「コマンドに対するエイリアスを入力:」 に対して設定したいエイリアスを入力。
※ AVDO_SetAlias コマンド自体にエイリアスを設定しておけば、もっと簡単になると思います。
※ 実行中のコマンドに対して設定するので、ダイアログが表示されるコマンドや、REGEN コマンドのようにコマンドを実行するとすぐに終わっちゃって、コマンド実行中にコマンドラインに入力できないコマンドに対して設定することはできません。

その他細々としたことに関しても動画を作りましたので見てみてください。



DLL は こちら、ソースは こちらです。

※ 今回から、Google ドキュメントにファイルおいて、上の 「こちら」 にリンクしてます。んー、Google ドキュメントって便利だねー。