在 Teigha PRC 中使用颜色

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

免费试用