基于AutoCAD自由曲面的开发与应用①

2018-06-28 07:22,,,
关键词:分点弦长样条

, , ,

(武汉大学土木建筑工程学院,湖北 武汉 430072)

0 引 言

随着建筑美学与建筑力学的融合,复杂曲面在建筑行业的应用越来越广泛。曲面不再局限于传统的能用函数表达的解析曲面,出现造型多变、富有动感的自由曲面,网格划分美观流畅,具有强大的视觉效果。而AutoCAD是目前国内外广泛使用的计算机辅助设计图形处理软件,具有开放的结构体系,用户可以结合AutoCAD二次开发的特点和自身需求,开发属于自己的CAD系统[1]。ObjectARX是基于C++语言为基础,支持面向对象进行编程,是使用最为广泛一项AutoCAD二次开发工具。袁文辉[2]在AutoCAD中实现对实体边界曲面数据的访问,用于在数控加工中生成和验证刀具路径。许俊等[3]基于以AutoCAD2007开发平台的钢结构设计软件USSCAD,实现了空间复杂曲面结构的参数化建模。

本文基于AutoCAD2007进行二次开发,使用ObjectARX技术,对自由曲面进行数据访问,针对获取曲面上的曲线和由点生成曲面两个方面进行研究,实现了对自由曲面的边界曲线的提取、曲面分解成曲线、曲线投影到曲面上和通过三维点阵拟合自由曲面等功能。

1 NURBS曲面

用NURBS方法来表示曲线和曲面具有显著的优越性[4],在形状定义方面有很强大的功能,同时能为自由曲线、曲面的精确表达提供统一的数学形式。AutoCAD系统中的自由曲面就是采用三次NURBS方法表示的[5]。NURBS通过控制点、权因子、基函数三个因素,就可精确表示任意自由曲面和曲线,控制着曲线曲面的形状[6]。

NURBS曲面的有理分式表达如下:

式中,pi,j为呈拓扑行阵列的m×n双向网格中的第i行第j个点;i为控制点u方向的编号及u向B样条的基函数编号,i=0,1,……m;j为控制点v方向的编号及v向B样条的基函数编号,j=0,1,……n;wi,j为与点pi,j对应的权数,控制各点对构型的影响程度;Ni,3(u)为u向三次B样条基函数;Nj,3(v)为v向三次B样条基函数。Ni,3(u)和Nj,3(v)分别是由u向和v向的节点矢量按三次德布尔递推公式计算得到。

AutoCAD已经将用NURBS方法创建自由曲面的函数封装在ObjectARX函数包中,用B-rep方法储存供用户读取和编辑操作。

2 曲面定向生成曲线

2.1 提取边界曲线

对于由AutoCAD自生成的曲面或者从外部导入的可识别的曲面,通过函数判定是否为AcDbSuface类,判定成功后即可通过调用thicken()函数加厚形成实体并添加至模型空间。利用实体类的getSubentPathsAtGSMaker函数获得该实体的子实体(曲面)。通过AcBrFace类对象创建与实体相关的AcGeSurface曲面对象,调用getEnvelope函数获得该曲面拓扑矩形参数区间范围[7]。相关操作函数如下:

对于四边形边界的自由曲面,其四条边界分别对应的是u=0、u=1,v=0、v=1。将这四种情况下对应的相关参数(param值)通过evalPoint函数反射到曲面得到一系列的点,利用这一系列的点可生成三次样条曲线,即为自由曲面的边界。

对于圆形边界类曲面,在某条边界上所有参数点映射得到均为同一点,即第四条边界曲线为一个点。对于圆环类曲面,当u或v中只有一向闭合时,只有三条边界曲线(存在两条边界曲线重合);当u、v向均闭合时,只存在两条边界曲线(边界曲线两两重合)。

//getSubentPathsAtGSMaker: 获得实体对象的子实体函数

//lowerBound: 获得曲面参数域的下边界函数

//upBound: 获得曲面参数域的上边界函数

//isClosedInU: 判断曲面是否在u向闭合

//isClosedInV: 判断曲面是否在v向闭合

//evalPoint: 根据拓扑参数反射得到曲面上对应点的函数

2.2 曲面生成等分线

2.2.1 曲线等分

如图1所示,将曲线按弦长进行等分,曲线等分后各段的弧长基本一致。按等弦长划分曲线,其基本流程如图2所示。

以一条曲线等分成10份为例,其基本步骤如下:

1)通过将曲线等分成一定数量的点,求出相邻两点的距离值,将所有距离值相加即可得到曲线的近似长度。将曲线的近似长度除以10,即可得到初始杆件长L。考虑到后期修改杆件长度,同时求出将曲线分为9段和11段的初始杆件长,分别记做Lmax与Lmin。

2)将参数域值等分成10份,作为△u=0.1,用以调整参数值。初始点Pt1为参数值等于0的点,Pt2点的参数值初始设为0.1,并将其参数域范围设置为(umin,umax),umin=0,umax=0.1。

