OpenCASCADE STEP Color
Abstract. STEP AP214的STEP中是带有颜色信息的,OCCT可以读取其中的颜色信息。本文介绍一种比官方XCAFDoc_ColorTool更方便的获取方法。
Key Words. OCCT, STEP, Color
1. Introduction
STEP是通用格式,常用的3D软件都可以打开,用于不同的软件之间相互交流之用。OCCT的Data Exchange模块支持STEP格式的读写功能,其中支持STEP的AP203和AP214版本,这两者有什么区别呢?下面从网上摘取如下解释:
应用协议(APs: Application Protocol)是用来交换数据。每种应用协议属于一个不同的应用领域。例如,AP227属于空间装置技术和包含几个实体属于这个区域,如管道Pipe或弯头Elbow。此外,这些APs使用某些公共实体称为通用资源,如几何和拓扑结构,定义实体模型。
AP203适用于机械零件和组件的表示。AP214适用于数据的表示有关汽车设计。今天AP203文件通常包含边界表示模型、装配数据和数量有限的其他产品信息。
AP214文件通常包含颜色,层,和通用资源。边界表示法的模型是一个CAD模型代表它的边界。例如,一个表面模型由只有表面使用,使模型。固体模型包括几何信息,如表面,曲线,并指出,和拓扑信息,比如边缘,顶点,面临着。几何信息提供了数据模型的形式,和拓扑信息提供这些几何元素之间的连接性和几何元素的程度。
相同点:AP214 AP203均支持的实体、面的输入和输出。
区别是:STEP AP203 标准不具有任何颜色,AP214标准具有颜色的。
缩上所述,当以AP203应用协议保存STEP后,只保存了几何模型,没有颜色数据。当需要在STEP中体现颜色,就需要以AP214来保存。
为了更好的显示STEP模型或者需要将STEP中的模型及颜色转换到其他格式,需要获取STEP中的颜色信息。本文主要介绍如何在OCCT中读取AP214的STEP中的颜色信息。
2. STEP in Draw
在Draw Test Harnes中对应AP203和AP214分别有两个命令来读取STEP文件:
l stepread:对应AP203协议,只读取STEP中的模型;
l ReadStep:对应AP214协议,能读取STEP中的模型、颜色、组装结构等;
通过命令ReadStep读取进来的模型,可以显示颜色:
从ReadStep命令提示中可以看出,读取AP214的STEP需要用到OCCT的应用程序框架中的文档。即需要使用Extended Data Exchange(XDE)来读取。
3. Access STEP Color
在XDE中可以读写模型的颜色信息,支持的三种颜色类型为:
l Generic Color (XCAFDoc_ColorGen) 通用颜色
l Surface Color (XCAFDoc_ColorSurf) 曲面颜色
l Curve Color (XCAFDoc_ColorCurv) 曲线颜色
在XDE文档中,颜色是通过类XCAFDoc_ColorTool来管理的,即通过这个类可以来设置、获取每个Label的颜色,包括Label的子Label。可以通过类的函数IsSet()来检查一个节点是否设置了指定类型的颜色:
获取一个节点或模型颜色的方法如下:
使用这些函数当然可以获得STEP中模型的颜色信息,但当模型很大,而且还带有复杂的装配结构时要求就高了,需要你了解CAF中的数据结构,对装配结构进行遍历,还要处理子节点的模型变换。既然OCCT的DRAW中可以显示出带颜色的STEP模型,说明OCCT中有现成的功能。怎么找到这个功能呢?还是要从DRAW中去找。
4. OCCT Solution
对于有一定开发经验的OCCT开发者,我建议使用或开发OCCT的流程是:首先在DRAW中,利用Tcl脚本来实现原型或检验一些功能。其次才是写C++代码。虽然OCCT面向对象做得很好,但是有些类的参数设置不当,得到的结果也并非所愿。而在DRAW中就可以很容易地来调整一些参数,方便查看结果。如果在DRAW中的结果与期望一致,还可以查看DRAW中相关命令的源码,看官方的使用方法。
在DRAW模块中找到XDE读取STEP的命令实现源码:ReadStep
可以看官方使用类STEPCAFControl_Reader来读取STEP文件。而显示XDE的文档使用命令XShow,实现源码如下:
从上图可以看到,官方在这里已经不用XCAFDoc_ColorTool来处理其中的颜色了!将其注释掉啦。那么官方是怎么处理其中的颜色呢?通过Debug跟踪源码,可以发现是使用了类XCAFPrs_AISObject,核心算法实现是在类的函数void XCAFPrs_AISObject::DispatchStyles (const Standard_Boolean theToSyncStyles)中,如下图所示:
XCAFPrs::CollectStyleSettings()函数是个递归函数,用来处理STEP中装配结构中的颜色及模型变换。
5. Conclusion
综上所述,若想获取STEP中模型对应的颜色,只需要用类XCAFPrs_AISObject即可,也不需要考虑子节点的模型变换问题,OCCT已经为你考虑并处理好了。
Draw的源码是个藏宝库和百科书,若有问题可以先在Draw中测试,若满足需求,进而可以找到官方的源码实现。