【IJCAD】データベース内のオブジェクトを選択する
ObjectGRX の強み
前回の記事ではカスタマイズするなら .NET API を使用すべきと主張しましたが、今回のは ObjectGRX のあるクラスを使用したオブジェクト選択のサンプルを紹介します。
データベースから選択セットを作成する
IJCAD の ObjectGRX には OdDbSelectionSet
というクラスが存在していまして、このクラスを使用することで、データベースから選択セットを作成できます。
OdDbSelectionSet
クラスは Teigha という IJCAD の DWG を読み書きするために採用しているエンジンの、ソフトウェアライブラリ特有のクラスなので 、AutoCAD の ObjectARX には存在しないと思います。
OdResBuf
クラスは resbuf
構造体と同じような機能を持ったクラスで、OdDbSelectionSet::select
メソッドで選択セットフィルタを設定する際に使用します。このクラスも ObjectARX には存在しないと思います。
サンプルコード
オブジェクトを全て選択するが、円以外はフィルタリングして、円のみを選択して色を変更しています。
#include "DbSSet.h" void SampleCommand() { OdDbDatabase* db = oddbHostApplicationServices()->workingDatabase(); OdResBufPtr filter = OdResBuf::newRb(OdDb::kDxfStart, _T("CIRCLE")); OdDbSelectionSetPtr sset = OdDbSelectionSet::select(db, filter); OdDbObjectIdArray ids = sset->objectIdArray(); for each (OdDbObjectId id in ids) { OdDbEntity* ent; oddbOpenOdDbEntity(ent, id, OdDb::kForWrite); ent->setColorIndex(1); ent->close(); } }
実行結果
サンプルコードの処理を実行したら次のような感じになります。
例えば readDwgFile
メソッドを使用して、メモリ上にロードしたデータベース内に対して、特定のオブジェクトのみ選択したいときに役に立つかもしれません。