3)求出Pt2与Pt1之间杆件的长度l。若l>L,则保证umin=0,umax=0.1;若l

4)求出Pt2的正确坐标后,将Pt2作为初始点,寻找Pt3,使其满足两点的距离等于L。

图1 曲线弦等分

图2 曲线弦等分流程

5)当迭代完毕后,求出最后一个节点与曲线的终点的距离。若若共有n+1个等分点,且最后一段的长度小于允许的长度误差?,则将最后一个等分点替换成曲线终点,曲线等分完成。若是等分点数目小于n+1,则说明L取大了,需要减小,L的新范围为(L,Lmin);若是等分点数目大于n+1或者等分点数目等于n+1但最后一段的长度超出误差范围,则说明L取小了,L的新范围为(Lmax,L)。同样采用二分法不断的确定新的L,直至满足判断2。

按等弦长划分可以将曲线均匀的等分,每段的弦长均相等。但是按弦长等分时,若是曲线的曲率变化太大,所有等分点连接形成的新曲线与原有的曲线存在一定的偏差,可按等分u向值来划分曲线,但每段的弦长长度有差异。

2.2.2 曲面分解成曲线

将曲面分解形成一系列的等分曲线,通过操作曲线组可以达到将曲面划分网格的目的。可实现沿曲面的u或v向生成等分曲线,以生成u向曲线为例,假设生成n条曲线:

1)将AcDbSurface转换成AcGeSurface,获得该曲面拓扑矩形参数区间范围。

2)根据曲面参数域的上下边界,分别生成v=0,v=1/(n-1)…v=1所对应的n条曲线。

3)将所有曲线按弦长等分成n-1段,将每条曲线对应的n个等分点存入相应的数组之中。

4)按顺序提取每个数组之中的第k个值,存入一个新的数组之中,构成第k条NURBS曲线。

为生成u向的曲线,首先在程序内部生成v向的曲线,然后按弦等分获得等分点,通过等分点构造新的曲线。通过这一过程可使得生成的曲线在v向的间隔相对比较均匀,若是将u向的曲线也按弦长等分,即可形成比较均匀的网格。图3为一自由曲面生成曲线的实例。

图3 自由曲面分解实例

2.3 曲线投影

ObjectARX提供的AcGeCurveSurfInt类是用来存储一条3d曲线与曲面表面交集的数据。利用AcGeCurveSurfInt类的intPoint函数可以方便的返回AcGeSurface曲面与曲线的交点。将曲线分解成一系列的点,构造新的曲线与曲面相交,得到一系列的交点构造新的曲线,即可实现曲线投影至曲面。曲线投影的基本流程如下:

1)选择相应的目标曲线与曲面。将曲面转换成可操作的AcGeSurface曲面。

2)指定投影方向的向量a。

3)将目标曲线按u值等分成300个点。构造通过等分点且方向向量为a的直线(AcGeLine3d类)。

4)求出每条构造直线与曲面的交点,将这些点按顺序存入数组之中,生成一条样条曲线,即为曲线在曲面上的投影曲线。

当需要的投影的目标曲线相对较短时,在曲面上的投影曲线无法与曲面边界相交。在进行投影过程中,可选择延长目标曲线,保证投影的曲线与曲面边界有交点。曲线延长的算法如下:

1)将曲线等分成100点,并按顺序存入数组ptarry。

2)获取曲线首尾两点的切线斜率。曲线两端沿切向方向往外延伸L/20(L为曲线的长度),生成新点pt1、pt2,分别存入数组ptarry1、ptarry2。

3)将pt1、pt2投影至曲面。如果存在投影点则继续(2)步骤。如果不存在投影点则停止延伸。

4)假设最后停止延伸时的pt1= ptarry1[n],则上一点为ptarry1[n-1]。采用二分法不断缩小两点之间的区间,即可得到边界交点pt1。同理可得到末端与边界的交点pt2。

5)通过曲线点的顺序,将数组ptarry、ptarry1、ptarry2合并,构造新的曲线投影至曲面。

将投影至曲面上的第一条曲线分解为100个点,沿平移方向平移指定距离(平移方向为该点的切线方向与投影方向的叉积),构成新的目标曲线,投影至曲面。以新生成的曲线为目标曲线,重复上述平移投影操作,可生成覆盖整个曲面的一系列曲线。以一条直线为投影曲线,投影至一封闭曲面,将得到如图4所示的曲线组。

图4 曲线投影至曲面

3 网格划分应用

一般自由曲面的网格划分都是采用映射法。映射法原理简单,将参数域的网格映射回物理空间,在曲面上生成网格。映射法虽然运算速度快,但易出现网格失真[8],如图4所示。而获得曲面上的曲线,将曲线按弦长等分,将所有的等分点按一定顺序连接形成网格,包括形成三角形网格和四边形网格,如图5~图7所示。

