AutoCAD の図面ファイルは、幾何情報(図形)を持つデータベースに例えることが出来ます。目に見える図形だけでなく、背後にあるさまざまな情報とつながり合うことで、図面情報が維持されています。この「つながり」については、AutoCAD API から見た図面構造と破損 でもご案内していますのでご確認ください。
AutoCAD でアドイン アプリケーションを運用していく際には、特定のオブジェクトに固有のデータを付加して、どこかのタイミングで再利用したい場面が多くあります。いわゆる「カスタム データ」の利用、ということになりますが、AutoCAD API で付加した独自のカスタム データは、図面内の「つながり」によって管理されることになるので、カスタム データの付加後に図面ファイルに保存して、再び図面ファイルを開いても、付加したカスタム データを取り出して再利用することが出来るようになっています。
それでは、図面ファイルに保存されるカスタム データには、どのようなものがあるか見ていきたいと思います。
カスタム データを利用する場合、ブロック属性、カスタム オブジェクト、拡張エンティティ データ、ディクショナリの内から選択することが可能です。それぞれの概要、利点と欠点、Autodesk Knowledge Network 時期に記載している AutoCAD .NET API サンプルは次のとおりです。
ブロック属性
BLOCK[ブロック登録] コマンドでブロック定義を作成する際に、ATTDEF[属性定義] コマンドで作図してブロック定義に加えると、ブロック参照としてモデル空間やレイアウトに挿入する際、属性値を指定して配置することが出来ます。1 つのブロック定義に複数の属性値を持たせりことが出来るだけでなく、集計などで活用することが可能です。
<ブロック属性の利点と欠点>
✔ ユーザ操作で属性を付加することができる
✘ ユーザ操作で属性を消されてしまう可能性がある
✘ 付加できるのはブロック単位のみでバイナリデータの扱いは不可能
<Autodesk Knowledge Network 記事にある AutoCAD .NET API 例>
AutoCAD .NET API :属性付きブロック定義とブロック参照の挿入
AutoCAD .NET API :ブロック参照の属性値の変更
カスタム オブジェクト
カスタム オブジェクト とは、C++ 言語のクラス継承を用いて、ObjectARX アプリケーションによって定義された独自のオブジェクトを指します。
AutoCAD の標準オブジェクトのように振る舞うようになり、図面ファイルにも保存されるので、データ コンテナとしての活用が出来ます。目に見える図形オブジェクトとしても、目に見えないオブジェクトしても定義が可能ですカスタム オブジェクトの定義時には、内包するカスタム データを自由に定義することが可能です。
残念ながら、AutoCAD .NET API を含め、他の AutoCAD API ではカスタム オブジェクトを定義することが出来ません。
<カスタム オブジェクトの利点と欠点>
✔ あらゆるデータを内包できる自由度の高いオブジェクト作成が可能
✔ ユーザ操作で内包するデータだけが削除されてしまう恐れはない
✔ オブジェクトの振る舞い(動作、挙動)も同時に定義することができる
✔ グラフィカル オブジェクトと非グラフィカル オブジェクトの両者を実装可能
✘ ObjectARX でしか定義できない(AutoCAD .NET API のみの実現は不可能)
✘ カスタム オブジェクトの認識には定義した ObjectARX アプリのロードが必須。
✘移植性の問題 から、メインテナンスに手間がかかる
ObjectARX を利用すると、後述する Named Object Dictionary に格納するディクショナリ要素にカスタム オブジェクトを充てることができます。
AutoCAD 2022 ObjectARX トレーニング マテリアル では、目に見える図形(カスタム エンティティ)と、目に見えないカスタム オブジェクトを利用した例を実装方法とともに詳しくご案内しています。この例では、カスタム オブジェクト MYDICTIONARY を格納する ディクショナリを不変リアクタとして利用して、関連付けたオブジェクト(下記の例では上部の図形)の色を変更すると、カスタム エンティティ ASDKMYCIRCLE の色も連動して変化する実装を扱っています。これらのオブジェクトの「つながり」(ソフトポインタ参照)は図面ファイルに保存され維持されることになります。
拡張エンティティ データ
拡張エンティティ データは、目に見える図形オブジェクトにも、目に見えないオブジェクトにも、固有のカスタム データの付加、参照する手法を提供します。
AutoCAD の標準コマンドは、付加された拡張エンティティ データを認識しないので、標準ユーザ インタフェースに値が表示されることはありませんが、逆に、ユーザから付加された固有データを隠蔽することが可能です。また、プログラムを介在させない限り、拡張エンティティ データを削除したり、値を変更したりすることができないので、ユーザによる改変を防止することもできます。
<拡張エンティティ データの利点と欠点>
✔ バイナリを含むあらゆる情報をあらゆるオブジェクトに付加できる
✔ ユーザ操作でデータが削除されてしまう恐れはない
✘ 1 オブジェクトへの付加サイズ総量が 16 KByte を越えられない
<Autodesk Knowledge Network 記事にある AutoCAD .NET API 例>
AutoCAD .NET API :拡張エンティティ データの付加・取得・削除
ディクショナリ
AutoCAD のディクショナリには、拡張ディクショナリと Named Object Dictionary の2種類が用意されています。いずれの場合も XRecord オブジェクトにリザルトバッファを割り当ててカスタム データを扱うことになります。
拡張エンティティ データと比べると、文字列を除いて実質、サイズ制限がないに等しいので、大規模なカスタム データの運用に向いています。
単に文字列や実数、整数などのデータを維持するだけでなく、「つながり」(ソフトポインタ参照)を利用した情報を維持したり、独自の画像データを格納することが出来るので、ObjectARX より容易に、柔軟なデータ運用が可能です。
<ディクショナリの利点と欠点>
✔ バイナリを含むあらゆる情報をあらゆるオブジェクトに付加できる
✔ ユーザ操作でデータが削除されてしまう恐れはない
✔ 1 オブジェクトへの付加サイズに実質総量制限はない(オブジェクト全体で4GByte)
✘ バイナリ データは 127 Bytes 単位に分割しなければならない
✘ 文字列領域 1 つに保存可能な最大文字数は 65535 文字
<Autodesk Knowledge Network 記事にある AutoCAD .NET API 例>
AutoCAD .NET API :拡張ディクショナリの付加・取得・削除
AutoCAD .NET API :画像データの図面への格納
AutoCAD .NET API :選択セットのセッション間の維持
By Toshiaki Isezaki
コメント