APP下载

三维线框模型生成全参数化模型方法研究

2021-03-23崔进举何丽丝王德禹

实验室研究与探索 2021年2期
关键词:线框面片型材

曹 荣,崔进举,何丽丝,王德禹

(上海交通大学船舶海洋与建筑工程学院,上海 200240)

0 引言

在船舶行业数字化设计与数字化制造的研究热潮,船舶行业逐渐引入三维设计手段,相比传统的二维平面设计,三维手段在总体布置设计过程中更加直观[1-3],无论是早期的方案论证,还是工厂的生产设计,国内外开展了大量的应用研究和实践[4-5]。船舶设计技术以及船舶CAD/ CAM/PLM 软件系统的深入应用,直接关系到船舶设计水平、建造水平的提高,也关系到整个造船行业竞争力的提高[6]。其中的代表如Tribon、NAPA、CATIA(Computer Aided Tri-Dimensional Interface Application)、SPD(Ship Product Design)等,已经在船舶领域广泛被应用[7]。CATIA作为一款在航空、汽车领域运用非常广泛的产品全生命周期平台[8],目前船舶制造领域也已经广泛使用该软件[9]。船舶设计院和各大船厂对CATIA 平台的研究仍处于探索与初步运用阶段。原先基于线框模型创建的母型船的模型如何转化到三维全参数化模型,实现原先结构知识储备的复用,成了亟待解决的问题。由于构成线框模型的主要元素是几何相关的点线面,而全参数模型是由参数规格书所驱动的模型,两类平台数据性质截然不同。然而无论哪个平台在进行船体结构建模过程中,都需要定义板及筋的厚度/规格、材质、位置及边界信息等属性。CATIA 平台为了满足用户个性化的功能定制需求,开放了大量二次开发接口[10],为用户功能定制提供了良好的理论基础和二次开发环境[11]。因此基于SPD的线框模型及属性数据,具备了高效构建CATIA全参数化模型的条件。

CATIA 是法国达索公司的产品开发旗舰解决方案,广泛应用于航空航天、汽车制造、造船、机械制造等行业,但在船舶行业的引用起步较晚[12]。在船舶详细设计过程中主要用到CATIA V6 SFD(Structure Function Design)基本结构设计模块。SFD模块运用的是全参数化建模方法,即在创建零件时,将零件的几何信息、属性信息,以参数的形式在交互界面中定义完善,CATIA平台即可通过这些参数形成三维模型。另外除了交互界面定义参数的方法,还可利用CAA(Component Application Architecture)二次开发工具来读写参数。其中的CATISfdUseFunctionFactory 工厂类中的CreatePanel()方法可以创建SFD模块中的板架;CATIStrUseStiffenerMngt类中的AddStiffener()方法可以创建板架上的筋;CATIStrUseOpeningMngt 类中的AddOpening()方法可以创建板架上的开孔。因此CAA接口可以满足高效构建船体结构模型的先决条件。

SPD作为国内自主开发的船舶设计软件,在国内以沪东中华为代表的船舶企业中广泛使用,系统模块涵盖船体、管系、风管、电气、支架、铁舾装等各专业[13]。SPD系统是基于OpenGL 图形库进行开发的造船CAD设计软件,能满足船体结构、管系、风管、电气、铁舾件、涂装等专业三维全数字化设计的需求。通过三维模型对船舶产品进行性能、结构强度、工艺合理性和制造可行性分析[14]。SPD 平台中的三维模型正是线框模型[15]。线框模型是用直线、圆、圆弧等空间棱线表达三维物体。SPD的模型以DXF的格式导出。DXF文件是CAD软件交换数据的一种文件格式,在各大CAD平台普遍使用。SPD模型属性以XML的格式导出。XML 文件易于在任何应用程序中读写数据,XML是目前各程序间数据交换的公共语言[16]。本文基于沪东中华SPD 设计软件输出的数据,利用CAA二次开发技术,实现了高效的船体结构三维线框模型到全参数化模型转化。

1 导入及读取数据方法

