アドインプログラムで利用するカスタム属性について

アドインプログラムで利用するカスタム属性について

Anonymous
適用対象外
803件の閲覧回数
6件の返信
メッセージ1/7

アドインプログラムで利用するカスタム属性について

Anonymous
適用対象外

お世話になります。

現在、以下の環境下でAutoCADの.NET APIを利用したアドインプログラムの実装を検討しております。

 

 ・AutoCAD 2018(評価版)

 ・VisualStudio 2012

    (.NETFramework 4.6.2、VisualBasic)

 

AutoCADのオブジェクトに対してアプリケーションに必要なカスタム属性(いわゆる材質など)を

持たせたい場合、書籍等を読む限り、

「ブロック(ダイナミックブロック)」を利用するのが一般的な方法と認識しています。

 

ただ、今回の要求仕様はシンプルで、

わざわざ「ブロック(ダイナミックブロック)」を定義しなくても、

標準のオブジェクトである「線分」に対し、

「動作は線分のまま」で、「挿入オブジェクトを区別する情報(ID/名称)」や「カスタム属性情報」を

持たせることができれば、要求を満たすことができそうなので、

シンプルな手順があれば、そちらを採用することを考えたいです。

 

# 図面作成後のプログラム処理で、個別のオブジェクトを判別する必要があり、

# 少なくとも各挿入オブジェクトを区別できる「ID/名称」は欲しいです。

 

(質問)

 

1. AutoCADの基本的な考え方として、挿入オブジェクトごとに

   アプリケーションに必要なカスタム属性を定義する場合、

   「ブロック(ダイナミックブロック)」を利用することが前提となるのでしょうか?

 

2. 標準オブジェクト(ここでは「線分」)に対して

   別途「ID/名称」「カスタム属性」を持たせる方法はあるのでしょうか?

   (「線分」を継承した「カスタム線分」のようなものが定義できるのでしょうか?)

0 件のいいね
解決済み
804件の閲覧回数
6件の返信
返信 (6)
メッセージ2/7

sakanaka
Advisor
Advisor

こんにちは

 

プログラムやマクロについては素人同然なのでリンク先の紹介しかできませんが

以下リンク先で知りたい情報が得られるのではないでしょうか

 

https://knowledge.autodesk.com/ja/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/kA2...

 

上記リンク先の下方

QA-7772 AutoCAD .NET API を使ってカスタムデータを付加する:拡張エンティティ データ

https://knowledge.autodesk.com/ja/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/kA2...

 

QA-7773 AutoCAD .NET API を使ってカスタムデータを付加する:拡張ディクショナリ

https://knowledge.autodesk.com/ja/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/kA2...

 

こちらが求められている方法が記載されているのかな?と思います。

 

疑問が解決できると良いですね。

sakanaka

EESignatureOB

メッセージ3/7

Katsuaki.T
Alumni
Alumni
解決済み

akifumi_nakano さん、こんにちは。

 

最初に、ご質問1の回答です。

 

前提ではありません。AutoCADではユーザはブロックにブロック属性を追加して、それを編集ができますが、同様なことをアプリケーションでもできます。仕様により、ブロックにブロック属性を追加する必要がなければ、拡張エンティティデータまたは拡張ディクショナリの利用を検討できます。

 

次に、ご質問2の回答です。

 

線分、円、ポリラインなどを AutoCAD の図面に含まれるオブジェクトにアプリケーションが必要なアプリケーション固有のデータを持たせたい場合は、拡張エンティティデータまたは拡張ディクショナリ を使用できます。ID/名称であれば、データタイプとして整数と文字列になるかと思いますが、シンプルなデータの場合は、拡張エンティティデータの方が適しているかもしれません。sakanaka のご返信したリンクに、それらの利点と欠点について書かれていますので、参考にして検討されてはいかがでしょうか。ObjectARX API を使用すれば、線分を継承した「カスタム線分」を作成できます。しかし、ObjectARX API を使用するとしても、今回のようなシンプルな仕様には「カスタム線分」を作成する利点はありません。尚、拡張エンティティデータまたは拡張ディクショナリはブロック参照を含めて、すべての図形オブジェクトに追加できます。

 

