留言板

尊敬的读者、作者、审稿人, 关于本刊的投稿、审稿、编辑和出版的任何问题, 您可以本页添加留言。我们将尽快给您答复。谢谢您的支持!

姓名
邮箱
手机号码
标题
留言内容
验证码

基于CAD与CATIA二次开发的船体快速建模方法

卢雨 顾朱浩 王瑞宇

卢雨, 顾朱浩, 王瑞宇. 基于CAD与CATIA二次开发的船体快速建模方法[J]. 中国舰船研究, 2020, 15(6): 121–127 doi:  10.19693/j.issn.1673-3185.01865
引用本文: 卢雨, 顾朱浩, 王瑞宇. 基于CAD与CATIA二次开发的船体快速建模方法[J]. 中国舰船研究, 2020, 15(6): 121–127 doi:  10.19693/j.issn.1673-3185.01865
LU Y, GU Z H, WANG R Y. Rapid hull modeling methodology based on CAD and CATIA secondary development[J]. Chinese Journal of Ship Research, 2020, 15(6): 121–127 doi:  10.19693/j.issn.1673-3185.01865
Citation: LU Y, GU Z H, WANG R Y. Rapid hull modeling methodology based on CAD and CATIA secondary development[J]. Chinese Journal of Ship Research, 2020, 15(6): 121–127 doi:  10.19693/j.issn.1673-3185.01865

基于CAD与CATIA二次开发的船体快速建模方法

doi: 10.19693/j.issn.1673-3185.01865
基金项目: 国家自然科学基金青年基金资助项目(51809029);国家部委基金资助项目(61402070106);辽宁省自然科学基金博士科研启动计划资助项目(2019-BS-025);中央高校基本科研业务费专项资金资助项目(3132019306)
详细信息
    作者简介:

    卢雨,男,1988年生,博士,讲师。研究方向:船舶水动力学。E-mail:luyu@dlmu.edu.cn

    顾朱浩,男,1996年生,硕士生。研究方向:船舶水动力学。E-mail:973341877@qq.com

    王瑞宇,男,1990 年生,硕士,助理工程师。研究方向:CFD技术。E-mail:wry6666666@163.com

    通讯作者:

    卢雨

  • 中图分类号: U662.2

Rapid hull modeling methodology based on CAD and CATIA secondary development

图(9)
计量
  • 文章访问数:  61
  • HTML全文浏览量:  13
  • PDF下载量:  1006
  • 被引次数: 0
出版历程
  • 收稿日期:  2019-12-26
  • 修回日期:  2020-05-19
  • 网络出版日期:  2020-06-17
  • 刊出日期:  2020-12-30

基于CAD与CATIA二次开发的船体快速建模方法

doi: 10.19693/j.issn.1673-3185.01865
    基金项目:  国家自然科学基金青年基金资助项目(51809029);国家部委基金资助项目(61402070106);辽宁省自然科学基金博士科研启动计划资助项目(2019-BS-025);中央高校基本科研业务费专项资金资助项目(3132019306)
    作者简介:

    卢雨,男,1988年生,博士,讲师。研究方向:船舶水动力学。E-mail:luyu@dlmu.edu.cn

    顾朱浩,男,1996年生,硕士生。研究方向:船舶水动力学。E-mail:973341877@qq.com

    王瑞宇,男,1990 年生,硕士,助理工程师。研究方向:CFD技术。E-mail:wry6666666@163.com

    通讯作者: 卢雨
  • 中图分类号: U662.2

摘要:   目的  在使用CATIA创建船体模型的过程中,人为因素较大且工序繁杂。为快速量取船舶型值、采用型值快速化三维建模,给出一种快速、高效的船舶建模设计方法。  方法  基于CAD与CATIA平台,运用面向用户的VB和Java语言,通过自动化接口连接CAD与CATIA模块对二者进行联合二次开发,以量取船舶各型线型值并转换为三维坐标点,快速建立三维型线,生成船体曲面。通过2个算例,验证二次开发程序的效率及可靠性。  结果  结果表明,所编写的二次开发程序可在CAD中将二维型线快速转化为三维型值点,并在CATIA中创建横剖线、纵剖线及半宽水线,实现了快速三维建模的功能。  结论  从2种不同船型的绘制结果可见,使用多平台协同设计技术具有多阶段建模、关联模型的技术特点,可以提高模型质量和绘制效率,极大地方便了用户使用。

