APP下载

基于Open CASECADE的自由曲面法向量计算算法*

2021-03-04汪雨蓉

甘肃科技 2021年22期
关键词:样条曲面向量

汪雨蓉

(杨凌职业技术学院机电工程分院,陕西 杨凌 712100)

Open CASCADE(简称OCC)是基础类、建模数据、建模算法、应用框架、可视化和数据交换6 大模块[1-2]集于一体的一个软件开发平台,每个模块由多个工具箱组成,每个工具箱由一个或者多个包组成,每个包则由若干个不同的类组成,比如一个几何包包含点类、线类、面类等。

OCC 几何功能丰富,拥有的开源函数库使用免费,实现灵活,定义的函数算法能够实现面向对象的C++编程,提供的OCAF(Open CASCADE Application Framework)能够帮助开发人员通过搭建算法框架,从底层完成二维或三维模型的建模、各种曲线建模、各种曲面建模、布尔运算、模型标准化、模型显示等功能,实现CAD/CAM/CAE 技术相关的快速开发,为用户使用和开发提供便利服务。但目前没有专门针对该函数库的学习书籍,开发难度相对较大,需要熟练运用相应的程序开发工具,如C++,并能够清楚了解如图1 所示的结构模块。

用户追求现代产品的外观美感,使得自由曲面的设计生产应运而生,但在实际工程中,高自由度和变化多样的形状对曲面的应用增加了相当的难度,其中曲面上某点的法向量计算是自由曲面应用的关键。学者们通常采用传统的数学微分几何法[3]、离散三角形面片法和棱边分裂法[4]等研究曲面某点的法线方向。李都宁等[5]结合微分几何法、曲面的离散化三角形法和Open CASCADE 中的曲面属性,分析Open CASCADE 曲面法线方向的计算方法。本文运用OCC 函数库,在OCC 和C++搭建的软件平台上用边界表达法构造B 样条曲面,分析B 样条曲面的曲率特征,根据高斯曲率在曲面上取点,计算该点的法向量,设计了自由曲面法向量计算算法,为自由曲面法向量的精确计算提供了可行思路如图1 所示。

图1 OCC 结构模块

1 OpenCASCADE 的自由曲面表达

OCC 函数库中,建模数据模块的Geom 几何包,提供了能够表达三维空间曲面及数学计算的各种几何曲面类,主要包括有界曲面类Geom_BoundSurface,简单曲面类Geom_ElementarySurface,偏置曲面类Geom_OffsetSurface,扫略曲面类Geom_ElementarySurface 等。文章用面向对象的编程思想,使用有界曲面类的子类Geom_BSplineSurface 研究自由曲面的法向量。

OCC 构造的曲面对象是用边界表示法表达的B样条曲面(如图2 所示),通常不采用有界曲面类生成B 样条曲面,而是通过其他方法,比如通过建模算法模块的几何工具GeomAPI 类包,使用几何造型算法类GeomAPI_PointsToBSplineSurface 输入点组,以参数驱动构造B 样条曲面,再调用有界曲面类Geom_BSplineSurface 的方法访问B 样条曲面的属性。建模算法模块的拓扑算法包BRepBuilderAPI 提供了BRep 拓扑数据结构的应用程序编程接口,可将几何对象转换成拓扑对象,构造出建模数据模块TopoDS 拓扑类包的对象,形成拓扑数据结构,再通过数据交换模块后实现构造模型的可视化。

图2 OCC 构造的B 样条曲面

2 算法实现流程

自由曲面法向量计算算法主要包括三维曲面造型、曲面上取点、计算点的法向量等,算法的实现流程如图3 所示。

图3 算法实现流程

首先,利用OCC 函数库和微软基础类库(MFC)框架在C++环境中搭建一个系统开发平台;其次,通过该平台选择曲面类型,可以在软件平台读入其他造型软件生成的各种格式的三维模型,也可以根据OCC 的建模算法模块,选择合适的建模类函数在平台上输入驱动参数构造模型,结合可视化模块显示出B 样条曲面模型;然后,根据曲面模型的区域特征提取曲面点,计算曲面点的法向量并输出。

3 自由曲面法向量计算算法

3.1 搭建系统平台

在Visual Studio 编程环境中,基于Open CASCADE 函数库,应用OCC 提供的OCAF 应用框架搭建开发系统平台。OCC 搭建的系统平台主要包括框架的搭建、功能界面的可视化和基本几何功能的开发。开发的系统界面如图4 所示,由上至下依次包括主框架、主菜单、快捷菜单栏、工具栏、显示区和状态栏,主菜单包含若干子菜单,开发者可以在该系统的已有框架中添加新功能,并在主菜单的下拉子菜单里使用相应的功能命令。

图4 OCC 开发的系统界面

3.2 构造曲面模型

