APP下载

基于Parasolid的放样函数实现异构体模型构造

2018-01-15刘建秀

装备制造技术 2017年11期
关键词:样体水管轮廓

刘建秀

0 引言

目前三维实体的模型构造主要基于两种内核:ACIS和Parasolid。其中,Parasolid是一款功能强大的实体建模核心软件,用边界表示法对实体进行几何建模[1,3,4]。在 Parasolid 中,采用导动(sweep)和放样(loft)两种特征造型方法进行模型构造。本文详细介绍放样函数的使用方法,在VC++6.0平台上以MicrostationV8为CAD系统原型,调用Parasolid图形内核函数库的放样函数实现特殊实体的建模,该实例应用于弯肘型尾水管的三维建模,并可用于其他异构体模型构造。

1 放样

在三维建模中,放样是基于一组有规律的轮廓,对轮廓施加一定的对应关系或约束来获得光滑的放样体。因此,在放样操作中,轮廓间点的对应关系和外加约束对放样体的精确度有决定性作用。在Parasolid函数库中,实现放样的函数是PK_BODY_make_lofted_body,其原型为:

int PK_BODY_make_lofted_body (int n_profiles,const PK_BODY_t profiles [],const PK_VERTEX_t start_vertices[],const PK_BODY_make_lofted_body_o_t*options, PK_BODY_tracked_loft_r_t*constlofted_body)

其中,前三个为输入参数,n_profiles为参与放样的轮廓个数;profiles[]为参与放样的轮廓元素,如果轮廓为面元素,最终结果会生成体;如果轮廓为线元素,可以生成面;start_vertices为放样轮廓的起始点,记录轮廓间起始顶点的匹配关系,以这些起始点为基准,按照轮廓元素中点的生成顺序产生对应关系,理论上应该是一一对应,实际生产过程中,大部分情况都不是一对一的关系,具体对应关系可见第3节的介绍;options是生成放样体时可以自定义的一些属性值,其内容包括末端条件、导线、拓扑形式、弯曲度、精度等,是控制放样体质量的一个非常重要的参数;lofted_body是一个输出参数,存储生成的结果。

2 放样体的生成

本节利用第2部分中介绍的放样函数来生成放样体。在函数PK_BODY_make_lofted_body中,options是决定最终三维实体质量的关键参数,这里重点介绍这个参数。

一般先利用宏定义PK_BODY_make_lofted_body_o_m对结构体参数 PK_BODY_make_lofted_body_o_t进行初始化,将其设为默认参数,然后按需进行个性化设置。在该参数中,需要重点说明的几个成员参数是:

(1)末端条件

参数PK_BODY_loft_end_conds_t指定轮廓的末端条件,对放样轮廓的起始和终止进行约束使其符合形状要求。这是一个结构体参数,可以通过设置其成员变量PK_PARAM_periodic_t的值为PK_PARAM_periodic_yes_c约定轮廓是首尾相连的,或者为PK_PARAM_periodic_no_c设置轮廓首尾不相连;另外一个成员变量PK_BODY_loft_deriv_conds_t通过首尾轮廓时的曲率限制,可取值为K_BODY_loft_unconstrained_c无约束,PK_BODY_loft_natural_c曲率为0,以及其他值如:向量约束、面约束和平面约束[2]。

(2)顶点匹配规则

参数PK_BODY_vertex_matches_t表示顶点的匹配关系,这是一个数组,存放多个体(顶点)之间的兼容或匹配关系,其原型为:

struct PK_BODY_vertex_matches_t{int n_mappings;PK_BODY_vertex_match_t*mappings;};

在上面的结构中,n_mappings取值为轮廓的个数减1,表示以第一个轮廓为参考,考虑其他轮廓与参考轮廓的匹配关系;PK_BODY_vertex_match_t存放当前轮廓与其相邻的轮廓的顶点匹配信息,定义如下:

struct PK_BODY_vertex_match_s{PK_BODY_t profile;int n_matches;PK_BODY_one_vertex_match_t*matches;}

其中,profile表示当前轮廓;n_matches表示需要匹配的顶点个数,如果前后轮廓顶点个数相等,取其个数即可,如果不等,取最大的;顶点的对应关系存放在数组matches中,这个参数最终决定放样体质量,该结构中存放着当前轮廓的当前顶点对应着相邻轮廓的哪一个顶点,每个顶点都要设置匹配关系,可能一对一,多对一或者一对多,具体设置可见第四节中的例子。

3 程序设计及实现

本节基于VC++6.0软件平台,以弯肘型尾水管的三维造型为例,来说明parasolid中放样函数的使用。弯肘型尾水管由肘管段和出口扩散段组成,三维建模的难点在于肘管段的绘制,它是一个90°转弯的变截面弯管,进口断面为圆形,经椭圆矩形截面渐变到出口处的矩形截面,首尾截面轮廓线相差较大,且肘管段尺寸难以用理论设计,通常采用推荐的标准肘管尺寸,参数由水轮机制造厂家提供。图1为制造厂家提供的尾水管单线图,这是一个轮廓截面由圆到方渐变的尾水管模型,共20个截面,截面参数如图1所示。

图1 尾水管单线图