图6 曲线按弦等分生成三角形网格

当曲面尺寸发生较大的变化时,可以将曲线分成几组,生成网格。各组曲线之间通过更改网格形式和拓扑关系进行过渡,使网格划分更均匀,如图8所示。

4 点阵形成曲面

4.1 生成机制

AutoCAD中只要提供一系列的控制元素,包括边界曲线、边界点、中部控制曲线和点,就可以通过旋转、扫掠或放样的方式生成自由曲面。其中放样曲面的控制元素是经向曲线和纬向曲线。通过合理的点阵即可形成一系列的曲线作为放样曲面的控制元素,生成自由曲面。基本流程如下:

1)读入控制点坐标,每行的控制点形成曲面经线。将每条曲面经线的首尾控制点分别存储在对象标识符容器。利用曲面经线的首尾点,形成两条曲面纬线并存入对象标识符容器中。

图7 球面沿两正交投影线投影形成网格

图8 曲面分段划分网格

2)声明AcDbLoftedSurface类(放样曲面类)对象。根据给定的经向曲线与纬向曲线调用createLoftedSurface()函数形成空间放样曲面。

3)加厚曲面形成三维实体AcDb3dSolid,用getSubentPathsAtGsMarker()函数获得子实体路径。

4)声明AcBrFace类对象,调用set()函数指向子实体所代表的曲面。实体的第一个曲面即为用于拟合的曲面。

5)调用getSurface()函数获得实体相关的曲面对象,并对其进行操作。

通过三维点阵生成曲面,可以通过修改点阵中的具体点的数值来修改曲面的形状。与手动绘制多条样条曲线然后放样形成曲面相比,要更加快捷,便于修改。

4.2 风荷载拟合

在工程中,异形屋面的风压无法按荷载规范计算,需要进行风洞试验。但风洞试验无法得到屋面所有节点的风压,一般假设风压测点处周围节点的风压数值与该测点一致,或者使用三维插值[10]来拟合风压分布。

自由曲面是通过三次样条曲线拟合而成,三次样条曲线又是通过一系列的点拟合而成。使用三维点阵生成自由曲面,利用其三次样条插值的特性,可以用来模拟风压分布。以风洞试验的结果形成三维点阵(点的X、Y坐标表示位置,Z坐标表示风压大小),生成覆盖整个屋面结构自由曲面来拟合风压分布,得到所有节点的风压值。

5 结 论

基于AutoCAD2007开发平台,使用ObjectARX技术对NURBS曲面进行了二次开发,主要结论如下:

1)实现了提取自由曲面边界线、生成自由曲面等分线、曲线投影至曲面等功能。

2)实现了曲线按弦长等分功能,通过操作生成的覆盖自由曲面的曲线组,可划分出较好的网格。

3)通过三维点阵生成自由曲面,不仅提高了自由曲面建模和修改的效率,也可用于处理风洞试验数据。

参考文献:

[1] 方贵胜, 王建军.AutoCAD二次开发技术及其应用研究[J].机床与液压, 2007, 35(6): 186-212.

[2] 袁文辉.AutoCAD中实体曲面边界数据的提取及应用[J].机械研究与应用, 2001, 14(3): 44-48.

[3] 许俊, 杜新喜, 孟仲永, 等.基于AutoCAD的空间复杂曲面结构参数化建模[J].工业建筑, 2014, 44(S): 383-387.

[4] Gao B, Hao C, Li T, et al.Grid Generation on Free-form Surface Using Guide Line Advancing and Surface Flattening Method [J].Advances in Engineering Software, 2017, 110(C):98-109.

[5] 杜新喜.大跨空间结构设计与分析[M].北京, 中国建筑工业出版社, 2014.

[6] 施法中.计算机辅助几何设计与非均匀有理B样条[M].北京: 高等教育出版社, 2001.

[7] 屈振生, 何恒利.ObjectARx应用程序开发AcBr与AcGe类库的应用[J].计算机应用, 2001(7), 66-67.

[8] 丁慧.自由形态空间网格结构的网格设计方法研究与实现[D].浙江大学,2014.

[9] 丁慧, 罗尧治.自由形态网壳结构网格生成的等参线分割法[J].浙江大学学报(工学版), 2014, 48(10): 1795-1801, 1834.

[10] 张慎, 陈兴, 李霆.计算机技术在大跨度屋盖结构风洞试验数据处理中的应用[J].建筑结构, 2011, 41(7): 106-110.

猜你喜欢
分点弦长样条
浅谈圆锥曲线三类弦长问题
对流-扩散方程数值解的四次B样条方法
来自低谷的你
定比分点之换底分点伸缩法
五禽戏“动作节分点”划分与学练建议(三)
弦长积分的极限性质与不等式
三次参数样条在机床高速高精加工中的应用
三次样条和二次删除相辅助的WASD神经网络与日本人口预测
基于样条函数的高精度电子秤设计
巧用分点坐标公式解等差数列题