[返回博客](/cn/blog) # LabelUtils 协议扩展

Yury Lebedev 十一月 24, 2022 [\#rfa](/cn/blog/tag/rfa) [\#rvt](/cn/blog/tag/rvt) [\#getting started](/cn/blog/tag/getting-started)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

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 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
