AUTOCAD高级功能及二次开发在舵系设计上的深入应用
2017-10-10肖明张卓
肖 明 张 卓
(上海船舶研究设计院,上海201203)
AUTOCAD高级功能及二次开发在舵系设计上的深入应用
肖 明 张 卓
(上海船舶研究设计院,上海201203)
作为目前船舶专业仍不可或缺的设计工具,AUTOCAD软件的高级工具如样条曲线、三维建模、扩展数据等功能十分强大,结合二次开发程序,可开发适合各种专业的设计工具。舵系是舾装设计的重要部分,在舵系计算的程序化、舵叶结构的三维化、铸钢件三维参数化等方面已开发出各种辅助设计工具,这些工具的运用,已逐步深入到舵系设计的各个方面。
AUTOCAD;AUTOLISP;VISUAL LISP;高级功能;二次开发;舵系设计
Abstract:With its powerful functions of spline,3d model,extended data and etc.,AUTOCAD is a fundamental design tool for naval architects.Combining the secondary development programs,we could make specialized tools for different disciplines.Rudder system is an important part of outfitting.Various auxiliary means such as programmatic calculation of rudder system,3D model tool of rudder structure and casting were developed,devoting to design of rudder system.
Keywords:AUTOCAD;AUTOLISP;VISUAL LISP;advanced function application;secondary development;rudder design
0 前言
AUTOCAD是目前船舶专业重要的设计工具之一,随着版本的不断更新,其功能越来越强大。它的高级功能如带属性块、动态块、扩展数据、样条曲线、三维建模等方面在设计中运用十分广泛,结合二次开发程序 AUTOLISP、VISUAL LISP、VBA等语言的使用,其专业化工具的开发及应用不仅使设计效率得到很大提高,并且在设计方法的深入和设计思路的开阔上都有很大的帮助。
舵系是舾装设计的重要内容,包括舵系计算、舵系布置、舵叶结构、舵叶零件等设计。通过AUTOCAD的二次开发程序应用,在舵系计算的程序化、舵叶结构的三维化、铸钢件三维参数化等方面有诸多设计方法的创新,开发出相应实用和高效的设计工具。
本文对这些方法和工具进行详细介绍。
1 AUTOLISP/VISUAL LISP的简介
AUTOLISP是AUTOCAD内部的二次开发语言,是基于LISP语言衍生的一种程序语言。LISP是人工智领域使用的语言之一。它的发明人约翰·麦卡锡在20世纪60年代的一篇数学论文让其大放异彩,其简单的数据结构和独特的编程思想在业界中备受关注。AUTODESK公司在早期引入AUTOLISP作为AUTOCAD的二次开发语言,已使得该软件使用者开发出大量的套装系统和应用程序。VISUAL LISP是AUTOLISP的发展,提供了AUTOLISP的集成开发环境,扩展了函数库,增加了各种实用的功能,使得AUTOLISP在AUTOCAD二次开发中如虎添翼,前景更为广阔。AUTOLISP/VISUAL LISP有如下特点值得我们关注。
1)AUTOLISP继承了LISP语言的特点,使用简单的数据结构表(list)来表示代码和数据。AUTOCAD对象可以通过图元(entity)的格式,根据DXF组码的定义来描述图元数据的各种性质。这种格式同样采用表(list)的结构。因此,通过LISP语言的语法可以方便对图元的数据进行处理。例如,一段直线的图元数据line_list如下所示:
((-1.<图元名:7ffffb09140>)(0."LINE")(330.<图元名:7ffffb039f0>)(5."1C04")
(100."AcDbEntity")(67.0)(410."Model")(8."0")(100."AcDbLine")(10 937.42 3669.69 0.0)(11 10827.6 3669.69 0.0)(210 0.0 0.0 1.0))
上述图元数据中的括号()即表示一个list表,图元数据由各种list表组成,例如(0."LINE")是一个表对,其中0表示图元类型,"LINE"表示该图元为直线,表(10 937.42 3669.69 0.0)中的“10”表示该直线的起点,“937.42 3669.69 0.0”即起点坐标,表(11 10827.6 3669.69 0.0)中的“11”表示该直线的端点,“10827.6 3669.69 0.0”即端点坐标。ATUOLISP 提供了丰富的表处理函数,例如通过(assoc’10 line_list) 可获取直线的起点,(assoc’11 line_list)可获取直线的端点。
2)VISUAL LISP提供了面向对象编程的开发环境,即在AUTOLISP的基础上增加了对ActiveX的支持,通过对象的属性、方法、事件,使得访问AUTOCAD的对象更为方便。例如,同样对于一条直线,该直线作为object对象,具有StartPoint(起点)、EndPoint(端点)等属性,通过提取这些属性便可获取直线的起点和端点坐标,获取属性的函数为(vlaget-StartPoint object)、(vla-get-EndPoint object)。 相对于图元数据的处理,面向对象的方法更为直接和简洁。
3)AUTOLISP程序中,变量无需类型声明,变量是动态型的,在提高开发效率上提供了便捷之处。
4)AUTOLISP支持递归,在某些计算中,使用递归可使得程序结构更为简洁。
5)支持DCL语言设计程序对话框。
6)通过Command函数,可执行AUTOCAD的几乎所有的命令。该方法对于熟悉AUTOCAD的使用者来说,提供了一个非常灵活的开发模式。
7)提供了图形对象增加扩展数据等外部数据的途径。图形对象除了本身的基本数据外,可以根据格式要求赋予用户所需的扩展数据,对于专业化程序的开发来说,图形对象中特殊数据的赋予,是数据保存和传递的一个便捷的方式,在参数化设计中得到了有效的运用。
2 舵系计算的程序化
舵系计算是舵系设计中的重要一环,是设计前期不可或缺的步骤,主要包括舵型的选择、舵面积、舵叶轮廓线尺寸的确定、舵叶线形的选择、舵力及舵扭矩计算、舵杆或舵销尺寸的确定、舵叶强度校核、压入量计算等过程。由于舵系设计与船舶操纵性、快速性、舵桨配合、结构强度、舵机选型等诸多因素相关,舵系计算需要反复推敲,计算步骤往往需要进行多种舵型尺寸方案的比较,从而得出优化方案,因此计算量较大,有必要通过软件实现其步骤的程序化,从而提高设计效率,并保证数据的可靠性。
针对以上需要,开发出两种模式的舵系计算程序:
1)一种是对话框式的计算工具(见图1)。该程序可根据不同船级社的规范要求,在图形环境中选择舵叶轮廓线和输入必要的参数后,得到常规的全悬挂舵和半悬挂舵的主要计算结果,包括舵面积、舵力、扭矩、舵杆或舵销直径等数据。扭矩可为舵机选型提供依据。该过程可将设计参数和计算结果输出至AUTOCAD图形环境中,其中设计参数可供下次计算使用。
图1 舵系计算对话框
2)第二种模式是以适合各个船级社的舵系计算书模板为基础,通过数据和图形尺寸的修改进行计算结果的更新。该模板为标准舵系计算书的图形格式,所有参数均在AUTOCAD图形环境内以文本和图形对象通过扩展数据的形式提供,从而可被程序识别调用和计算。扩展数据 (Extended data)是AUTOLISP二次开发中提供的一种数据格式,它可以被赋予到任何图形对象中,其含义在于,图形对象除了普通图元数据外还可以通过扩展数据增加该图形对象的附加信息,且可以通过程序调用。与属性(attribute)相比,虽然后者也可以作为一种附加信息的赋予,却只能被块(block)对象所定义引用。因此,扩展数据是一种更为灵活的数据赋予形式,通过定义和管理,可方便地运用于各种应用程序中。AUTOLISP提供了各种类型的扩展数据,如字符串型、整型、点的列表形式等,如果扩展数据以字符串的格式赋予到图形中某数字文本对象,则可以将该字符串与应用程序的某变量名相关联,从而通过获取该数字文本的值对该变量名进行赋值,即实现了图形环境中的参数传递。
例如,对数字文本“185”添加如下的扩展数据:(-3("rudder calculation"(1000."LBP"))),其中"rudder calculation"为扩展程序登记名,1000表示字符串格式的扩展数据,其数据为"LBP",于是,可以通过程序在图形中调用该文本的扩展数据,实现LBP=185的赋值过程。
本计算书模板可提供舵面积、舵力、舵扭矩、各种舵系零件尺寸、舵叶强度校核、压入力和压入量等全部计算过程,只要修改模板中舵叶轮廓线的外形尺寸,以及代表相关参数文本的值,即可通过程序更新模板的计算结果。该计算书模板可作为完整的正式图纸进行输出。
另外,还开发了压入量计算的独立程序。该程序提供对话框的形式,输入参数即可计算出舵杆舵销液压连接的压入量和压入力,见图2。
图2 压入量计算
3 舵叶结构的三维参数化
考虑到不同船型的需要,舵叶横剖面线形也不尽相同,常用的线形有NACA、茹科夫斯基、HSVA等,考虑到空泡的影响,还有基于NACA线形推出的NACA 63A/64A等,在提供各种线形型值的前提下,以AUTOCAD的样条曲线(spline)形式即可精确生成舵叶横剖面线形。针对舵叶结构图各高度横剖面输出的需要,开发了舵叶线形生成程序。生成工具对话框见图3。
图3 舵叶线形生成工具对话框
该程序可通过选取上下两个截面的直线,便捷地生成不同高度的舵叶横剖面型值。该程序提供了不同厚度比的各种常用舵叶线形及型值的显示,通过点的个数可控制末端部分的光顺过渡,并提供了末端形式的选择。目前可提供的线形包括NACA、茹科夫斯基、HSVA MP71/73、NACA 63A/64A/65A,可以根据需要增加新的舵叶线形的型值,从而扩展该程序的运用范围。该工具生成的线形可配合舵系计算程序进行舵叶强框件部分的强度校核计算。
在AUTOLISP中生成图形对象,有以下三种方法可以实现。
1)使用Command函数,即根据AUTOCAD的生成样条曲线的命令、选项及表达式,在Command函数里将每一个参数顺序传给AUTOCAD以响应提示。对于生成样条曲线spline的命令,该函数的形式可以为(Command“spline”pt1 pt2 pt3……起点切向、端点切向)。这种方法对于熟悉AUTOCAD的使用者而言非常实用,但是要注意数据类型要与AUTOCAD命令响应一致,并且要注意AUTOCAD版本变换后导致的某些命令格式的变化,因此带来程序兼容性的问题。
2)使用entmake函数定义图元对象,即通过图形图元数据的构造进行图形的生成,例如对于一个圆的生成,函数的格式为(entmake′((0."CIRCLE")(62.1)(10 4.0 4.0 0.0)(40.1.0)))。 在图元数据表中,0表示图元类型,62表示颜色,10表示圆心,40表示半径。当然,一个圆的完整图元数据是不止这些的,但是在提供构造图元必要的参数后,其他参数将作为默认值赋予生成的图元对象。使用该方法必须熟悉图元的DXF组码格式。对于简单图形,只需提供少量的必要数据即可生成图形,而对于复杂对象,例如样条曲线,由于要提供各个点的坐标、切向、拟合公差和权值等参数,该方法并不实用。
3)使用ActiveX方法提供的函数。VISUALLISP提供了面向对象的生成图形的方法,对于样条曲线spline, 生成函数为 (vla-AddSpline object ptsarray starttan endtan),其中object是生成的空间(模型空间、图纸空间、块),ptsarray是点坐标值的变量,starttan和endtan分别是起点切向和端点切向。该方法直观、简洁,但是要注意变量的数据格式要求。对于某些特性,可能在生成对象没有体现,此时可以在生成对象后对这些特性进行修改。
对于以上三种方法,可以根据程序的实际需要各取所长,灵活运用。
AUTOCAD在2008及以上版本提供了三维放样(loft)功能。该功能可实现舵叶外板三维实体的生成,结合舵叶线形生成工具,还开发出了舵叶外板三维实体生成工具。其对话框和生成的舵叶外板三维实体见图4。
在舵叶三维生成程序中,主要使用了Command函数的方法。由于AUTOCAD版本的升级,三维功能也逐渐增强,某些三维命令的格式也有所修改,因此也开发了基于面向对象方法的通用子函数,解决了版本兼容问题。
该工具可根据外板板厚的划分区域生成不同板厚的舵叶外板三维实体,同时也提供了单个板厚区域的外板三维实体生成工具。生成舵叶外板后,通过其三维实体对象可查询舵板重量,且可生成各个高度的带外板厚度的舵叶剖面。根据舵叶线形和外板三维实体的生成,可以在AUTOCAD里生成舵叶与挂舵臂的三维模型。这对于检查挂舵臂与舵叶的间隙,以及考核拆桨情况更为直观和便利,见图5。根据需要,可建出舵叶内部所有结构的三维模型,从而准确得到舵叶结构的重量,同时可以更好地理解舵叶结构和施工工艺的关系。舵叶结构三维模型,如图6所示。
图4 舵叶外板三维生成
图5 舵叶与挂舵臂外形
图6 舵叶结构三维模型
4 舵叶铸钢件的三维参数化建模
由于铸钢件的形状不规则,因此在二维图形环境下准确反映其结构形式和重量信息比较困难。对于舵叶铸钢件而言,其外形与舵叶线形相关联,内部结构跟舵杆或舵销的复配相关联,铸钢件与舵叶连接的部分和舵板的板厚及形式相关联,所以,在舵叶剖面线性参数化生成及舵叶三维实体生成的前提下,通过对各种舵类型铸钢件的类型分析,舵叶铸钢件具备三维参数化建模的条件。
目前已开发出常用的舵叶铸钢件三维参数化生成工具,参数的获取同样是通过扩展数据的形式在图形环境中实现的。针对铸钢件建模,可以直接利用铸钢件图纸中的尺寸标注进行扩展数据的添加,以尺寸标注文本作为输入参数,从而更形象地实现图形环境下的参数化赋值,如图7所示。这是舵杆与舵叶顶端相连的铸钢件三视图,图7中的尺寸标注可以完整地表达铸钢件的形状,因此,这些尺寸标注对象(或文本对象)被赋予扩展数据后,程序可调用这些尺寸或文本对应的参数变量进行赋值;通过选取必要的构造截面(这部分可通过舵叶剖面线形程序生成),就可以生成铸钢件的三维模型 (见图8),而一旦修改这些尺寸标注或文本对象的值,即可生成新铸钢件的三维模型。
图7 铸钢件三视图
图8 舵叶铸钢件三维模型
铸钢件的三维建模可通过拉伸(extrude)、放样(loft)、裁剪(slice)、布尔运算(boolean)等方法生成,这些方法均可在程序中实现,从而可生成各个方向的视图及剖面,并可查询重量重心等信息。
5 三维实体辅助操作工具
针对三维实体及面域,开发了以下常用的辅助操作工具。
5.1 三维实体及面域物理特性查询工具
AUTOCAD提供了三维实体及面域的一些基本物理特性的查询,如体积、面积、质心、惯性矩等。通过二次开发,提供了更为便捷的查询工具,如通过输入密度实现的三维实体的质量、质心查询工具,面域主惯性矩和剖面模数的查询工具等,见图9。
图9 质量质心查询工具
在舵叶强框件强度校核和挂舵臂强度校核中,可以方便地使用面域主惯性矩和剖面模数查询工具快速地查询到相关截面的信息,如图10所示。图10中A-A剖面为舵叶强框件强度校核所需考核的剖面,其B-B剖面为挂舵臂强度校核所需考核的剖面,将这些剖面建成面域(region),即可查询到主惯性矩和剖面模数,从而可在设计初期确定舵叶轮廓线是否满足强度要求。
图10 舵叶强框件和挂舵臂剖面模数的查询
5.2 三维实体投影工具
AUTOCAD提供了三维实体的投影功能。该功能可以在布局空间里设置所需投影方向的视口,然后在视口中生成相应的投影,或者在布局空间视口中激活模型空间后使用。但是目前大部分的图纸通常是在模型空间里直接出图,而且常规方法生成的投影处于各自视图的平面坐标系内,生成过程较为繁琐,不利于调用和修改。图11所表示的是用AUTOCAD常规的方法生成的舵销三维实体的各个视图的投影。从图11中可以看出,各个投影分别位于各自的空间平面内。若在平面图里调用这些投影,则还需要在空间坐标系里进行相应的三维旋转的操作。
图11 AUTOCAD常规方法生成的投影
以此为基础,开发了更为方便的投影工具。该工具可生成常用的各种视图和用户视角视图的投影。这些投影均以世界坐标系为基准按块参照的形式生成,方便图形的调用和修改。图12所表示的是通过该工具生成的舵销三维模型的投影视图,其中可见线和非可见线分别位于一个图层,可根据出图的需要修改各自图层的颜色和线形。
图12 投影生成工具生成的三维模型的投影视图
5.3 三维实体剖面生成工具
AUTOCAD可用剖切命令(slice)获得三维实体剖面,剖切的平面可用三点或者平面对象的方式获取。同样,生成的剖面也是位于空间坐标系剖切平面内。在此基础上优化剖面生成的方法,可直接以世界坐标系平面为基准,生成所需剖切面的块参照对象,方便图形的调用和修改。
5.4 布局空间视口生成工具
舵系布置图因其节点较多的特点,可以通过布局空间的使用,提高图纸的质量和修改的便捷性。目前AUTOCAD布局空间的使用比较成熟,但是建立布局空间视口的过程不太方便,针对专业的使用特点,开发出了便捷的图纸布局视口的使用工具,见图13。
通过选取模型空间的封闭多段线、圆或椭圆等图形界限,输入布局空间的位置和比例后,即可将模型空间图形界限内的内容在布局空间里生成该比例的视口,通过对视口图层、线型等设置,可获得满足要求的显示结果,标注也可在布局空间里生成。如果需要修改,则只需在模型空间修改,布局视口内的部分也将自动修改。
图13 视口生成工具
图14表示的是舵系布置图布局空间的局部,其中视图2-1、2-2、2-3是以布局视口的形式生成。
图14 布局空间的应用
6 结语
以上是AUTOCAD高级功能及二次开发工具在舵系设计上部分应用的总结。这些工具在4600TEU、3 800 TEU、2 500 TEU、5 000 PCTC、6 700 PCTC、1 400客位客滚船、2 200客位客滚船、400客位客货船等船型舵系设计中得到了实际运用。通过比较,使用二次开发工具的设计过程,在准确程度和效率上,比传统方法有很大的提高。在程序开发过程中,也逐渐萌生建立舵系设计专家智能系统的想法,在这个系统中可集成各个船级社的规范要求以及设计数据和经验,下一阶段,将着手做这方面的工作。
AUTOCAD Advanced Application of Advanced Functions and Secondary Development of AUTOCAD for in Rudder Design
XIAO MingZHANG Zhuo
(Shanghai Merchant Ship Design and Research Institute,Shanghai 201203,China)
U662.9
A
1001-4624(2017)01-0006-08
2017-01-10;
2017-08-15
肖 明(1977—),男,高级工程师,长期从事船舶舾装设计工作。
张 卓(1979—),男,高级工程师,长期从事项目管理和船舶总体设计工作。