LabelUtils 协议扩展

LabelUtilsPE 是一个协议扩展 (PE),旨在将与标签相关的功能从核心 BimRv 功能中分离出来。它允许 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 接口的一个示例实现,支持英语。

此模块有两种模式:

  • 常规 — CSV 文件可以使用简单的文本编辑器修改,无需构建源代码。修改甚至可以在运行时进行(在首次访问其内容之前,因为之后值会被缓存,更改将无效)。CSV 文件夹必须位于 TB_ExLabelUtils 二进制文件附近,删除这些 CSV 文件可能导致运行时错误。常规模式是最初的 BimRv 实现,但不再是默认模式。
  • 嵌入式(默认模式)— CSV 文件嵌入在 TB_ExLabelUtils 中,因此无需维护 CSV 文件夹。但是,您无法快速更改 CSV 文件,因为每次修改都需要构建 TB_ExLabelUtils 模块。

您可以在开发过程中随时更改模式。在 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 天。
无风险,无需信用卡。

免费试用