在参数表中,BCDE四个参数确定了轮廓在右视图中的相对位置(坐标),offset参数确定轮廓相对于中心线的偏移量(见图1左下顶视图)。W和H分别为椭圆矩形的宽度和高度,Rroof、Rfloor分别为椭圆矩形上、下圆角的半径,如图2所示。

图2 过渡轮廓(椭圆矩形截面)示意图

为了生成放样体,需要将每一个轮廓按照顺序画在以落点为坐标原点的相对位置上,然后用放样函数PK_BODY_make_lofted_body来生成体,将轮廓及其顶点分别记录在数组profiles和vertices中,需要注意的是,轮廓形状要严格按照表格中的数据来画,例如第一个轮廓为半径为4 600的圆,但是画图时需要按照图2所标注的各参数来画,也即该轮廓由四个弧段组成,如图3左图所示,并且在画轮廓的时候要注意每个轮廓的起始点和形成方向应该一致,以保证顶点匹配的正确性。

图3 轮廓示意图

首先,对图1表中数据进行分析可知,末端条件中首轮廓为圆形,尾端轮廓为矩形,且不相连,所以在定义放样参数PK_BODY_make_lofted_body_o_t options时,限制其终端条件options.end_conditions.periodic=PK_PARAM_periodic_no_c;其次,分析轮廓形式可知,轮廓变化规律为圆-椭圆矩形-矩形,在下面的内容中,为了方便讨论,记“轮廓1到轮廓2的变化规律”为“轮廓1-2”,以此类推,则顶点匹配上有几种情况:

(1)轮廓1-2为圆形-椭圆矩形,如图3所示,顶点为4-6,属于不同顶点个数的匹配;

(2)轮廓2-3为椭圆矩形-椭圆矩形(图3右图~图2),顶点为6-8,属于不同顶点个数的匹配;

(3)轮廓3-18为椭圆矩形-椭圆矩形,顶点为8-8,属于相同顶点个数一一对应匹配;

(4)轮廓18-19为椭圆矩形-矩形,顶点为8-4,属于不同顶点个数的匹配;

(5)轮廓19-20为矩形-矩形渐变,顶点为4-4,属于相同顶点个数一一对应匹配;

综上,顶点的匹配是4-6-8-4,以第一种情况为例,显然只要设置顶点的匹配规则为L1_1—L2_1,L1_2—L2_2,L1_2—L2_3,L1-3—L2_4,L1_4—L2_5,L1_4—L2_6,将此对应关系存储在数组matches中。部分关键c++代码如下:

//顶点对应关系

PK_BODY_vertex_matches_t matches;

matches.n_mappings=profileNum-1;

matches.mappings=new PK_BODY_vertex_match_t[profileNum-1];

PK_BODY_vertex_match_t match;

if(currentCount==4&&nextCount==6)

{

match.n_matches=6;

match.matches=new PK_BODY_one_vertex_match_t[6];

PK_BODY_one_vertex_match_t oneVertexMatch;

//1-1对应

currentVertex=profileVertexVec[profileIndex][0];

nextVertex=profileVertexVec[profileIndex+1][0];

.....

oneVertexMatch.profile_vertex=(PK_VERTEX_t)currentVertex;

oneVertexMatch.matched_vertex=(PK_VERTEX_t)nextVertex;

match.matches[0]=oneVertexMatch;

//2-2 对应

...

}

....

//生成体

PK_BODY_make_lofted_body_o_t options;

PK_BODY_make_lofted_body_o_m(options);

options.end_conditions.periodic = PK_PARAM_periodic_no_c;

options.matches=pMatches;

int failureCode=PK_BODY_make_lofted_body(nProfiles,profiles,vertices,&options,&loft_body)

根据上面的描述,生成的异构体模型如图4所示,其中,左边表示生成体所需要的轮廓,右边是生成的实体。在图5中,用该函数实现了一个蜗壳体的三维模型构建。

图4 尾水管放样生成体

图5 蜗壳放样体生成

4 结束语

本文详细介绍了Parasolid的放样函数及其使用方法,针对弯肘型尾水管和蜗壳体的实例,用该方法成功实现了异构体三维模型的构建,也证明了该函数可用于其他异构体建模。

[1]郑春峰,王永皎,何利力.基于 PARASOLID的CAD系统开发[J].计算机应用研究,2006,23(8):216-217,250.

[2]宋 锦,张应中,罗晓芳.基于Parasolid的导动与放样特征造型的实现[J].计算机辅助工程,2001,10(3):23-28.

[3]潘如刚,钱锦锋,陈志杨,等.基于Parasolid的CAD系统中螺旋实体的建模[J].计算机工程与应用,2003,39(31):61-63.

[4]林 焰,王忠勇,纪卓尚.基于Parasolid船体结构造型程序设计[J].大连理工大学学报,2000,40(4):473-474.

猜你喜欢

样体水管轮廓
安奇奇与小cool龙(第五回)
OPENCV轮廓识别研究与实践
发现前列腺结石怎么办?
前列腺结石是怎么回事
首席水管工
小赛和水管
扁桃体摘除与鼻内镜下腺样体切除联合治疗小儿鼾症的疗效观察
低温等离子刀辅助内镜下儿童扁桃体和腺样体切除术效果评价
高速公路主动发光轮廓标应用方案设计探讨
马虎的水管工