LabelUtilsPEは、ラベル関連の機能をBimRvのコア機能から切り離すことを目的としたプロトコル拡張(PE)です。これにより、BimRvユーザーは、異なるロケールをサポートするために独自のPEバージョンを実装できます。
LabelUtilsインターフェース
利用可能なメソッドの完全なリストはAPIリファレンスで確認できますが、ここではラベルを取得できるいくつかのメソッドを紹介します。
getLabelFor(enum_value)メソッドは、組み込みの列挙値のラベルを返します。以下の列挙値がサポートされています。
- OdBm::BuiltInParameter::Enum
- OdBm::BuiltInParameterGroup::Enum
- OdBm::BuiltInCategory::Enum
- OdBm::ParameterType::Enum
- OdBm::FamilyName::Enum
- OdBm::SystemType::Enum
- OdBm::AreaSpaceType::Enum
- OdBm::ColorSchemeMessage::Enum
- OdBm::CurveElemNameType::Enum
- OdBm::PipeJointType::Enum
- OdBm::BuiltInCircuitNamingScheme::Enum
- OdBm::CableTrayShapeType::Enum
- OdBm::ScheduleFieldMultipleValuesDisplayType::Enum
- OdBm::LabelResource::Enum
- OdBm::PartitionType::Enum
getLabelForUnit() メソッドは、単位のラベルを返します。
getLabelForSymbol() メソッドは、単位記号のラベルを返します。
getLabelForSpec() メソッドは、単位仕様 (タイプ) のラベルを返します。
LabelUtilsPE メソッドを使用する
PE メソッドを使用するには、まず PE 実装を含むライブラリをロードします。たとえば、英語の実装を使用するには、次のコマンドを呼び出します。
::odrxDynamicLinker()->loadModule(L"TB_ExLabelUtils");
異なるロケールをサポートするには、代わりに必要なリソースを使用して LabelUtilsPE 実装を記述し、登録します。
// Load custom LabelUtils implementation
MyLabelUtils::rxInit();
s_MyLabelsUtils = MyLabelUtils::createObject();
// Register MyLabelUtils instance as global OdBmLabelUtilsPE one
OdBmObject::desc()->addX(OdBmLabelUtilsPE::desc(), s_MyLabelUtils);
カスタム実装は、SDK の初期化中に一度だけ登録します。LabelUtils インスタンスは実行時に置き換えることはできません。また、SDK のシャットダウン中に実装の登録を解除します。
// Unregister and release LabelUtils instance
OdBmObject::desc()->delX(OdBmLabelUtilsPE::desc());
s_MyLabelUtils.release();
MyLabelUtils::rxUninit();
次に、PE 実装を OdBmElement クラスにリンクし、次の呼び出しを使用してアクセスします。
OdBmLabelUtilsPEPtr pLabelUtils = OdBmElement::desc()->getX(OdBmLabelUtilsPE::desc());
カスタム実装は、同じ方法で、またはグローバルポインタ (ここでは s_MyLabelUtils) を直接使用してアクセスできます。PE モジュールがロードされていない場合、pLabelUtils は結果としてヌルポインタを取得します。
BimRv での使用
LabelUtilsPE 機能は、組み込みパラメータ (ParamDef.caption) および組み込みカテゴリ (Category.name) のテーブルを構築するために使用されます。データベースが開かれたときに LabelUtilsPE モジュールがロードされていない場合、組み込みパラメータおよびカテゴリ要素は、その列挙要素名に対応する名前を取得します。また、OdBmElement::getParamValueAsString() メソッドは、LabelUtilsPE の getParamValueAsString() を暗黙的に呼び出します。
例
TB_ExLabelUtils モジュールは、英語をサポートする OdBmLabelUtilsPE インターフェースのサンプル実装です。
このモジュールには2つのモードがあります。
- 通常モード — CSV ファイルは、シンプルなテキストエディタを使用して、ソースコードをビルドすることなく変更できます。変更は実行時でも可能です (コンテンツへの最初のアクセス前。その後は値がキャッシュされ、変更は影響しません)。CSV フォルダは TB_ExLabelUtils バイナリの近くにある必要があり、これらの CSV ファイルを削除すると実行時エラーが発生する可能性があります。通常モードは BimRv の初期実装でしたが、現在はデフォルトではありません。
- 組み込みモード (デフォルト) — CSV ファイルは TB_ExLabelUtils に組み込まれているため、CSV フォルダを維持する必要はありません。ただし、各変更には TB_ExLabelUtils モジュールのビルドが必要となるため、CSV ファイルを迅速に変更することはできません。
開発中はいつでもモードを変更できます。BimRv/Extensions/TB_ExLabelUtils/CMakeLists.txt ファイルで、ENV{EMBEDED_CSV} 変数を使用して TB_ExLabelUtils のビルドモードを制御します。
- 1 ("SET(ENV{EMBEDED_CSV} 1)") に設定されている場合、組み込みモードが使用されます。
- 0 ("SET(ENV{EMBEDED_CSV} 0)") に設定されている場合、通常モードが使用されます。
サンプル実装は、Extensions/TB_ExLabelUtils/BmSampleLabelUtilsPE.h および Extensions/TB_ExLabelUtils/BmSampleLabelUtilsPE.cpp ファイルにあります。