在船舶运动仿真、波浪载荷以及船舶配载等领域,船体型线数据扮演着关键角色。通过船体剖面数据能够进行诸多船舶水动力的计算[1]。剖面数据一般源自船舶二维型线文件,该文件描述了对应肋位的剖面数据,如需更密集的数据则需要进行插值获取,文献[2]在求解船体湿表面网格时采取了插值加密的方式,文献[3]在求解流场势中也使用了该方法,但插值计算过程较为复杂且有一定的局限性,若能直接从船体模型获取剖面数据则能避免这种局限性且简化计算过程。利用船体三维模型切片计算已有诸多成果,文献[4]提出一种利用水尺平面切割STL模型的方法进行船舶吃水转换,文献[5]利用几何算法库进行船体切片来计算船舶湿面积,因此在船体计算领域,快捷地获取精确的船舶剖面数据是计算的关键点。本文提出一种船体三维模型切片数据处理平台,结合3D打印中的核心技术[6],对船体STL模型进行切片处理,获取精确的船舶剖面数据,而且不局限于方向和数量,对于船体计算等领域有较强的应用价值。
1 船体三维模型处理平台 1.1 平台架构从平台设计的通用性及有效性出发,本文设计的船体三维模型切片数据处理平台包含4个模块,如图1所示。其中三维模型读取模块负责船体STL模型数据的读取;切片处理模块中能够对船体STL模型进行任意方向、任意数量的切片操作;数据冗余剔除模块能够对切片得到的数据进行过滤,减少冗余的数据点;数据可视化模块提供三维及二维切片数据的实时可视化功能。
船体三维模型切片数据处理平台界面如图2所示,主要包含三维显示、二维显示、切片控制3部分交互界面。
STL文件格式是一种三维模型中最通用的接口协议,本平台主要针对STL格式的模型进行处理。STL文件又称立体光造型文件,是三维实体模型经过三角化后得到的模型文件,其文件内容无序地列出了构成实体表面的所有三角形面片的信息。每个三角形由3个顶点坐标以及三角形平面的法矢量信息表示。STL文件分为ASCII和二进制2种格式,三维模型读取模块首先确定STL模型文件的格式,然后依据固定格式读取并保存模型中的三角面片数据,船体模型及三角面片如图3所示。
本文基于开源3D打印程序Slic3r[7]建立了一个STL模型切片接口类,利用该程序中的三角网格类Class TriangleMesh进行二次开发,实现了不同切片方向、不同切片数量的STL模型切片方法,并采取PIMPL模式对其进行封装,封装后的动态链接库接口简洁并与平台其他模块解耦,修改接口类方法对其他模块无影响。切片模块对外设计接口包含4项内容,分别是切片数量、切片轴、切片轴夹角、偏移量,切片将沿着切片轴方向进行,并按照指定的轴夹角和切片数量进行切片,通过交互界面可以输入或选择相应的数值进行操作。该模块内部定义了错误切面的判断标准,实现了切面的检测功能,当切面检测为错误时,利用输入的偏移量对切片位置进行小幅度的偏移并在新切片位置上重新进行切片。切片操作具体流程如图4所示。
读取STL模型后根据设置的参数进行模型的旋转,沿切片轴方向等分获取切片位置,保存为切片位置列表,根据位置列表循环切片,检测到错误切面时进行小幅度偏移,直到切面无错误为止,当切片位置遍历完毕后结束接片,并发送切片完毕信息。以KVLCC2模型数据[8]为例,切片数据如图5所示。
平台每执行一次切片操作就会保存相应的切片数据,为保证切片数据的结构清晰,本平台根据切片参数和STL模型名称对切片数据进行整理。对STL模型进行首次切片操作会生成以该模型名称附加SD(Slice Data)的文件夹,每一次切片数据会以STL名称+切片轴+轴夹角+切片数量+后缀SD为格式存储,本平台为切片数据制定了统一格式,并于接口类中实现了该格式切片数据的读写方法。
2.4 数据冗余滤除模块由于STL模型的复杂程度不同,其三角面片的数量不定,经过切片操作后的切面数据点可能过多且分布不均,不利用进一步计算,尤其在曲率变化较大的部位会产生大量冗余。因此为获得高质量、低冗余的切面数据,本模块实现了一种切面数据点的冗余滤除方法,该方法通过遍历数据点间距来获取间距的极值,根据该极值对数据点进行加密后再根据所需数据点数量进行二次提取以获得去冗余的切面数据,图6展示了5个不同部位的船舶横向切片数据去冗余前后对比。
本平台为切片处理设计了数据可视化模块,能够直观并迅速地展示切片结果,三维显示将STL原始模型和切片数据在同一界面内展示,可用鼠标进行旋转缩放观察,二维显示可对切片数据进行选择显示,根据所选的坐标轴向和切片序号展示相应的二维切片数据,该可视化模块可以便捷地观察切片数据,能够直观、即时地提供切片操作的验证,增强了平台的可靠性。
3 数据验证为进一步确保平台所获得的切片数据的准确性,本文选取椭球体模型和船舶模型进行数据验证,建立了5个不同长宽比的四分之一椭球体STL模型,部分模型及切片数据示例如图7所示,船舶模型采用KVLCC2。
由于椭球体形状规则,通过式(1)计算能够得到其体积
$ V = \frac{4}{3}{\text{π}}abc\text{。} $ | (1) |
依此理论值为基础,椭球体参数如表1所示。
在固定坐标轴、轴夹角的情况下,采取不同的切片数量对椭球体模型进行切片,基于式(2),利用切片面积积分计算该椭球体的体积。
$ \frac{1}{4}V = \int_0^L {{S_{2D}}} dL\text{。} $ | (2) |
将数值计算与理论值进行对比,相对误差如图8所示。
对KVLCC2船体模型进行不同数量的切片,基于切片数据计算船舶排水体积并于实际值比较,结果如表2所示。
经本平台切片数据计算所得的模型体积与理论值符合度较高,最大相对误差为0.129%,随着切片数量的增加,体积的计算精度有所提高并逐渐趋于稳定,因此在适当的切片数量和冗余参数下,既可以保证切片数据的精度又可以尽可能减少数据量,本平台为选取这样适当的参数提供了十分便利的条件。
4 结 语本文实现了船体三维模型切片数据处理平台,该平台主要包含读取不同格式的STL模型、进行任意方向和数量的切片、滤除切片数据的冗余、读写固定格式的切片数据和数据的可视化4项功能,通过实际算例验证,船体切片所得数据准确,冗余去除算法有效地减少了数据量,切片数据读写为后续研究工作提供了便利条件。在获取船舶剖面数据方面,能够有效地降低从船舶型值文件中插值计算的工作量,减少人为干扰带来的误差,该平台能够较好地应用于船舶运动仿真、波浪载荷计算以及船舶配载计算等领域。
[1] |
马山, 宋竞正, 段文洋. 二维半理论和切片法的数值比较研究[J]. 船舶力学, 2004, 8(1): 35-43. DOI:10.3969/j.issn.1007-7294.2004.01.005 |
[2] |
马山, 段文洋, 马卫星. 基于二维半理论的船舶水动压力预报方法研究[J]. 船舶力学, 2011, 15(1): 1-10. DOI:10.3969/j.issn.1007-7294.2011.01.001 |
[3] |
张海彬, 任慧龙, 宋竞正, 等. 一种船体三维湿表面网格自动生成方法[J]. 中国造船, 2001, 42(4): 61-65. DOI:10.3969/j.issn.1000-4882.2001.04.011 |
[4] |
刘春雷, 尹勇, 孙霄峰, 等. 基于STL模型的船舶吃水转换功能实现[J]. 舰船科学技术, 2016, 38(9): 69-73. |
[5] |
王智洲, 孙霄峰, 尹勇, 等. 基于三维设计数据的船舶湿面积计算[J]. 船舶工程, 2016(5): 5-8. |
[6] |
贺强, 程涵, 杨晓强. 面向3D打印的三维模型处理技术研究综述[J]. 制造技术与机床, 2016(6): 54-57. |
[7] | |
[8] |