ODA IFC SDK での標準データアクセスインターフェースの操作

IFC SDK は、EXPRESS スキーマで定義されたデータを操作するための低レベル API を提供する標準データアクセスインターフェース (SDAI) をサポートしており、以下の機能を提供します。

  • セッション、リポジトリ、モデル、およびスキーマインスタンスの管理。
  • データ検証を含む、アプリケーションデータ (エンティティインスタンス、集約、属性) の操作。

SDAI は ISO 10303-22 規格で定義されています。

この記事では、IFC SDK で SDAI を操作する方法について概説します。

環境を準備し、ファイルからモデルをロードする

ファイルを開き、モデルを作成します。まず、sdaiOpenSession を使用して新しいセッションを作成します。

SdaiSession session = sdaiOpenSession();

次のステップはリポジトリの初期化です。作成したセッションで、ファイルからリポジトリを作成します。この例では、サンプルファイルを使用し、それを開きます。

_sdaiCreateRepositoryFromFile(session, sdaiPathToFileDirectory, nameRepo);

ここでは _sdaiCreateRepositoryFromFile を使用します。この関数は「_」記号で始まりますが、これはこの関数が仕様に記載されていない ODA ユーティリティ関数であることを意味します。

ファイルリポジトリへの有効なパスを渡すと、正常に作成されるはずです。次に、sdaiOpenRepository を使用して開く必要があります。

repoCreate = sdaiOpenRepository(session, repoCreate);

これで、開いているリポジトリから名前でモデルを取得できます。ファイルモデルの名前は「default」です。これを行うには sdaiAccessModelBN を使用する必要があります。

SdaiModel model = sdaiAccessModelBN(repoCreate, modelName, accessMode);

モデルが不要になった場合は、sdaiEndModelAccess 関数を使用して閉じることができます。その後、すべての読み取りおよび書き込み操作は失敗します。

アプリケーションインスタンスへのアクセス

モデルは読み取り専用モードで開かれており、使用準備ができています。

まず、アプリケーションインスタンスにアクセスする方法を知る必要があります。サンプルファイルをプレーンテキストとして表示し、テキストエディタで開いてみましょう。

ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [DesignTransferView_V1.0]'),'2;1');
FILE_NAME('001-00','2019-01-14T10:55:12',(''),(''),'The EXPRESS Data Manager Version 5.02.0100.07 : 28 Aug 2013','20180806_1515(x64) - Exporter 19.1.0.112 - Alternate UI 19.1.0.112','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1= IFCORGANIZATION($,'Autodesk Revit 2019 (ENU)',$,$,$);
#5= IFCAPPLICATION(#1,'2019','Autodesk Revit 2019 (ENU)','Revit');
#6= IFCCARTESIANPOINT((0.,0.,0.));
…
ENDSEC;
END-ISO-10303-21;

簡単な分析のために、DATAセクションの各文字列はモデルのアプリケーションインスタンスになります。この数値は、このインスタンスのハンドルです。大文字のインスタンスタイプは等号の後に配置されます。丸括弧内のデータは、このアプリケーションインスタンスのパラメータです。SdaiAppInstanceは、アプリケーションインスタンスを操作するためのSDAIデータ型です。

アプリケーションインスタンス#5を読み込んでみましょう。サンプルコードのappInstanceAccessByHandle関数を見てください。

sdaiGetEntityByIdは、ハンドルIDによってモデルからアプリケーションモデルを読み取ります。アプリケーションインスタンスの検証には、マクロTEST_ASSERTを使用します。次に、最後の操作のエラーコードをチェックするためにsdaiErrorQueryを呼び出します。すべての操作が正常に完了したことを確認する必要があります。

//#5 = IFCAPPLICATION(#1, '2019', 'Autodesk Revit 2019 (ENU)', 'Revit');
SdaiAppInstance applicationInstance = _sdaiGetEntityById(model, 5);
TEST_ASSERT(applicationInstance != NULL);
TEST_ASSERT(sdaiErrorQuery() == sdaiNO_ERR);

関数sdaiIsInstanceOfBNを使用して、アプリケーションインスタンスのタイプを確認できます。

TEST_ASSERT(sdaiIsInstanceOfBN(applicationInstance, "IFCAPPLICATION") == sdaiTRUE);

次に、アプリケーションインスタンスのハンドルを取得し、_sdaiGetEntityByIdで使用されているハンドルと比較します。

TEST_ASSERT(_sdaiGetEntityId(applicationInstance) == 5);
TEST_ASSERT(sdaiErrorQuery() == sdaiNO_ERR);

環境の終了とクリーンアップ

セッションでの作業が終了したら、リポジトリを閉じます。

sdaiCloseRepository(repoCreate);

次に、セッションを閉じます。

sdaiCloseSession(session);

今後のブログ記事では、SDAIの操作方法についてさらに詳しく説明します。

今すぐ始める

ODAソフトウェアを60日間無料でお試しください。
リスクなし、クレジットカード不要。

無料で試す