基于AutoCAD的外板自动展开技术

2018-08-25 02:38陈茂勇
船舶 2018年4期
关键词:外板肋骨交点

陈茂勇 陈 飞

(上海外高桥造船有限公司 设计一所 上海200137)

引 言

外板展开图(Shell Expansion,以下简称SE)是船舶设计中最主要的结构图之一,反映了船体外板的结构形式、板规布置和分段划分等重要内容。传统手工外板展开的主要工作在于反复地求取各纵向构件与肋骨线交点在SE上的坐标,亦即反复量取各肋骨线在不同交点处的曲线长度(区间围长)。这种具备明确规则、单一且耗时的重复性工作,完全可由计算机程序来完成。AutoCAD作为通用的绘图软件,提供了强大丰富的基础绘图功能,但对诸多专业领域的支持仍显不足。故此,需对AutoCAD进行二次开发,借助程序实现船体外板的自动展开。

目前,已有同行尝试利用程序来辅助进行外板展开,但仍存在一些不足。主要体现在:

(1)肋骨型线的图层需严格命名[1],对数据源的适用性要求较高,且图层名携带的信息量有限;

(2)程序对肋骨型线的识别不够智能,需手动按顺序选择对象来保证展开的准确性[2];

(3)展开过程中仍需较多的手工干预[3],自动化程度不理想;

(4)不具备展开线的标准化功能。

对此,本文探讨了一种新的外板自动展开技术,较好地解决了上述不足。

1 技术原理及程序设计

1.1 技术原理

船舶设计中外板的展开是一种近似展开,即横向展开、纵向不展开。因此,船体外板上任意一点在展开后,沿船长方向的坐标保持不变,而沿船宽方向的坐标与该点在肋骨线上距中心线的曲线长度有关(如图1所示)。通常,SE是以肋骨型线图(Frame Lines,以下简称FL)为基础绘制而成。

图1 肋骨型线图和外板展开图

1.2 程序设计流程

AutoCAD为工程设计人员提供了诸多二次开发途径,其内嵌的AutoLISP/Visual LISP编程语言[4],实用且易学,在此被用作外板自动展开程序的二次开发工具。

为便于后文叙述,先定义两个概念:

(1)肋骨线 泛指船体外板曲面上处于肋位面内的任意构件线、板缝线或其他虚拟线。

(2)纵线 泛指船体外板曲面上与肋骨线相交的任意构件线、板缝线或其他虚拟线。

船体型线由两者共同组成。

根据近似展开原理,要将FL展开成SE,关键在于获取FL上纵线和肋骨线的交点,并计算出对应点在SE上的坐标。因此,程序需具备如下三个基本功能:

(1) 自动识别FL上的纵线和肋骨线;

(2) 自动获取纵线和肋骨线在FL上的交点;

(3) 自动计算交点在SE上对应的坐标。

此外,为减少展开过程中的手工干预,程序设计时增加如下两个重要的辅助功能:

(1) 自动提取平底线和平边线;

(2) 自动完成展开线的标准化。

实现自动展开的前提在于如何使程序“认识”并区分FL上的纵线和肋骨线。其中,肋骨线的肋位号识别是关键,它决定了SE上各点的横坐标。AutoCAD中普通的曲线图形上不包含肋位号信息,因而需要采用特定的方式对其进行编号,使之与对应的肋位号相互关联。

本程序通过赋予图元扩展数据的方法来实现与肋位号的关联。AutoCAD中每个曲线对象都是一个图元,图元的扩展数据随文档保存,不因编辑等操作而丢失。被赋予扩展数据的型线将具备一种额外的自定义属性,使其可以被程序“认识”并从复杂图形中筛选出来。扩展数据的使用,不会对图形造成任何可见的改变,但能被方便地编辑、查看和读取。

按上文分析,程序设计流程如下页图2所示,后文将以主要程序代码来进行介绍。

1.3 建立工程项

图2 程序设计流程

