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 处理镜面、发射和漫反射颜色等属性。