English Abstract

卢雨, 顾朱浩, 王瑞宇. 基于CAD与CATIA二次开发的船体快速建模方法[J]. 中国舰船研究, 2020, 15(6): 121–127 doi:  10.19693/j.issn.1673-3185.01865
引用本文: 卢雨, 顾朱浩, 王瑞宇. 基于CAD与CATIA二次开发的船体快速建模方法[J]. 中国舰船研究, 2020, 15(6): 121–127 doi:  10.19693/j.issn.1673-3185.01865
LU Y, GU Z H, WANG R Y. Rapid hull modeling methodology based on CAD and CATIA secondary development[J]. Chinese Journal of Ship Research, 2020, 15(6): 121–127 doi:  10.19693/j.issn.1673-3185.01865
Citation: LU Y, GU Z H, WANG R Y. Rapid hull modeling methodology based on CAD and CATIA secondary development[J]. Chinese Journal of Ship Research, 2020, 15(6): 121–127 doi:  10.19693/j.issn.1673-3185.01865
    • CAD与CATIA在船舶设计中均具有强大的图形绘制能力,但一直以来,使用CATIA创建船体模型时人为因素较多且工序繁杂,不仅耗时费力,误差也较大。同样地,在CAD中量取型线型值也是如此。为解决上述问题,刘勇杰等[1-2]利用基于CATIA的二次开发,分别完成了三维型线绘制模型及创建螺旋桨模型,但是文中并未提及如何获取型线型值。事实上,在模型创建过程中单纯依靠CAD图纸给出的型值表是无法完成船体的光顺和准确建模的,而只能通过获取更多的型值点来参与建模,因此,这就需要逆向测量。一般在科研中,大多数情况下使用的是人工量取方式,但此方法也耗时费力,且还存在误差较大的问题。近年来,冯康佳等[3]提出了利用CATIA的二次开发来输出型值,但是对于行业标准的CAD格式图纸,其研究结果尚缺乏通用性。

      因此,本文将利用VB语言对CAD与CATIA进行二次联合开发,使其能够快速量取各型线型值并转换为三维坐标点,以快速建立三维型线,最终生成船体曲面。然后通过算例,验证二次开发的程序建立三维模型的效率及精度。

    • Visual Basic(VB)是集成化的高级计算机编程语言。基于VB开发的AutoCAD绘图软件在船舶工程领域中得到了广泛应用[4-5]。在型线图设计方面,运用VB程序可实现自动化量取。本文针对自动化设计要求,在分析研究常用船舶设计型线图中涉及的型线数据处理问题的基础上,提出了一种全面、合理的程序化设计方案。该方案以VB为编程语言和开发工具,对AutoCAD软件进行二次开发,用以获得快速量取型线图的程序。根据自动化设计思想,设计的子程序将包括原点选取、剖线选取、数据读取、数据输出4个功能模块,以实现自动读取型线图的功能,并自动导出EXCEL文件。图1所示为整个程序设计流程。

      图  1  CAD程序流程图

      Figure 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二次开发的重要参考。

      图  2  CATIA V5 Automation对象构架[7]

      Figure 2.  CATIA V5 Automation object architecture [7]

      利用CATIA提供的API接口进行程序设计开发,可拓展CATIA软件的功能,实现软件功能的个性化和操作自动化,使软件能够更好地为用户服务,这对于提高工作效率和产品质量、节约研发成本和缩短开发周期具有重要作用[9]。VB 6.0被广泛用于软件的二次开发,它可以为用户提供强大的编程空间,极大地简化用户的操作步骤,并能够得到更加智能和精准的目标结果。CATIA提供的接口支持VB语言的开发工具,根据需要,可合理调用V5 Automation提供的类、库的属性和方法以及二次开发函数。CATIA中的每个功能(例如曲面设计、零件设计、工程制图等)和所有实体特征(例如草图、修饰、曲面、变换、组合特征等)都具有相应的类、库支撑。因此,CATIA二次开发的主要工作是合理调用 V5 Automation API 对象进行编程[10],以便于用户使用,为特殊用户提高使用效率。在此过程中,通过访问CATIA接口,快速得到三维型线,可为后期的曲面创建打下基础。图3所示为整个程序流程。

      图  3  CATIA程序流程图

      Figure 3.  CATIA program flow chart

    • 船舶型线图主要包括纵剖线图、横剖线图及半宽水线图。在CAD中,首先使用VB宏命令测量上述图的型值,通过程序选择初始原点,指定型线,再加入对应的所在剖面的第3坐标值,从而将二维的型线图转换为三维坐标下的型值;然后,通过Java程序自动整合三维型值,以达到CATIA的VB程序使用要求;最后,在CATIA平台下运行VB命令,在CATIA中自动绘制出三维型线,检查并适当修改,采用网状填充、多截面曲线填充和填充曲面等功能创建船体曲面,最终得到光顺的船舶实体模型。

    • 绘制三维模型前,通常需要通过CAD软件测量得到二维型线图的三维坐标。对于船体绘制而言,将有多达数千个三维型值点需要测量,而多次测量显然不合理。因此,在VB 6.0的开发环境下,首先需要通过对VB语言的调用,循环和编译CAD中的各操作命令[11]来实现原点选取、型值读取、型值输出和存储等功能。然后,根据不同的需求,利用不同的代码行调用CAD中的相应命令,通过循环反复读取并输出为用户指定格式。最后,将各模块一体化封装,研究出满足用户需求的系统。

      这里给出主程序如下:

      Public xlapp As Excel.Application 'Excel 对象

      Public xlbook As Excel.Workbook ' 工作簿

      Public xlsheet As Excel.Worksheet ' 工作表

      Public objCadApplication As AutoCAD.

      AcadApplication '* Public ACAD Varible

      Public objacadDoc As AcadDocument '* Public

      ACAD Varible

      Public xuhuan As Integer ' 控制循环次数

      Sub () ' 设置函数

      Dim origin_ucs As Variant ' 获得原点的坐标

      pointx = origin_ucs 'x 轴上一点

      pointx(0) = x + 1000 'y 轴上一点

      pointy = origin_ucs

      pointy(1) = y + 1000

      Dim frame_ucs As AcadUCS '创建一个局部坐标系

      For i = 0 To nb_pnt - 1

      point_origin_2d = ent.Coordinate(i)

      point_origin_3d(0) = point_origin_2d(0)

      point_origin_3d(1) = point_origin_2d(1)

      point_origin_3d(2) = 0

      point_ucs_3d = ThisDrawing.Utility.TranslateCoordinates(point_origin_3d, acWorld, acUCS, False)

      x = x_coord

      y = Abs(point_ucs_3d(0))

      z = point_ucs_3d(1) '型值读取主程序

      str1 = "(" + Format(x, "0.###") + "," + Format(y, "0.###") + "," + Format(z, "0.#") + ")" '设置输出格式

      Print #1, str1 '输出, x, y, z

      file_name1 = "x=" + Trim(Str(x_coord)) + ".csv" '设置输出文件

      file_name2 = "F:\...\" + "x=" + Trim(Str(x_coord)) + ".js"

      End Sub '设置函数结束

      上述代码行给出的为型值自动读取的主程序,行代码后的文字为程序注释,最终可读取出各剖面的型值。具体说明如下:首先,从EXCEL中读取文件的数据,选取读取路径。本文设置的VB宏命令为一个SUB子程序,在子程序内加入了获取指定命令的语句origin_ucs,通过此命令锁定图中的原点坐标值。然后,通过FOR循环功能自动读取不同位置的型值。最后,通过FORMAT,按照指定格式输出各型值点的x,y,z值。

      在操作过程中,需要注意:1)选取的型线必须为多线段,否则不可读取(可采用多线段转换命令直接转换);2)若船舶含有较长的平行舯体,建议在水线中部加入若干个点,使得在CATIA中导入点时,可以防止在由点自动绘制样条曲线的过程中将原本的直线自动计算为曲线,从而影响绘制结果;3)折角线等折线段处应打断分开处理。

    • 在CAD二次开发得到各剖面型值后产生的型值文件较多,而对于2.3节中的CATIA快速建模而言,其所需格式是固定的。因此,为简化型值的量取与模型绘制间的数据转换,使用Java语言编辑得到了一个自动化整理系统。本文使用Java编写接口程序,可以实现所有文件的合并,同时生成运行CATIA二次开发所需要的格式文件,由此连接CAD与CATIA,从而进行协同绘制,实现图块和各种属性的自动导入,省去了人工重复的繁琐操作。以下为给出的主程序:

      //(增加特定指示数字符)

       if (i == 0) {

       teList.add(0, "StartL");

       teList.add(1, "SCurve");

       teList.add("ECurve");

       } else if (i == filenames.size() - 1) {

       teList.add(0, "SCurve");

       teList.add("ECurve");

       teList.add("EndL");

       teList.add("End");

       } else {

       eList.add(0, "SCurve");

       teList.add("ECurve");

      //(读取文件)

       public static ArrayList<String> getFiles(String path) {

       ArrayList<String> files = new ArrayList<String>();

       File file = new File(path);

       File[] tempList = file.listFiles();

       for (int i = 0; i < tempList.length; i++) {

       if (tempList[i].isFile()) {

       files.add(tempList[i].toString());

      // 文件名,不包含路径

      // String fileName = tempList[i].getName();

       }

       if (tempList[i].isDirectory()) {

       }

       }

       return files;

       }

      //(合并文件)

       public static void WriteToFile(ArrayList<ArrayList<String>> result, String filename) {

      // 创建输出缓冲流对象

       try {

       BufferedWriter bw = new BufferedWriter(new FileWriter(filename));

       for (int i = 0; i < result.size(); i++) {

       ArrayList<String> tempList = result.get(i);

       for (String temp : tempList) {

       bw.write(temp);

       bw.newLine();

       }

      上述程序的主要功能是在各单独型值点文件链接中加入特殊的SCurve与ECurve命令,并在合并文件前后再加入StartL,EndL和END命令,以此为CATIA中文件的读取设定节点。Java中的循环功能与VB中的循环相似,也可以反复读取指定文件中的数据,并保存在Java的临时内存中,最终合并排列成一个整体的数据系统,输出指定格式的EXCEL型值文件。

    • 近年来,在使用CATIA创建船体模型时一般使用的是二维型线图,对二维型线图重新绘制连线得到三维型线图后,再使用多截面曲面的方法来绘制。上述方法既有优点又有缺点:优点是绘制精确且步骤简单;缺点是绘制过程耗时长,虽然精确,但船体光顺度不理想,步骤虽然简单,却容易出错。

      过去,三维船模的绘制往往采用的是多截面曲面的命令,本文经反复探索,在绘制出三维型线后,采用多截面曲面和网状曲面等命令来绘制三维曲面,这种方法可逐渐减少创建模型的限制,同时也能很好地控制光顺度,并能对复杂结构进行简单化处理。

      VB 6.0中编写的宏命令具有在CATIA中生成系列型值点并自动连线的功能。通过在CATIA平台中调用此命令,可读取及绘制当前EXCEL中的文件。该程序的主要功能包括:获取CATIA活动窗口、自动绘制点及样条曲线等。

      以下为给出的主程序:

      Set CATIA = GetObject(, "CATIA.Application") '获得CATIA

      Set MyPartDocument = CATIA.ActiveDocument '获得文件

      Chain = GetCellA(iRang)

      If ((Len(Chain) > 0) And (Len(Chain2) > 0) And (Len(Chain3) > 0)) Then

      X = CDbl(Chain)

      Y = CDbl(Chain2)

      Z = CDbl(Chain3)

      Else '获得文件的坐标

      Set Point = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(X, Y, Z) '创建坐标点

      Set spline = PtDoc.Part.HybridShapeFactory.AddNewSpline '创建曲线

      For i = 1 To indexSpline

      Set LocalRefSpline = PtDoc.Part.CreateReferenceFromGeometry(SplineArray(i)) '循环曲线的创建

      Set Loft = PtDoc.Part.HybridShapeFactory.AddNewLoft '创建loft

      打开程序后,在CATIA中可自动识别型值点坐标,并找到Application窗口。首先,通过命令行Set Point绘制出点云图,然后再通过样条曲线命令Set spline,由绘制的系列型值点自动连接为样条曲线,最后通过FOR循环,反复读取后获得所有的船舶型线。

    • 以某航务工作船的型线图作为算例,在CAD中打开。首先,简单调整型线图,并确定如下事项:船舶型线坐标系中指向船艏的方向为正,指向右舷方向为正,向上为正;确定站距;检查是否都为多段线,曲线上点的密集程度(不可产生一个孤点,具体见2.1节)如图4 所示;打断所有折线段,例如船艏舷墙和船艉舷墙等,如图5所示。

      图  4  正常多线段曲线(无需打断)

      Figure 4.  Normal multi-segment curve (no need to interrupt)

      图  5  非正常多线段曲线(需打断)

      Figure 5.  Abnormal multi-segment curve (need to be interrupted)

      确定型线图中的坐标方向及曲线样式后,使用CAD运行VB文件,通过选择原点、型线,输入对应的所在剖面的第3坐标值,进而生成各剖线的三维型值文件。

    • 通过CMD命令,运行javac Main.java,生成Java程序的CLASS文件。在代码中设定输出文件夹的路径,在指定文件夹中,自动整理并汇总型值,如图6所示。由于行数较多,图中使用省略号代替了部分数值。

      图  6  型值表整理图

      Figure 6.  Finishing chart of offset table

    • 在CATIA平台下启用宏命令,经多次测试可知,基于精度的原因,在CAD中读取的点密集程度过高,导致在CATIA中样条曲线无法生成。因此,建议在CAD中设置的样条曲线密度适中即可。在使用此程序自动绘制出横剖线、纵剖线及半宽水线图后,还需要对型线缺失的位置利用样条曲线、顺接曲线等命令进行补充和修改。图7所示为型线完成后的结果,其中图7(a)中的黑点表示三维型值点。

      图  7  船体外形线框图

      Figure 7.  Chart of hull line wireframe

    • 绘制船体曲面时[12-13],可以利用已生成的样条曲线创建船体曲面,但是在使用过程中,由于船舶的艏、艉形式较为复杂,所以需要增加曲线和点后才能得到更好的光顺曲面,从而利用“自由曲面”中的3D曲线,通过控制其控制点更好地拟合曲面。在CATIA中,通过网状曲面、多截面曲面、填充曲面及高级填充等命令,最终可以得到光顺的船体表面。在填充过程中,需要注意边界条件的选取,边界条件主要分为点连续、曲率连续与切线连续。其中:点连续表示2个面由一个点连续,这样会产生折角;曲率连续表示2个面之间有一定的曲率变化,并不是绝对的相切;切线连续表示在2个面相连直线的法向量是相切的,它可使2个面平滑过度。在曲面生成后,采用“自由曲面”或者“创成式曲面”中的切割、断开等命令来完善曲面,最终生成用户需要的船体图形。图8图9分别给出了2个比较通用的船型(有、无球鼻艏船体三维模型),验证了本文所提方法的可行性。

      图  8  不含球鼻艏船体三维模型(某航务工作船)

      Figure 8.  3D model of hull without bulbous bow (navigational vessel)

      图  9  含球鼻艏船体三维模型(6 650 DWT货船)

      Figure 9.  3D model of hull with bulbous bow (6 650 DWT cargo ship)

    • 本文基于CAD和CATIA平台,使用VB和Java实现了二次联合开发,给出了程序设计及关键代码,这对相关程序的开发具有指导意义。通过算例验证,显示该程序实现了自动读取型值、整合数据、绘制型线的一体化功能。在快速建模中,使用二次开发程序来避免重复性的工作并提高精度是一种高效、可靠的方法。该快速建模方法绘图效率高、可靠性强,具有一定的实用性及普适性。尤其对于船体型线的反复修正,本文给出的方法为新船型的型线设计和三维模型准确快速的创建提供了技术支撑。

参考文献 (13)

目录

    /

    返回文章
    返回