ここからは、追加情報になります。以下は オートデスク製品のカスタマイズ開発の技術支援をしているチームのブログです。その記事から AutoCAD 2018 API のトレーニングマテリアルがダウンロードできます。ObjectId などのオブジェクト識別子の説明、サンプルプロジェクトには拡張エンティティデータまたは拡張ディクショナリもふくまれています。どうぞご活用ください。

 

AutoCAD 2018 API トレーニング マテリアル
http://adndevblog.typepad.com/technology_perspective/2017/05/autocad-2018-api-training-materials.htm...

 

.NET では ランタイムにオブジェクトのタイプを識別できます。これは AutoCAD .NET API でも同様です。トレーニング マテリアルにはその例がないので、タイプを識別については英語のブログですが、オートデスク製品開発チームのメンバのブログに分かりやすい、サンプルコードがふくまれていましたので、ご紹介いたします。

 

http://through-the-interface.typepad.com/through_the_interface/2006/09/working_with_sp.html

 

以下に円をタイプ識別している個所を抜粋しました。

 

If TypeOf (obj) Is Circle Then

 


Katsuaki Takamizawa
Technical Support Specialist
メッセージ4/7

Anonymous
適用対象外

Sakanaka様、Takamizawa様

 

早急なご回答をいただき、ありがとうございました。

AutoDESKの方からのご見解を頂けたので、安心いたしました。

 

お二人よりいただきました、リンクを確認いたしました。

 

今のところバイナリデータのような16KBを超えるような情報を扱うことは考えていないので、

Takamizawa様のおっしゃるとおり、まずは拡張エンティティデータを利用する方向で考えることとし、

アプリケーションの実装上、16KBを超えるような情報を扱わざるを得ない場合

(例えば.NETオブジェクトをバイナリ化した情報をオブジェクトごとに持たせる場合など)は

拡張ディレクトリを利用することを検討いたします。

 

また、追加情報のご紹介、ありがとうございます。

特に[Through the Interface]は、英語情報ですが実装を考える上で役に立つので、非常に助かっています。

[AutoCAD 2018 API トレーニング マテリアル]についても実装の参考にさせていただきます。

 

 

以下、念のために知りたいのですが、Lineが持つ標準プロパティで

挿入オブジェクトを個別に判別するための個体IDのような情報は存在するのでしょうか?

(実際のところ、ロジックで取扱しやすい個別番号をプログラム側で付与することにはなると思うので、

 そういったプロパティが存在するにしても、使うかどうか、というところはあるのですが...)

0 件のいいね
メッセージ5/7

Katsuaki.T
Alumni
Alumni

 akifumi_nakano さん

 

AutoCAD が公開する API では図面に格納されているオブジェクトを一意に特定するために、エンティティ名、ハンドル番号、オブジェクトID という識別子が使われます。AutoCAD .NET API アプリケーションでは主にオブジェクトIDを使用します。プロパティは以下になります。

 

DBObject.ObjectId

 

識別子については、前回ご案内したAutoCAD 2018 API トレーニング マテリアル に含まれる ”AutoCAD 2018 .NET API Training.pdf” のページ 50 または dotNET API Guide.chm の 「オブジェクトの操作」>「オブジェクトの特定」に説明がありますのでご覧ください。AutoCAD 2018 API トレーニング マテリアルの .chm ファイルのコンテンツが非表示で見れない場合は、添付の 2016 版の .chm ファイルをお試しください。

以下のブログもオートデスク製品カスタマイズ開発支援チーム(Autodesk Developer Network)のAutoCAD API についてのブログです。どうぞご活用ください。

 

http://adndevblog.typepad.com/autocad/


Katsuaki Takamizawa
Technical Support Specialist
0 件のいいね
メッセージ6/7

Anonymous
適用対象外

Takamizawa様

 

迅速なご回答を頂き、ありがとうございます。

 

DBObject.ObjectIdで判断できるのですね。

 

ここまでに頂いたご回答で、聞きたい内容は確認することができましたので、

今回はここでCloseとさせて頂きたいと思います。

 

ご多忙の中、ご回答頂き、ありがとうございました。

メッセージ7/7

Katsuaki.T
Alumni
Alumni

akifumi_nakano さん

 

ご返信ありがとうございます。内容が確認できて良かったです。

 

よろしくお願いします。


Katsuaki Takamizawa
Technical Support Specialist
0 件のいいね