eryar 阅读(88) 评论(0)

OpenCASCADE STEP Color

eryar@

 

Abstract. STEP AP214STEP中是带有颜色信息的,OCCT可以读取其中的颜色信息。本文介绍一种比官方XCAFDoc_ColorTool更方便的获取方法。

Key Words. OCCT, STEP, Color

1. Introduction

STEP是通用格式,常用的3D软件都可以打开,用于不同的软件之间相互交流之用。OCCTData Exchange模块支持STEP格式的读写功能,其中支持STEPAP203AP214版本,这两者有什么区别呢?下面从网上摘取如下解释:

应用协议(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中读取AP214STEP中的颜色信息。

2. STEP in Draw

Draw Test Harnes中对应AP203AP214分别有两个命令来读取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中的数据结构,对装配结构进行遍历,还要处理子节点的模型变换。既然OCCTDRAW中可以显示出带颜色的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中测试,若满足需求,进而可以找到官方的源码实现。


为了方便大家在移动端也能看到我的博文和讨论交流,现已注册微信公众号,欢迎大家扫描下方二维码关注。
Shing Liu(eryar@)