为提升程序自动化程度,这里引入工程项的概念。将外板展开过程中所需的各项固定输入条件写入到一个文本文件,作为工程项保存。在开始或继续一个工程前,先选择对应的工程项,输入条件将被读取到AutoCAD内存空间,作为全局变量供程序随时调用。工程项的设置,既避免了反复手动选择对象或输入各项参数的麻烦,还能使程序在不同项目间快速切换。

工程项主要包括肋距配置、FL/SE坐标原点定义和主尺度等相关参数。肋距配置是其中较为关键的一项,它决定了型线上各点展开后的X坐标。肋距配置同样被写入到文本文件,格式如图3所示。

图3 肋距配置文件

编写一个简单的肋距解析程序,只要给定肋位号,就可得到点在SE中X坐标。例如,求#54肋位的X坐标,计算公式为x=50×800+(FR-50)×860,将54代入公式中的FR即可。示例代码如下:

坐标原点的定义,使程序能够准确读取型线交点的坐标并在指定位置进行外板展开。

主尺度的定义,使程序能够根据型宽、型深和船长等数据将视图缩放到特定的范围。利用SSGET函数,将扩展数据作为过滤条件,程序可自动选择该范围内符合条件的型线;再配合VL-SORT函数,将肋位号作为对比条件对选择集中的型线(主要是肋骨线)进行排序,即可省去手动依次选择型线的操作。

1.4 型线的编号和识别

肋骨线以肋位号来编号,下面的代码可将包含肋位号的扩展数据添加到肋骨线上:

实现了肋位号的读取,只要配合肋距解析程序,就可求得FL上任意型线交点在SE上对应的X坐标。

同理,每条纵线亦可被编号。对上述代码稍作修改,将扩展数据注册标记″FR″更改为 ″LL″,将数据类型代码1040更改为1000即可实现。与肋位线编号不同的是,纵线的编号更加随意,编号可以是 ″L1″、 ″UPPER DECK″或 ″20400 A/B″等。因为这种随意性,程序可实现纵线的全自动编号,如″SL9000″、 ″SL9001″……依次递增。程序自动识别已编号的纵线,忽略未编号的纵线,这样可避免“一键”展开过程中无关曲线带来的干扰,降低了程序对FL的适用性要求。

相比于利用图层名等定义型线编号,上述方法不但不需修改FL的图层名,还能使型线携带更多有助于外板准确展开的附加信息。比如, 当FL中的#20~#115肋骨线在某一段完全重合,经过此段肋骨线的纵线起始肋位为#25,终止肋位为#110。如果仅凭与肋骨线的交点来展开,该纵线将在#20~#115肋位之间展开,超出实际区间。此时,可以在该纵线的扩展数据中再增加一组限定肋位区间的特定数据,程序在检测到这组数据时,该纵线将只在限定的肋位区间展开。

1.5 求解型线交点和肋骨线区间围长

欲获取肋骨线的区间围长,先要确定该区间的起点和终点。AutoCAD中的曲线均有方向性,程序中需增加对曲线方向的判断。假设肋骨线靠近FL坐标原点(中心线与基线交点)的端点为起点,则纵线与肋骨线的交点为终点。起点是确定的,终点需要求解。

为避免求解过程中的手工干预,提高自动化程度,程序设置了三个逐级嵌套的遍历过程(求解流程见图4)。

图4 交点求解流程

(1)通过识别型线的编号,可获取所有纵线的集合。遍历纵线集合,得到与任意一条纵线相交的肋骨线集合。示例代码如下:

(2)遍历肋骨线集合,获取任意纵线与肋骨线的交点集合。单个纵线与肋骨线的交点由下方代码求得:

1.6 外板展开

SE从中纵剖线开始展开,其上任意点的Y坐标为FL对应点处肋骨线区间围长加上肋骨线最低点到基线的距离。以图1中的P1点为例,肋骨线最低点到基线的距离为H1,P1处肋骨线区间围长为L1,则展开后对应点P1′的Y坐标为H1+L1。对于P2′,肋骨线最低点到基线的距离为0,其Y坐标为L2。

通过上文分析,已分别求得SE上点的X、Y坐标,将这些点有序连接起来,即可实现外板展开。

1.6.1 肋骨线展开

