内容发布更新时间 : 2024/11/14 17:41:15星期一 下面是文章的全部内容请认真阅读。
1 概述 Open Cascade来创建一个3D模型,目的并不是介绍所有的Open Cascade类,而是对Open Cascade 有个基本了解; 本示例讲述如何使用1.1 基本要求 要求有使用C++的经验。 从编程角度来说,Open Cascade提供了高效的模型库、方法和函数,来进行C++开发。利用这些资源,可以开发出稳定的应用程序。 1.2项目 在这里利用3D几何模型工具提供的类创建一个瓶子,如下图所示: 在这里,会将每一步的在一个函数里生成。函数的完整的源代码在程序中,有一个MakeBottle函数。这个函数在Tutorial/src/MakeBottle.cxx文件中。 1.3 项目说明 首先,定义瓶子的一些参数: 内容 瓶高 瓶宽 瓶厚 参数值 70mm 50mm 30mm 现在,假定世界笛卡尔直角坐标系的原点位于瓶子底部的中心。 参数名称 MyHeight MyWidth MyThickness
创建这个模型需要四步:
? 创建瓶子的外形; ? 创建瓶子体;
? 创建瓶颈上的螺纹; ? 合并生成瓶子;
2 创建瓶子外形
2.1 定义关键点
为了创建瓶子的外型,第一步是生成特征点,这些点的坐标位于
XOY平面
内,如下图所示,用这些点来生成瓶子的几何外形:
Open Cascade中,有两个类来描述3D点的X,Y,Z坐标。
? gp_Pnt类
? 通过句柄分配一个临时的
Geom_CartesianPoint类;
句柄就是可以自动分配内存的指针类型。那么到底在应用程序中哪种类合适呢?一般的做法是:
? gp_Pnt是按值传递,和其它对象一样,有
固定的生命周期;
? Geom_CartesianPoint是按句柄分配,可以
多次引用,有长的生命周期;
由于现在定义的这些点只是在生成瓶子的外形时有用,生命周期有限,因此,选择使用gp_Pnt类。
在
定义一个gp_Pnt对象,只要定义点在世界坐标系的X,Y,Z坐标值就可以了。 gp_Pnt aPnt1(-myWidth / 2. , 0 , 0); gp_Pnt aPnt2(-myWidth / 2. , -myThickness / 4. , 0); gp_Pnt aPnt3(0 , -myThickness / 2. , 0); gp_Pnt aPnt4(myWidth / 2. , -myThickness / 4. , 0); gp_Pnt aPnt5(myWidth / 2. , 0 , 0); 如果使用Geom_CartesianPoint类,语法会有点不同,所有对象按句柄分配,需要使用标准C++的new关键字,如下所示: Handle(Geom_CartesianPoint) aPnt1 = new Geom_CartesianPoint(-myWidth / 2. , 0 , 0); 一旦分配了对象,就可以使用它们的方法。再重复一下,语法和C++一样,比如,为了得到一个点的X坐标: gp_Pnt aPnt1(0,0,0); Handle(Geom_CartesianPoint) aPnt2 = new Geom_CartesianPoint(0 , 0 , 0); Standard_Real xValue1 = aPnt1.X(); Standard_Real xValue2 = aPnt2->X(); 2.2 外形轮廓:定义几何体 利用前面定义的点,可以计算瓶子几何外形的一部分。如下图所示,它由两个线段和一个圆弧组成。 myImageBottle08 为了创建这个实体,需要定义一个数据结构,来实现3D几何对象,可以在Open Cascade 的Geom开发包中找到。 一个Open Cascade开发包是一组类。这一组类完成的功能相同,或者结构类似,Open Cascade类的前面的名称和包的名称一样,比如,Geom_Line类和