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 文件中。