SPD平台几何模型支持导出dxf 格式,因此需要基于dxf中的三角面片模型重构几何面片模型,再以面片模型为支持面,构建Catia 平台SFD 模型。各零件所需的属性参数基于SPD平台输出的xml文件,因此需要逐个匹配每个零件的片面模型和属性文件。不同零件的创建方法不同,本文利用CAA 二次开发手段,分别自动构建了板、开孔及型钢等模型,其主要流程如图1 所示。

图1 模型转化流程图

1.1 导入线框模型

通过CATIA软件自带的导入功能,将线框模型数据dxf文件导入CATIA 平台,可得到初步的三维线框模型。此模型由三角面片构成,且仅仅保留了原模型的几何属性,正确地表达了各零件的空间位置和几何形状。导入线框模型后进行了一系列操作,首先需要处理的问题是线框模型是立体几何零件,即零件是有厚度的,而CATIA 平台SFG 模型是无厚度的面片模型,因此仅仅需要保留各零件理论面上的面片,去除其他面片。通过输入零件理论面,例如肋位及各平台位置,运用二次开发的工具,计算面片到理论面的距离,若距离小于1 mm 即可判定此面片为零件的理论面,删除非理论面上的面片。其次运用二次开发的工具,通过合并同一平面内且相交的三角面片,得到一整块面片模型。最后去除面片上的开孔,提取面片的轮廓线,通过填充得到无开孔的零件面片,面片处理效果如图2 所示。

图2 面片处理效果

1.2 读取属性数据

全参数化模型构建时所需要定义的零件属性数据是来源于xml文件。通过读取xml 文件,获取零件的名称、材质、类型,板厚或规格等信息。在CAITA平台上运用CAA接口中的CATIDOMDocument()类库中的成员函数,可高效地读取xml 文件中的属性数据。图3 是模型中一个零件的属性xml文件。

图中:主要关键字分别代表以下含义:“belong”,零件所属板架;“Side”,零件所在整船的空间位置,M表示靠近CL的位置;“weight”,质量,单位g;“COG”,重心位置;“material”,材质;“category”,零件类型;“thickness”,厚度;“section”,型钢规格。

图3 xml文件中的零件属性

1.3 匹配模型与属性数据

转化参数化模型的前提是将导入的线宽模型和参数数据相匹配。本文的方法是通过获取线框模型组成的零件重量重心数据,与属性文件中的重量重心属性相匹配。

实施方法:

(1)运用CATIPartRequest 类库的成员函数GetDirectBodies()获得模型中所有零件模型列表。再遍历面片列表,运用CATIMeasurableInContext 类库的成员函数GetCOG(),获取各模型的重心坐标数据,例如X=211 685.1,Y=-6 549.9,Z=8 312.1。

(2)运用CATIDOMElement 类库中的成员函数GetElementsByTagName()获取ATTRIBUTE标签,再利用函数GetNodeValue()获得COG节点下得重心数据,例如获取VALUE=“211 685.0,-6 550.0,831 3.0”,即X=211 685.0,Y=-6 550.0,Z=8 313.0。

遍历模型中所有零件重心数据与属性数据,进行一一比较。若X,Y,Z 3 个数据相差都小于20 mm,判断为匹配成功,可以确定该零件模型所需要赋予的属性。在匹配过程中会存在部分面片没有合适的数据匹配,特别是型钢,因为端切影响了零件面片的重心位置,但输出的属性数据却未考虑其影响。所以我们在用较小的差值20 进行第1 轮匹配后,放大差值到50或100 对未匹配成功的面片进行第2 轮或第3 轮匹配。由于船舶上的绝大部分型材间的重心距离都在300 mm 以上,这样的匹配方法可以保证一定的准确率。

2 转化生成板模型方法

2.1 转化生成板模型

在构建船体板架模型时,主要是定义板的类型、位置、边界、板厚、材质等信息,CATIA 3DE 平台也不例外。本文在转化板的过程中,基于已导入的三维线框模型及匹配所得的零件属性数据,利用CAA接口生成板的参数化模型,并逐步定义类型、定位、边界信息、板厚材质等属性。板模型转化效果如图4 所示。

