Draw几乎包含了OCC的所有功能,如果会用Draw的所有命令并分析追踪其源码,那么开发使用OCC几乎没有障碍。分析每条Draw命令的实现也是阅读OCC源码,学习其API使用的比较好的方法。
一、查找Draw命令源码实现文件
Draw提供了getsourcefile命令,用于获取该命令的实现文件。以box命令为例,可获取其源码文件是:src/BRepTest/BRepTest_PrimitiveCommands.cxx
二、Box命令源码分析
用IDE打开src/BRepTest/BRepTest_PrimitiveCommands.cxx文件,很容易看出box命令的具体实现是box函数。
定位到box函数我们可以看出,前半部分是命令的参数解析,这部分比较简单不再分析。
最终创建box体是调用类BRepPrimAPI_MakeBox实现的。
这里比较有意思的一点是:变量S是TopoDS_Solid类型,而BRepPrimAPI_MakeBox并没有直接的继承关系,但编译器并没有报错。这块没看明白,有待研究。
三、BRepPrimAPI_MakeBox源码分析
创建box实体使用的是Solid函数,这个函数先创建了TopoDS_Solid对象,再向其增加Shell对象,Shell对象创建时进一步创建Face、Wire、edge、vertex。最终会形成一个树状数据结构,来表示这个体。