肋骨线展开后为一条直线段,因此,只要给出已知的起点P_S′和终点P_E′,即可生成肋骨展开线。最简单的方法是使用COMMAND函数来执行画直线的命令:

1.6.2 纵线展开

纵线展开是外板展开的主要内容,一般使用多段线绘制。假设某条纵线经由上述分析得到的交点集合为points,其中包括p1,p2…pn共n个交点。程序通过生成图元内部组码来新建多段线,代码如下:

需要指出的是,在FL中,船体中心线和甲板线也属于纵线范畴,可由程序自动展开。前者展开后为中纵剖线,后者展开后为甲板边线。因此,两者应同样被赋予纵线编号。船体首尾处的线型变化较大,增加FL上的肋骨线密度,可使纵线展开后更加光顺。

1.6.3 提取平底线和平边线

程序可实现自动提取平底线和平边线。事实上,平底线和平边线在FL上有其对应的虚拟纵线。前者为沿基线的直线段,后者为沿船体半宽的垂向直线段。在FL中绘制出这两条虚拟纵线并进行编号,即可由程序自动展开。不过,该方法的不足之处在于,这两条虚拟纵线的准确展开对型线精度要求极高,利用常规的FL展开后,往往不能得到令人满意的光顺线型。

解决这个问题的关键在于降低型线精度对纵线展开的影响,此处使用另一种方法来实现。以平底线为例,平底线在FL中与肋骨线的交点均位于基线上,且交点必定为肋骨线(二维多段线)上的一个节点。因此,只要提取出每条肋骨线与基线重合段最靠近舷侧的节点,转换成SE上对应的点,并连接成多段线即可。换而言之,各肋骨线的节点中,Y坐标为0,且X坐标绝对值最大的就是平底线在FL上所对应的节点。依此思路,问题即变为分析FL中肋骨线的节点坐标。为降低对FL的线型精度要求,可设置一个适当的允差T(如0.1)。假设肋骨线节点的Y坐标绝对值不大于T,则断定该点位于基线上(参考如下代码)。

其中fr_lst为按肋位号排序的肋骨线集合,可通过分析肋骨线的扩展数据得到。程序的运行结果为平底线在FL上对应的点集,经由程序转换成SE上的点集并连接成线,即为平底线。平边线可由类似方法提取。

2 标准化

至此,外板展开的主要内容已完全由程序实现。为减少后续手工干预,可由程序对展开线进行标准化设置,使之符合企业的绘图标准,包括图层、颜色、线型、线宽等内容。以图层设置为例,假设在绘图标准中,纵桁结构在图面上的标注名称为*GIRDER*,其图层名为LAYER5,普通纵骨展开线的图层名为LAYER1。用户可将*GIRDER*作为该纵桁编号,程序通过识别纵线的扩展数据,自动将编号包含*GIRDER*的纵线展开归入到LAYER5图层,其余则归入LAYER1图层。示例代码如下:

同理,将绘图标准中的颜色、线型、线宽等设置与型线编号进行关联后,可由程序自动完成对应标准化设置。

3 结 论

提升,还能有效避免展开过程中可能产生的误差和错误。在实际开发中,AutoLISP编程语言配合DCL(对话控制语言)可以展现友好的交互式界面,提升程序易用性。限于篇幅,文中所示的程序代码多经过简化,在此仅作为自动展开技术的载体而呈现。

上文借助对程序的解析,完整地阐述了外板自动展开技术,实现快速展开的目标。该技术经若干旧船型试应用和实船项目正式应用,其可靠性得到了有效验证。在具备完整FL的前提下,进行项目的必要配置和型线编号可在30 min内完成,而其后的外板展开过程只需约1 min便可完成。相比于传统的手工展开,外板自动展开不但在效率上呈数量级

猜你喜欢
外板肋骨交点
某车型D柱下外板焊合件结构设计浅析
浅述汽车钣金顶盖外板设计
汽车发动机舱侧边梁结构的优化
阅读理解
肋骨缺失应重视
借助函数图像讨论含参数方程解的情况
试析高中数学中椭圆与双曲线交点的问题
迷人肋骨
日安,白天
肋骨四位像应用总结