图4 板模型转化效果

实施方法:

(1)生成板对象。首先需要在CATIA 平台中的新建参数化的板架模型对象。运用CAA 接口在SFG模块中创建一个新对象,运用CATISfdUseFunctionFactory->CreatePanel()即可新建板架对象。

(2)生成板的属性。①零件类型信息:板架的类型一般可分为内底板、甲板、平台板、肋板、横舱壁、纵舱壁等。本文中通过判断几何的空间位置,将面区分为X、Y、Z 3 个方向,分别对应的零件类型为“TransversePanel”“LongitudinalPanel”“DeckPanel”。运用CAA 接口CATIStrUseCategoryMngt->SetCategory(),即可定义零件类型信息。

②支持面信息:通常构建板是以无限大的平面为支持面,通过定义边界条件,围出一个有限大的面。本文的构建技术是以导入的面片为支持面,在不定义边界信息的情况下,即可得到一个等同于面片大小的板模型。运用CAA 接口CATIStrUsePanelSurf->SetSupport(),即可定义板的支持面信息。

③厚度信息:读取xml属性文件中的”Thickness”节点,可以快速准确的获取厚度信息。利用CAA接口CATIStrUsePlateExtrusionMngt-> GetThickness()->ValuateReal(),即可定义板的厚度信息。

④板厚朝向信息:船体结构板架厚度朝向有一定的设计要求,例如外板一律朝外,甲板一律朝上,但横舱壁、纵舱壁的朝向就需要依据船型而定。本文根据本船型的理论线数据图,将各个横向纵向位置上的板厚朝向做了数据统计。例如X=FR95,FR100,FR105…或X=100 800,104 800,108 800…的横舱壁,厚度方向朝首,其余的朝尾。所以在定义横舱壁的时候,将其支持面的坐标数据与之做比较,即可得到该横舱壁的板厚朝向信息。

⑤材质信息:读取xml 属性文件中的”Material”节点,可以快速准确的获取厚度信息。利用CAA接口CATIStrUseMaterialMngt->SetMaterial(),即可快捷的定义板的材质信息。

⑥边界信息:在零件属性文件中并不包含板的边界信息,因此采用通过判断面片间的几何关系来筛选板的边界信息。本文的方法是遍历所有不在同一方向上的零件,例如遍历X 方向上的零件,再遍历Y、Z 方向上的零件,使其两两相交,判断相交结果是否是线,若得到交线,则量取交线的长度,当交线长度大于500 mm时,即可确定此面片为板的边界条件。运用CATIStrUsePanelLimitMngt->SetLimitingObject()接口将其定义为边界对象。若其返回值是True,说明可作为边界,则继续遍历寻找下一个边界。

⑦替换支持面:通常板的支持面是一个平面plane,整档位置上板的支持面是源自坐标系中的平面,而上述方法中基于导入线框模型所创建的板,它的支持面是导入的面片surface,我们需要将位于整档位置上板的支持面片替换成为坐标系中的平面。具体方法是运用CAASfdNavigationServices::GetSRSPlane()方法获取坐标系中的XYZ 平面列表。通过CATISfdUsePanel->GetCanonicSupport()获取板的支持面,判断平面间的距离,若距离小于1 cm,通过CATIStrUsePanelSurf->SetSupport()方法将板的支持面替换为平面。

2.2 转化生成开孔特征

CATIA平台上构建结构开孔有3 种方式:①标准数据(Standard)开孔。选择开孔类型,定义开孔特征及几何位置;②草图(Sketch)开孔。利用草图功能画出开孔样式,形成开孔;③贯穿对象(3D Object)开孔。以贯穿板的对象作为输入,生成相贯线用于开孔。

本文采用第3 种方法,贯穿对象(3D Object)开孔。生成开孔效果如图5 所示。基于输入数据结合CAA开发,可以实现自动化高效创建开孔。3D Object开孔需要一个前提,即获取贯穿对象。本文的方法是从线框模型中提取开孔线,将开孔线沿垂直面片方向拉伸,可得到所需的3D Object。

图5 开孔转化效果图