算法实现流程中,可以通过读入各种格式的模型获取曲面,也可通过构造函数生成自由曲面。OCC 绘制曲面模型,需要调用函数库提供的曲面构造类函数GeomAPI_PointsToBSplineSurface,输入一个点组arr,通过访问实现方法输出B 样条曲面。为便于研究,考虑曲面的一般性,B 样条曲面参数u、v 的取值范围设为单位正方形,即0≤u≤1,0≤v≤1。实现图2 所示的曲面模型,构造的主要内容有以下3 点。

(1)定义生成曲面的点组。根据需要声明一个4×4 的二维数组变量,用数学工具箱的gp 包定义空间坐标点,数组变量调用设置数值的函数来定义变量中的每一个元素。

(2)点组构造几何曲面。调用GeomAPI 包提供的点组构造曲面的函数,在公差E 允许范围内,通过二维点组无限逼近或插值方式拟合构建B 样条曲面。该类的对象提供了一个框架:定义要构建B样条曲面的数据,实现近似算法或插值算法,并返回结果。本文在构造函数输入点组参数时,设置E=1.0e-6,每个逼近点处至少二阶连续可导。

(3)几何对象转换为拓扑对象。拓扑算法包BRep-BuilderAPI 将抽象拓扑类与几何信息关联起来,给定计算精度Tol(文中设定:Tol=1.0e-3),为BRep 拓扑数据结构提供数据转换接口,便于添加到应用程序交互环境中实现对象的可视化。

主要算法代码:

TColgp_Array2OfPnt arr(1,4,1,4);//声明生成曲面的二维数组变量

arr.SetValue(1,1,gp_Pnt(0,0,0));//调用成员函数设置数组变量中的元素

GeomAPI_PointsToBSplineSurface PntToSurf(arr,3,8,GeomAbs_C2,1.0e-6);//输入点组,设置参数,函数构造类的对象

Handle (Geom_BSplineSurface) BSplineSurf=PntToSurf.Surface();//调用成员函数构建B 样条曲面BRepBuilderAPI_MakeFace MakeF(BSplineSurf,1.0e-3);//B 样条曲面构造拓扑类的对象

TopoDS_Face aFace=MakeF.Face();//调用函数构建拓扑曲面

Handle (AIS_Shape) ais_Face=new AIS_Shape(aFace);//拓扑曲面添加到应用程序交互环境中

3.3 判别区域特征,取点计算法向量

接3.2 节,构造如图2 所示B 样条曲面具有一般性,包含凹、凸、鞍、平四种不同的区域。根据微分几何,曲面上一点P 的高斯曲率K 定义为该点最大最小主曲率Kmax和Kmin的乘积,两者的平均数定义为点P 的平均曲率M,K 和M 的数值符号决定曲面的区域类型。若K>0 且M<0,则曲面为凸区域;K>0且M>0,则曲面为凹区域;K≤0,则曲面为鞍区域。方法流程如下:

(1)定义双重for 循环遍历曲面的2 个参数U、V,确定对应点的参数值。

(2)调用计算几何曲面属性的类GeomLProp_SLProps,输入3.2 节构造的B 样条几何曲面对象和本节(1)中确定的参数U、V,并设置允许误差E=1.0e-6,用此类的构造函数定义用于计算对应点曲率值的对象。用构造对象调用类的成员函数GaussianCurvature(),计算该点的高斯曲率K,调用函数MeanCurvature()计算平均曲率M;

(3)判别高斯曲率和平均曲率的数值符号。

if(K≤0)then 曲面区域为鞍型特征;

else if(M>0)then 曲面区域为凹特征;

else if(M<0)then 曲面区域为凸特征;

else 曲面区域为平特征。

(4)根据(3)中已判别的区域特征(如图5 所示),分区域遍历曲面点,计算点的法向量。此处列举凸区域的取点(如图6 所示),继续应用(2)中GeomLProp_SLProps 类构造的对象,调用其成员函数Normal()定义一点的法向量,返回向量的三个坐标值(如图7 所示)。

图5 判别区域类型

图6 凸区域取点

图7 曲面一点的法向量坐标值

4 结论

基于Open CASCADE 开源函数库,利用OCAF向导框架在C++编程环境中从底层搭建OCC 开发系统平台,通过输入输出接口导入选定格式的曲面,或者在搭建平台上调用建模算法直接构造B 样条曲面模型,再根据曲面的高斯曲率和平均曲率判别区域特征,分区域取点计算法向量,完成自由曲面法向量计算算法的设计。文章研究对丰富OCC 函数库和探究自由曲面的属性提供了便利,也为其他相关建模研究提供参考思路。

猜你喜欢

样条曲面向量
一元五次B样条拟插值研究
向量的分解
聚焦“向量与三角”创新题
相交移动超曲面的亚纯映射的唯一性
圆环上的覆盖曲面不等式及其应用
三次参数样条在机床高速高精加工中的应用
三次样条和二次删除相辅助的WASD神经网络与日本人口预测
基于样条函数的高精度电子秤设计
基于曲面展开的自由曲面网格划分
向量垂直在解析几何中的应用