LabelUtilsプロトコル拡張

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 ファイルにあります。

今すぐ始める

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

無料で試す