手工操作的方法是运用Extract功能,点选孔的边缘,选择Point Continuity选项,可得到一条封闭的开孔线,再运用Extrude 功能,Direction 为面片本身,Dimension=50mm,便可得到一个贯穿面片的3D Object。一个分段有几十或上百个开孔,手工操作效率低。利用CAA二次开发相关的接口可以实现批量处理。

实施方法:

(1)通过接口CATIGSMUseFactory->CreateBoundary()获取面片上所有闭合的连续曲线,利用CATIGSMUseFactory-> CreateExtractSolide()提取得到特征曲线,结果至少会有一根,因为板的轮廓线也是一条闭合的连续曲线。

(2)运用CATIMeasurableCurve->GetLength()获得曲线的长度,去除周长最大的曲线(因为周长最大的闭合曲线是轮廓线),其余的便是开孔线。

(3)CATIGSMUseFactory->CreateExtrude()拉伸开孔线得到所需的3D Object。

(4)运用CAA 接口CATIStrUseOpeningMngt->AddOpening()命令在板架上新建开孔,再运用接口CATIStrUseOpening3DObject-> SetIntersectingElement()定义贯穿对象,即可实现批量开孔。

3 转化生成型钢模型

CATIA平台构建型钢模型时,需要选择对应的安装板架,定义其类型,支持面信息,边界信息及规格、材质等属性信息。生成的型钢其支持面与对应的板架相交,生成筋的轨迹线(Unlimited Trace Line),定义两个边界信息将轨迹线框定出特定长度的轨迹线(Limited Trace Line),即型钢的设计长度。若选择的支持面与板架无法相交形成交线,则无法创建此型材。因此创建型材关键是定义支持面和定义边界信息。本模型构建技术基于型材属性数据,构建继承原型材模型的属性。型材转化效果如图6 所示。

实施方法:

(1)创建型材。需要选择型材所在的板架用于创建型材。通过接口CATIStrUseStiffenerMngt ->AddStiffener(),即可新建型材对象。

图6 型钢转化效果图

(2)定义支持面。SPD 输出的筋的几何面,由于原模型定义了端切,面片几何含有开孔或者是留空削斜的几何特征。若直接利用面片与板架相交,所得的交线会比实际设计型钢模型短,导致模型错误。因此本文采用的方法将原几何面以重心为基点放大1.2~1.4 倍,以放大的面片与板架的交线为型钢支持面,通过接口CATIStrUseProfileSurfSurf->SetSecondSurface(),将其设置为型材支持面。

(3)定义边界。通过交互式操作定义型材的边界是轻而易举的。若运用CAA 高效的为筋定义边界需要程序筛选出其边界对象。本文将型材的边界对象分为两类。一类是自身所在板架上的筋,另一类是其他板架。分别遍历这个两类对象,通过几何关系比较计算,筛选出合适的边界对象,利用接口CATIStrUseProfileLimitMngt->SetLimitingObject()将其定义为型材边界对象。

4 结语

本文基于SPD设计平台中的输出的dxf模型文件及xml属性数据,运用CATIA CAA 二次开发工具,高效处理三角面片等到面片模型,读取xml属性文件,将面片模型与属性文件相匹配,利用软件工具自动转化生成板架、型材及开孔,最终生成了CATIA 3DE 平台中的全参数化模型。以横舱壁分段为例,验证上述模型构建技术与二次开发工具的有效性。运用此技术方法,实现原有线框模型数据到CATIA 平台的转移,新模型继承了原模型属性及几何信息,节省了大量的重新建模工作,也规避了二次建模造成的数据差错。

猜你喜欢

线框面片型材
三维模型有向三角面片链码压缩方法
朗盛推出空心型材混合技术
大型船舶T型材焊接工艺试验及工艺再造
玩转方格
对一道电磁感应题目全面严谨的分析
初次来压期间不同顶板对工作面片帮影响研究
被动房用四密封多断桥隔热铝塑共挤型材
线框在磁场中平动模型的九种情景剖析
一种用于低压开关柜“S”形型材的设计与运用
甜面片里的人生