IFC SDKは、EXPRESSスキーマで定義されたデータを操作するための低レベルAPIを提供するStandard Data Access Interface (SDAI)をサポートしています。この記事では、アプリケーションインスタンスのセットを操作する方法について説明します。
IFC SDKでSDAIを一般的に操作する方法の詳細については、この記事を参照してください。
.ifcファイルには、1つのタイプの複数のアプリケーションインスタンスが含まれている場合があります。これらのケースでは、SDAIは以下のことを可能にするインターフェースを提供します。
- 指定されたタイプのすべてのインスタンスを検索します。
- イテレータオブジェクトを介してセットの要素への順次アクセスを含め、1つのタイプのインスタンスのセットを操作します。
特定のタイプのアプリケーションインスタンスのセットを取得するには、sdaiGetEntityExtentBN()関数を使用します。
指定されたタイプのインスタンスが見つかったかどうかを確認するには、sdaiGetMemberCount()関数を呼び出します。この関数は、セット内の要素の数を返します。
空でないインスタンスのセットがある場合、イテレータオブジェクトを作成し、以下の関数を使用してセットの要素を順に処理できます。
- sdaiCreateIterator() — イテレータオブジェクトを作成します (SdaiIteratorデータ型で表現されます)。
- sdaiBeginning() — セットの最初の要素に移動します。
- sdaiNext() — セットの次の要素にアクセスします。
- sdaiGetAggrByIterator() — セットの現在の要素にアクセスします。
以下のコードフラグメントは、モデル内のすべてのIFCBSPLINECURVEWITHKNOTSインスタンスを見つけ、見つかったインスタンスのセットを反復処理する方法を示しています。
SdaiString entityName = "IFCBSPLINECURVEWITHKNOTS";
SdaiSet bsplineInstanceSet = sdaiGetEntityExtentBN(model, entityName);
型付きアプリケーションインスタンスのセットが有効であることを確認してください。セットの長さはゼロであってはなりません。
TEST_ASSERT(sdaiGetMemberCount(bsplineInstanceSet) > 0);
次に、イテレータを使用して集約のすべての項目を順に処理します。
SdaiIterator bsplineIterator = sdaiCreateIterator(bsplineInstanceSet);
TEST_ASSERT(sdaiErrorQuery() == sdaiNO_ERR);
for (sdaiBeginning(bsplineIterator); sdaiNext(bsplineIterator);)
{
SdaiInstance instance = NULL;
sdaiGetAggrByIterator(bsplineIterator, sdaiINSTANCE, &instance);
SdaiInteger instanceId = _sdaiGetEntityId(instance);
TEST_ASSERT(sdaiErrorQuery() == sdaiNO_ERR);
}