基于CAD 与CATIA 二次开发的船体快速建模方法
2020-12-17卢雨顾朱浩王瑞宇
卢雨,顾朱浩,王瑞宇
1 大连海事大学 船舶与海洋工程学院,辽宁 大连 116026
2 中国兵器工业集团航空弹药研究院有限公司,黑龙江 哈尔滨 150001
0 引 言
CAD 与CATIA 在船舶设计中均具有强大的图形绘制能力,但一直以来,使用CATIA 创建船体模型时人为因素较多且工序繁杂,不仅耗时费力,误差也较大。同样地,在CAD 中量取型线型值也是如此。为解决上述问题,刘勇杰等[1-2]利用基于CATIA 的二次开发,分别完成了三维型线绘制模型及创建螺旋桨模型,但是文中并未提及如何获取型线型值。事实上,在模型创建过程中单纯依靠CAD 图纸给出的型值表是无法完成船体的光顺和准确建模的,而只能通过获取更多的型值点来参与建模,因此,这就需要逆向测量。一般在科研中,大多数情况下使用的是人工量取方式,但此方法也耗时费力,且还存在误差较大的问题。近年来,冯康佳等[3]提出了利用CATIA 的二次开发来输出型值,但是对于行业标准的CAD格式图纸,其研究结果尚缺乏通用性。
因此,本文将利用VB 语言对CAD 与CATIA进行二次联合开发,使其能够快速量取各型线型值并转换为三维坐标点,以快速建立三维型线,最终生成船体曲面。然后通过算例,验证二次开发的程序建立三维模型的效率及精度。
1 VB 二次开发
1.1 基于 VB 的 CAD 二次开发技术
Visual Basic(VB)是集成化的高级计算机编程语言。基于VB 开发的AutoCAD 绘图软件在船舶工程领域中得到了广泛应用[4-5]。在型线图设计方面,运用VB 程序可实现自动化量取。本文针对自动化设计要求,在分析研究常用船舶设计型线图中涉及的型线数据处理问题的基础上,提出了一种全面、合理的程序化设计方案。该方案以VB 为编程语言和开发工具,对AutoCAD 软件进行二次开发,用以获得快速量取型线图的程序。根据自动化设计思想,设计的子程序将包括原点选取、剖线选取、数据读取、数据输出4 个功能模块,以实现自动读取型线图的功能,并自动导出EXCEL 文件。图1 所示为整个程序设计流程。
1.2 基于 VB 的 CATIA 二次开发技术
图 1 CAD 程序流程图Fig. 1 CAD program flow chart
CATIA 是法国达索公司开发的CAD/CAE/CAM一体化软件,在三维建模设计领域中处于领先地位[6]。针对 VB 二次开发,CATIA 提供了 2 种编程接口:一是自动化对象编程(V5 Automation),如图2 所示的对象架构[7];二是开放的组件应用架构(CAA)[8]。在这 2 种编程接口中,CAA 的稳定性好、功能全面,对开发人员的要求较高,适合于复杂的CATIA 二次开发,并需要使用专业的编程软件及工具;而 V5 Automation 是基于 COM 技术的编程接口,用于描述CATIA 二次开发编程对象架构,包含有不同接口中每个对象的方法属性等详细信息,是作为CATIA 二次开发的重要参考。
利用CATIA 提供的API 接口进行程序设计开发,可拓展CATIA 软件的功能,实现软件功能的个性化和操作自动化,使软件能够更好地为用户服务,这对于提高工作效率和产品质量、节约研发成本和缩短开发周期具有重要作用[9]。VB 6.0 被广泛用于软件的二次开发,它可以为用户提供强大的编程空间,极大地简化用户的操作步骤,并能够得到更加智能和精准的目标结果。CATIA 提供的接口支持VB 语言的开发工具,根据需要,可合理调用V5 Automation 提供的类、库的属性和方法以及二次开发函数。CATIA 中的每个功能(例如曲面设计、零件设计、工程制图等)和所有实体特征(例如草图、修饰、曲面、变换、组合特征等)都具有相应的类、库支撑。因此,CATIA 二次开发的主要工作是合理调用 V5 Automation API 对象进行编程[10],以便于用户使用,为特殊用户提高使用效率。在此过程中,通过访问CATIA 接口,快速得到三维型线,可为后期的曲面创建打下基础。图3 所示为整个程序流程。
2 CAD 与CATIA 联合二次开发方法
图 2 CATIA V5 Automation 对象构架[7]Fig. 2 CATIA V5 Automation object architecture [7]
图 3 CATIA 程序流程图Fig. 3 CATIA program flow chart
船舶型线图主要包括纵剖线图、横剖线图及半宽水线图。在CAD 中,首先使用VB 宏命令测量上述图的型值,通过程序选择初始原点,指定型线,再加入对应的所在剖面的第3 坐标值,从而将二维的型线图转换为三维坐标下的型值;然后,通过Java 程序自动整合三维型值,以达到CATIA 的 VB 程序使用要求;最后,在 CATIA 平台下运行VB 命令,在CATIA 中自动绘制出三维型线,检查并适当修改,采用网状填充、多截面曲线填充和填充曲面等功能创建船体曲面,最终得到光顺的船舶实体模型。
2.1 多型值的快速获取
绘制三维模型前,通常需要通过CAD 软件测量得到二维型线图的三维坐标。对于船体绘制而言,将有多达数千个三维型值点需要测量,而多次测量显然不合理。因此,在VB 6.0 的开发环境下,首先需要通过对VB 语言的调用,循环和编译CAD 中的各操作命令[11]来实现原点选取、型值读取、型值输出和存储等功能。然后,根据不同的需求,利用不同的代码行调用CAD 中的相应命令,通过循环反复读取并输出为用户指定格式。最后,将各模块一体化封装,研究出满足用户需求的系统。
这里给出主程序如下:
上述代码行给出的为型值自动读取的主程序,行代码后的文字为程序注释,最终可读取出各剖面的型值。具体说明如下:首先,从EXCEL中读取文件的数据,选取读取路径。本文设置的VB 宏命令为一个SUB 子程序,在子程序内加入了获取指定命令的语句origin_ucs,通过此命令锁定图中的原点坐标值。然后,通过FOR 循环功能自动读取不同位置的型值。最后,通过FORMAT,按照指定格式输出各型值点的x,y,z 值。
在操作过程中,需要注意:1)选取的型线必须为多线段,否则不可读取(可采用多线段转换命令直接转换);2)若船舶含有较长的平行舯体,建议在水线中部加入若干个点,使得在CATIA 中导入点时,可以防止在由点自动绘制样条曲线的过程中将原本的直线自动计算为曲线,从而影响绘制结果;3)折角线等折线段处应打断分开处理。
2.2 数据自动化整理
在CAD 二次开发得到各剖面型值后产生的型值文件较多,而对于2.3 节中的CATIA 快速建模而言,其所需格式是固定的。因此,为简化型值的量取与模型绘制间的数据转换,使用Java 语言编辑得到了一个自动化整理系统。本文使用Java 编写接口程序,可以实现所有文件的合并,同时生成运行CATIA 二次开发所需要的格式文件,由此连接CAD 与CATIA,从而进行协同绘制,实现图块和各种属性的自动导入,省去了人工重复的繁琐操作。以下为给出的主程序:
上述程序的主要功能是在各单独型值点文件链接中加入特殊的SCurve 与ECurve 命令,并在合并文件前后再加入StartL,EndL 和END 命令,以此为CATIA 中文件的读取设定节点。Java 中的循环功能与VB 中的循环相似,也可以反复读取指定文件中的数据,并保存在Java 的临时内存中,最终合并排列成一个整体的数据系统,输出指定格式的EXCEL 型值文件。
2.3 三维型线绘制
近年来,在使用CATIA 创建船体模型时一般使用的是二维型线图,对二维型线图重新绘制连线得到三维型线图后,再使用多截面曲面的方法来绘制。上述方法既有优点又有缺点:优点是绘制精确且步骤简单;缺点是绘制过程耗时长,虽然精确,但船体光顺度不理想,步骤虽然简单,却容易出错。
过去,三维船模的绘制往往采用的是多截面曲面的命令,本文经反复探索,在绘制出三维型线后,采用多截面曲面和网状曲面等命令来绘制三维曲面,这种方法可逐渐减少创建模型的限制,同时也能很好地控制光顺度,并能对复杂结构进行简单化处理。
VB 6.0 中编写的宏命令具有在CATIA 中生成系列型值点并自动连线的功能。通过在CATIA平台中调用此命令,可读取及绘制当前EXCEL中的文件。该程序的主要功能包括:获取CATIA活动窗口、自动绘制点及样条曲线等。
以下为给出的主程序:
打开程序后,在CATIA 中可自动识别型值点坐标,并找到Application 窗口。首先,通过命令行Set Point 绘制出点云图,然后再通过样条曲线命令Set spline,由绘制的系列型值点自动连接为样条曲线,最后通过FOR 循环,反复读取后获得所有的船舶型线。
3 算例验证
3.1 CAD 提取型值
以某航务工作船的型线图作为算例,在CAD中打开。首先,简单调整型线图,并确定如下事项:船舶型线坐标系中指向船艏的方向为正,指向右舷方向为正,向上为正;确定站距;检查是否都为多段线,曲线上点的密集程度(不可产生一个孤点,具体见2.1 节)如图4 所示;打断所有折线段,例如船艏舷墙和船艉舷墙等,如图5 所示。
图 4 正常多线段曲线(无需打断)Fig. 4 Normal multi-segment curve (no need to interrupt)
图 5 非正常多线段曲线(需打断)Fig. 5 Abnormal multi-segment curve (need to be interrupted)
确定型线图中的坐标方向及曲线样式后,使用CAD 运行VB 文件,通过选择原点、型线,输入对应的所在剖面的第3 坐标值,进而生成各剖线的三维型值文件。
3.2 Java 整合数据
通过 CMD 命令,运行 javac Main.java,生成Java 程序的CLASS 文件。在代码中设定输出文件夹的路径,在指定文件夹中,自动整理并汇总型值,如图6 所示。由于行数较多,图中使用省略号代替了部分数值。
3.3 CATIA 绘制型线
在CATIA 平台下启用宏命令,经多次测试可知,基于精度的原因,在CAD 中读取的点密集程度过高,导致在CATIA 中样条曲线无法生成。因此,建议在CAD 中设置的样条曲线密度适中即可。在使用此程序自动绘制出横剖线、纵剖线及半宽水线图后,还需要对型线缺失的位置利用样条曲线、顺接曲线等命令进行补充和修改。图7所示为型线完成后的结果,其中图7(a)中的黑点表示三维型值点。
图 6 型值表整理图Fig. 6 Finishing chart of offset table
图 7 船体外形线框图Fig. 7 Chart of hull line wireframe
3.4 创建船体曲面
绘制船体曲面时[12-13],可以利用已生成的样条曲线创建船体曲面,但是在使用过程中,由于船舶的艏、艉形式较为复杂,所以需要增加曲线和点后才能得到更好的光顺曲面,从而利用“自由曲面”中的3D 曲线,通过控制其控制点更好地拟合曲面。在CATIA 中,通过网状曲面、多截面曲面、填充曲面及高级填充等命令,最终可以得到光顺的船体表面。在填充过程中,需要注意边界条件的选取,边界条件主要分为点连续、曲率连续与切线连续。其中:点连续表示2 个面由一个点连续,这样会产生折角;曲率连续表示2 个面之间有一定的曲率变化,并不是绝对的相切;切线连续表示在2 个面相连直线的法向量是相切的,它可使2 个面平滑过度。在曲面生成后,采用“自由曲面”或者“创成式曲面”中的切割、断开等命令来完善曲面,最终生成用户需要的船体图形。图8 和图9 分别给出了2 个比较通用的船型(有、无球鼻艏船体三维模型),验证了本文所提方法的可行性。
图 8 不含球鼻艏船体三维模型(某航务工作船)Fig. 8 3D model of hull without bulbous bow (navigational vessel)
图 9 含球鼻艏船体三维模型(6 650 DWT 货船)Fig. 9 3D model of hull with bulbous bow (6 650 DWT cargo ship)
4 结 语
本文基于 CAD 和 CATIA 平台,使用 VB 和Java 实现了二次联合开发,给出了程序设计及关键代码,这对相关程序的开发具有指导意义。通过算例验证,显示该程序实现了自动读取型值、整合数据、绘制型线的一体化功能。在快速建模中,使用二次开发程序来避免重复性的工作并提高精度是一种高效、可靠的方法。该快速建模方法绘图效率高、可靠性强,具有一定的实用性及普适性。尤其对于船体型线的反复修正,本文给出的方法为新船型的型线设计和三维模型准确快速的创建提供了技术支撑。