[返回博客](/cn/blog) # Mechanical SDK：使用标准管理器（第 1 部分，共 2 部分）

Dmytro Kabenok 三月 07, 2019 [\#standards](/cn/blog/tag/standards) [\#mechanical](/cn/blog/tag/mechanical)

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

AcmStandardManager 提供了与标准交互的功能，并充当 AcmStandard（所有“全局”机械标准的基类）和 AcmSymbol（机械实体（如 AcmFCF、AcmTaper、AcmBalloon 等）的基类）相关类之间的桥梁。该管理器主要用于创建机械符号时，以获取符号的适当设置，无论其位置如何。

此处使用“全局”一词是因为除了这些标准之外，还有符号标准。符号标准存储特定机械符号的一组参数，特别是用于提供图形。例如，AcmTaperStd 标准包含 AcmTaper 符号的数据。至于 AcmStandard 类，它充当一个容器，用于保存所有与符号相关的类的对象。

#### 访问管理器

要使用 AcmStandardManager，只需包含以下文件：

```
#include "AcmStandardManager.h"
```

并调用此函数：

```
AcmStandardManagerPtr pStdMgr = getAcmStdMgr();
```

#### 获取标准的 ID 或名称

AcmStandardManager 提供了相当多的方法来获取标准。

获取特定标准的ID最简单的方法是调用 AcmStandardManager::getStd 方法，并传入以下参数：

- stdId – 所查找标准的 OdDbObjectId。
- stdName – 标准名称。
- pDb – 数据库指针。

如果图中没有此类标准，则返回 eInvalidInput。

```
OdDbObjectId stdId;
OdString stdName(L"DIN");
Acm::ErrorStatus errorStatus = pStdMgr->getStd(stdName, stdId, pDb);

```

要获取当前标准的名称，请调用 AcmStandardManager::getCurrent 方法，并传入 OdString 和数据库指针作为参数。如果未正确设置当前标准，它将返回 eAcMeFail 结果。

```
OdString currStdName;
errorStatus = pStdMgr->getCurrent(currStdName, pDb);

```

还有另一种获取当前标准的方法，但这种方法返回的是标准的标识符。如果您将布尔标志 bCreate 设置为 true（默认设置），并且数据库中不存在该标准，则会创建并使用默认值对其进行初始化。

```
OdDbObjectId currStdId;
errorStatus = pStdMgr->getCurrent(currStdId, pDb, true);

```

如果需要获取数据库中所有标准标识符的数组，请使用 AcmStandardManager::getStandards 方法。如果数据库不包含任何标准，则返回 eStandardIsNotLoaded 作为结果。

```
OdDbObjectIdArray stdIds;
errorStatus = pStdMgr->getStandards(stdIds, pDb);
```

AcmStandardManager::getAllStandardNames 方法用数据库中存在或可供创建的所有标准的名称填充数组。

```
OdStringArray stdNames; 
errorStatus = pStdMgr->getAllStandardNames(stdNames);
```

AcmStandardManager 还提供了 getDefaultStd 方法，该方法返回默认标准的名称。该值取决于为数据库设置的测量单位。如果测量单位设置为 OdDb::kMetric，则默认名称为“ISO”，否则为“ANSI”。基本上，此方法用于为新数据库创建默认标准或将通用数据库转换为机械数据库。

```
OdString defaultStdName;
pStdMgr->getDefaultStd(defaultStdName, pDb);

```

#### 将标准设置为当前

AcmStandardManager 有两种方法可以将标准设置为当前标准。

第一种方法将标准的标识符和数据库指针作为输入参数。如果输入的 OdDbObjectId 不是标准的ID，或者标准不在数据库中，则返回 eBad 或 eObjectNotInDatabase 作为结果。如果旧的当前标准是 ANSI 或变成了 ANSI，则可以更改为数据库设置的测量单位。它还会更新数据库中的全局剖面和详细视图样式。

```
OdDbObjectId newCurrentStdId = // get stdId, for example by using getStd method
errorStatus = pStdMgr->setCurrent(newCurrentStdId, pDb);

```

第二种将标准设置为当前的方法将 OdString 值和数据库链接作为输入参数。如果输入的标准名称有效但数据库中不存在该标准，则会创建该标准，使用默认值进行初始化，并将其设置为当前标准。

```
OdString newCurrentStdName(L"BSI"); 
errorStatus = pStdMgr->setCurrent(newCurrentStdName, pDb);

```

本系列的下一篇文章将介绍添加标准以及对标准执行各种操作。

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

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