[返回博客](/cn/blog) # 在 Teigha PRC 中使用颜色

Alex Rumjantsev 十一月 24, 2017 [\#prc](/cn/blog/tag/prc) [\#export](/cn/blog/tag/export) [\#Example](/cn/blog/tag/example)

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

#### Teigha PRC 数据库组织

每个文件结构都有全局颜色和样式数组。

```
PRCFile
     OdPrcFileStructure 1
     globals().colors()
     globals().category1LineStyles()
  OdPrcFileStructure 2
     globals().colors()
     globals().category1LineStyles()
  OdPrcFileStructure 3
     globals().colors()
     globals().category1LineStyles()
…

```

颜色数组是 R、G、B 值的数组，每个值的范围都在 0-1 之间。

样式数组是 OdPrcObjectId(s) 的数组，包含文件结构样式中使用的所有 OdPrcObjectId(s)。

颜色应添加到颜色数组中，然后颜色在 colors() 数组中的索引可用于样式对象。根据 PRC 标准，索引是 0、3、6、9——双精度数组中 R 值的索引。

```
R - 0
G
B
R - 3
G
B

```

在 Teigha PRC 4.3.0 版本中，与颜色支持相关的方法进行了重新设计。现在，颜色的“索引”是 0,1,2,3…—— 数组中颜色的索引。

{R,G,B} - 0

{R,G,B} - 1

还添加了一些辅助方法。

#### 继承自 OdPrcGraphics

继承自 OdPrcGraphics 的 Teigha PRC 类通过以下方式处理颜色：

```
OdPrcObjectId & OdPrcGraphics.styleId();

```

样式 ID 应使用 OdPrcCategory1LineStyle 对象的 OdPrcObjectId 进行初始化。

代码示例：

```
OdPrcObjectId styleId;
styleId = OdPrcCategory1LineStyle::createByColor(1, 0, 1, *curFileStructure);
pBaseWithGraphics->styleId() = styleId;

OdPrcObjectId OdPrcCategory1LineStyle::createByColor(double r, double g, double b, 
 OdPrcFileStructure &postToFileStructure, bool preventColorDuplication)

```

OdPrcCategory1LineStyle::createByColor 是一个辅助方法，执行以下操作：

- 检查 R、G、B 值是否在 0-1 范围内。
- 将新颜色的 R、G、B 值添加到 globals().colors() 数组中。
- 创建新样式，将其添加到文件结构中，并将其添加到 category1LineStyles() 中。
- 为新样式分配颜色索引。
- 返回新样式的 ID。

如果 preventColorDuplication = true，则当 colors() 数组中已存在具有相同 R、G、B 值的颜色时，不会添加新颜色。

#### OdPrcCategory1LineStyle 级别方法

OdPrcCategory1LineStyle 类中还有一些与颜色相关的方法。

```
void setColor(OdPrcColorIndex colorIndex = OdPrcColorIndex::kUninit);

```

colorIndex 是 globals().colors() 数组中 R、G、B 颜色的索引。此方法也可用于将颜色重置为未分配的值。

```
void setColor(double r, double g, double b, bool preventDuplication = false);

```

将 R、G、B (0-1 范围) 颜色值设置为样式。样式必须已添加到文件结构中，否则将抛出异常。如果 preventDuplication = true，该方法将在 colors() 数组中搜索相同的颜色，如果该颜色已可用，则不会添加新颜色。

```
OdPrcColorIndex getColor() const;

```

返回颜色索引，可用于检查颜色是否已初始化。

```
const OdPrcRgbColor &getTrueColor() const;

```

以 R、G、B 形式返回颜色，如果未分配颜色或对象不在数据库中，则会抛出异常。

#### 其他类

类似的方法已添加到使用颜色的其他一些类中。OdPrcDottingPattern、OdPrcMaterialGeneric、OdPrcSolidPattern 和 OdPrcContentLight 处理镜面、发射和漫反射颜色等属性。

## 今天就开始行动

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

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