查看: 21132|回复: 57
收起左侧

[其他] 船舶设计软件是怎么开发出来的?

[复制链接]
发表于 2013-6-17 18:42 | 显示全部楼层 |阅读模式 来自: 中国上海
本帖最后由 林黛玉 于 2013-6-29 11:13 编辑

      作为一个面向船人的论坛,这个板块的帖子大多是关于如何使用船舶软件。不过我想或许会有人好奇这些软件是怎么开发出来的,甚至有志于做这一行,因此我斗胆开了这个帖子和大家一起讨论。不感兴趣的朋友可以不用往下看了,呵呵!
      CAD软件不管是二维的还是三维的,首先要解决的是图形元素在计算机中的表达和显示问题。最简单的比如一个点,二维的可以表示为x和y,三维的自然就是x/y/z了。要显示它,可以用现成的库,比如微软的GDI/GDI+/DirectX,跨平台的OpenGL。有人可能会问如何存储和如何在屏幕中操作这个已经显示的点呢?这就是数据库技术和windows消息机制原理。有了几何图形,船舶的板啊,加强筋啊之类的自然也可以表示,这就是所谓的专业模块。除此之外,还要做大量的操作界面,如菜单、对话框等。综上所述,我认为船舶设计软件主要有五大模块组成:
     1)几何造型
     2)图形平台
     3)数据存储
     4)船舶专业功能(船体、舾装、出图等等)
     5)用户界面
    这五个模块中前三个是基础,它们一起支持着最重要的船舶专业功能,第五个往往被开发人员轻视,但是用户尤其是领导是非常关心的   接下去我会就每一部分以及它们之间的关系稍微展开一下,如果有人感兴趣,就会一直写下去,否则可能就太监了,哈哈!
==========================
(以下由版主林黛玉整理)
==========================
1)几何造型
    几何造型是CAD的核心和基础,近几十年来,国内外都有很多公司和机构在这方面做了大量的理论研究和工程实践。大名鼎鼎的数学家苏步青就是这方面的专家。不过做得好的还是在国外,不管是开拓性的贝赛尔曲线以及后来发展出来的NURBS,还是现代三维CAD(Catia,ProE,UG等等)的核心库。国内的清华英泰和中望也有自己的内核,不过估计还是有很大差距。现在世界上流行的几何造型库是Parasolid和ACIS。在船舶设计软件中,Tribon M2以后据说用ACIS了,Foran好像是用开源的OCC,CADDS5虽然和ProE是一家公司,但是作为被抛弃的产品,它还是用原来自己的库。衷心希望国内相关的公司能重视起这一块,只有基础扎实了才能走得更快更远,否则永远只是靠低价贱卖!
    啰嗦了那么多,那么几何造型到底做些什么呢?怎么做的?顾名思义,就是针对几何元素在计算机中进行造型,就像第一篇里面写的那个点。当然,点是比较简单的例子,CAD中什么复杂的元素都有。总的来说,主要可以分为两大类:规则的和不规则的。规则的如二维的直线、圆,三维的圆柱、正方体等等,不规则的就多了,简单地说,除了规则的都是不规则的!规则的元素的表达比较容易理解,大家可以回顾一下高数里面涉及到几何的部分。那么不规则的怎么表达呢?这就是几何造型系统要研究的主要内容之一。
    现代几何造型系统主要包括NURBS曲线曲面和Brep体的表达和针对它们的计算。关于NURBS,其作者写了一本《The nurbs book》,国内也有引进,翻译的还不错。可以说有了这三个基础,基本上世界上任何实物都可以表达出来。在船舶结构中,如一块长方形的平板,就是一个包含六个NURBS曲面的Brep体。但或许有人会说,用一个NURBS面加一个厚度不就可以表达了吗?或许还会有人说,一个面的四个顶点加一个厚度也可以表达啊!这涉及到两个问题,1)存储和显示可以分开,所谓的定义数据和模型数据。定义数据肯定可以转化成模型数据,但是为了加快显示速度,很多系统会保存算好的模型数据;2)定义数据统一化与否,NURBS不但可以表达不规则图形,也可以表达规则图形。不过它表达规则图形有点杀鸡用牛刀的感觉了,呵呵!
    几何造型除了表达实体,还有大量的计算,简单地比如求曲线长度,判断曲线是否封闭,难的如曲线曲面求交、曲线的合并、曲线到曲面投影等等。不过一般来说,针对船舶专业模块,需要在通用的接口上做适用的专业几何运算库。
    先说这么多,不知道有没有人看  
2)图形平台
    这部分和几何造型系统一样,也是计算机图形学研究的范畴,我也是略懂皮毛。以下还是把自己做过的、看过的、想过的随便聊聊,写得不好的地方请大家指导。
    所谓的图形平台,我的理解是把几何数据显示到计算机屏幕上。
    如果画简单的少量的图形,那么基本上直接用现有的库就可以了,比如最流行的OpenGLWindows平台下的GDI等。当然这并不是说这些库很简单,其实做好这种库非常难,因为它做的事情很大一部分是和硬件、操作系统底层打交道,还有很多图形学算法,最典型的抗锯齿算法、消隐算法等。大家有兴趣的话,可以看一下OpenGL红蓝宝书和一些图形学专业书籍。
     对于复杂的模型,如果直接用这些库而不做任何处理,那么效率是及其底下的。比如说,要显示一条整船,如果每个结构以及它的细节都显示,那么软件肯定会崩溃的。但是可以做很多优化,从外面看,内部不用显示;从远处看,细节不用显示;窗口外部的不用显示等等。这些任务就需要交给专门的库来完成了,在CAD领域有大名鼎鼎的hoops,开源的OSG等,在动画游戏领域也有一些,虽然和三维CAD的显示有很多相同之处,但是区别还是挺大的。我的理解是CAD的显示需要更高的精度,而动画游戏领域更加关注美观和速度。打个比方说,同样一条船,如果是在三维CAD里面,外壳显示的应该是NURBS曲面,但是在动画软件里面,可能由很多三角片面组成,因为那样更加容易渲染。
    针对CAD图形元素的显示,先说二维。简单的场景不需要任何优化,但当显示的二维图形超过一定数量时,不管是刷新的速度还是捕捉的速度都会变得非常慢,不过二维的问题或许主要就是这两个,尤其是刷新速度。之前也说过二维CAD的龙头老大AutoCAD做了一套自己的显示引擎,它的刷新速度非常快,我用OpenGL显示列表显示同样数量的几何对象都没有它快,关键又没增加多少内存使用。国内的中望CAD近几年比较火,但是刷新速度还是和它有明显差距。
    三维的显示就比二维要复杂的多了。不过幸运的是有强大的Hoops等库。至于它的原理,网上有一些介绍,有兴趣的朋友可以找找。
3CAD数据库
   这里所说的数据库是指存储CAD数据的容器及相应的读取接口,并不是指现在流行的商业数据库,如Oracle, SQL/Server等,为了叙述方便,借用一下这个名字。
   CAD软件的萌芽阶段,由于数据量比较少,所以一般都集成到CAD软件中。比如用MFC开发的软件,或许直接用自带的CDocument类把CAD数据存储在内存中,用序列化接口读写硬盘文件。然后自己来做一些性能优化的工作:比如为了加快查找速度,对每个数据加一个索引,利用BB+树组织数据存储方式;把频繁使用的数据放到缓存中等。这个阶段估计和其他用到数据库的软件差别不大。
    随着数据量的增大,操作的多样化,很多软件都会出现数据管理困难或性能出现瓶颈,这个时候数据库的重要性就开始体现出来了。发展到现在,很多软件干脆以数据库为核心,其他应用功能都围着它转。比如各种管理系统,在设计的初期就会把数据库的设计做为头等大事。包括最近几年很火的大数据、云存储之类,其实都是为了更好的组织、管理和使用数据。
    CAD数据库和其他软件的数据库有很多相同之处,但是也有其自身的特点,这主要是由于它的数据比较有特点。举个最简单的例子,存储一个公司的所有员工信息,先确定好字段就可以往里面填数据了,比如/姓名/年龄/性别/....然后可以填/张三/22//....。但是CAD数据库可不能这样,因为数据结构可能差别很大,比如一条直线就两个点,但是一个圆需要一个点和一个半径,样条曲线更复杂。。。有些地方可能还需要存一些图片,还要存各种关系:板架下有多少块板、筋,管子和阀的连接关系等等。如何高效合理地存储这些数据是很多国际著名CAD公司曾经头痛的事情,不过现在都纷纷有了自己的解决方案。其中比较出名而且容易理解的是利用XML,它对于船舶数据有一个非常大的特点在于它的树状结构,这和船舶模型非常吻合,比如船舶下面有很多分段,分段下面有很多板架。。。
    对比结构化数据库,XML类似数据库中的一个表形式。因此,要充分利用XML的特征,必须让很多XML文件有机组织起来,成为一套完整的CAD数据库解决方案。据我所知,很多国外的三维CAD软件已经早就完成了这种转变,而且效果非常不错。
    针对CAD数据库,所涉及到的远远不止以上所说的这些。不仅要考虑在通用数据库中也是非常核心的安全性(备份、还原、回退等等)、数据并发访问、高性能(查找、写入、传输等等)等,还要重点关注具体船舶软件中的数据结构和关系。设计好架构以后,还需要提供一套比较完整而简洁的访问接口。

   

评分

参与人数 1 +20 金币 +30 +10 +10 收起 理由
黑白循环 + 20 + 30 + 10 + 10 精品文章 期待整稿

查看全部评分

回复

使用道具 举报

龙船学院
 楼主| 发表于 2013-6-17 19:53 | 显示全部楼层 来自: 中国上海
1)几何造型
    几何造型是CAD的核心和基础,近几十年来,国内外都有很多公司和机构在这方面做了大量的理论研究和工程实践。大名鼎鼎的数学家苏步青就是这方面的专家。不过做得好的还是在国外,不管是开拓性的贝赛尔曲线以及后来发展出来的NURBS,还是现代三维CAD(Catia,ProE,UG等等)的核心库。国内的清华英泰和中望也有自己的内核,不过估计还是有很大差距。现在世界上流行的几何造型库是Parasolid和ACIS。在船舶设计软件中,Tribon M2以后据说用ACIS了,Foran好像是用开源的OCC,CADDS5虽然和ProE是一家公司,但是作为被抛弃的产品,它还是用原来自己的库。衷心希望国内相关的公司能重视起这一块,只有基础扎实了才能走得更快更远,否则永远只是靠低价贱卖!
    啰嗦了那么多,那么几何造型到底做些什么呢?怎么做的?顾名思义,就是针对几何元素在计算机中进行造型,就像第一篇里面写的那个点。当然,点是比较简单的例子,CAD中什么复杂的元素都有。总的来说,主要可以分为两大类:规则的和不规则的。规则的如二维的直线、圆,三维的圆柱、正方体等等,不规则的就多了,简单地说,除了规则的都是不规则的!规则的元素的表达比较容易理解,大家可以回顾一下高数里面涉及到几何的部分。那么不规则的怎么表达呢?这就是几何造型系统要研究的主要内容之一。
    现代几何造型系统主要包括NURBS曲线曲面和Brep体的表达和针对它们的计算。关于NURBS,其作者写了一本《The nurbs book》,国内也有引进,翻译的还不错。可以说有了这三个基础,基本上世界上任何实物都可以表达出来。在船舶结构中,如一块长方形的平板,就是一个包含六个NURBS曲面的Brep体。但或许有人会说,用一个NURBS面加一个厚度不就可以表达了吗?或许还会有人说,一个面的四个顶点加一个厚度也可以表达啊!这涉及到两个问题,1)存储和显示可以分开,所谓的定义数据和模型数据。定义数据肯定可以转化成模型数据,但是为了加快显示速度,很多系统会保存算好的模型数据;2)定义数据统一化与否,NURBS不但可以表达不规则图形,也可以表达规则图形。不过它表达规则图形有点杀鸡用牛刀的感觉了,呵呵!
    几何造型除了表达实体,还有大量的计算,简单地比如求曲线长度,判断曲线是否封闭,难的如曲线曲面求交、曲线的合并、曲线到曲面投影等等。不过一般来说,针对船舶专业模块,需要在通用的接口上做适用的专业几何运算库。
    先说这么多,不知道有没有人看  
   
回复 支持 反对

使用道具 举报

发表于 2013-6-17 20:02 | 显示全部楼层 来自: 中国江苏南通
请继续。。。
回复 支持 反对

使用道具 举报

发表于 2013-6-17 21:34 | 显示全部楼层 来自: 中国浙江嘉兴
楼主对图形编程有很深的造诣,非常好,学习了,望继续
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-17 22:19 | 显示全部楼层 来自: 中国上海
      谢谢245381038 和bw01的鼓励,我对船舶设计软件开发也只是初入门径,毕竟这是一个非常庞大的系统。希望得到大家的指点!也希望有更多的人加入到这个行业。
    继续几何造型系统,如果有人感兴趣,可以去研究一下开源的OpenCASCADE,虽然它的精确性和完整性不像商业的ASIC和Parasolid,但是简单地使用还是可以的。
    作为CAD软件的开发,最重要的可能就是如何使用那些类、如何调用那些API了。但是这其实并不容易,针对不同的情况,也会需要做很多工作的,有时候或许并不比核心简单。比如要找出很多杂乱无章的NURBS曲面的最外边界、把很多部分重合的NURBS曲线像拧绳子一样变成一条,就非常复杂。再比如船舶中的外板展开,逆直线,结构图等等,都需要对曲线曲面做大量的计算,光靠内核的API是远远不够的。
    总之,有了几何造型系统,CAD系统就有了很好的基石,但是还需要进一步拓展!
回复 支持 反对

使用道具 举报

发表于 2013-6-18 11:54 | 显示全部楼层 来自: 中国上海
本帖最后由 kulataxi 于 2013-6-18 11:59 编辑

图形与算法几何不容易。
需要良好的代数几何理论功底
微分几何与积分几何在处理复杂几何问题时及其有用。在代数几何,微分几何与积分几何面前,空间解析几何如此基础,可惜阿拉从来没有明白过。
分形几何在船舶设计软件面前不知有没有用?
回复 支持 反对

使用道具 举报

发表于 2013-6-18 12:26 | 显示全部楼层 来自: 中国江苏南通
有一种开发语言叫做OPENGL
回复 支持 反对

使用道具 举报

发表于 2013-6-18 12:36 | 显示全部楼层 来自: 中国浙江衢州
本帖最后由 niumuguang 于 2013-6-18 13:00 编辑
com_iter 发表于 2013-6-17 22:19
谢谢245381038 和bw01的鼓励,我对船舶设计软件开发也只是初入门径,毕竟这是一个非常庞大的系统。希 ...

达人,acis那些库太底层了吧,有个图形开发库叫做open inventor,基于openGL的一个库,封装程度很高开发效率大大提升,国内也有公司在用,他的开源版为coin3D。我个人才疏学浅就用过它,OIV中对nurbs曲线做了很多函数方便用户使用,先生您说的其他的图形库我会去学习的,谢谢您的分享。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-18 17:24 | 显示全部楼层 来自: 中国上海
kulataxi 发表于 2013-6-18 11:54
图形与算法几何不容易。
需要良好的代数几何理论功底
微分几何与积分几何在处理复杂几何问题时及其有用 ...

是的,图形方面确实非常难。但是术业有专攻,作为船舶CAD软件开发来说,可以使用比较成熟的几何库,而不再需要纠结于那些数学方面的东西。大名鼎鼎的ProE最开始也从几何造型开始写起,但是后来还是用更加成熟的库了,自己更专注于相对应用的开发。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-18 17:39 | 显示全部楼层 来自: 中国上海
niumuguang 发表于 2013-6-18 12:36
达人,acis那些库太底层了吧,有个图形开发库叫做open inventor,基于openGL的一个库,封装程度很高开发效 ...

       达人称不上,呵呵!您说的几个库我以前没听说,刚才网上搜了一下,感觉它是一个集成了几何造型、显示、存储和界面的开发库。其实这样的平台有很多,开发一些小型的图形系统应该问题不大,但是如果要开发大型三维CAD系统的话,应该还不行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-18 18:27 | 显示全部楼层 来自: 中国上海
     我觉得很多人可能不太容易分清我所说的五大库中四个基础库,这里再稍微解释一下。大家应该都用过AutoCAD,AutoCAD之所以能发展地这么好,很重要的原因是它的开放性。也就是说它提供了一个平台,用户可以在它的基础上做二次开发。我认为它的基础也是那四大库。做过CAD二次开发的朋友肯定知道它有一个包括9个表的所谓database,所有的元素都会存储到那些表中,包括自定义实体。那么这九个表组成的database就是一个小型的数据库;至于几何造型库,应该可以更容易理解,所有的几何基础类(如AcDbCircle)和一些计算类(好像是AcGe...)都可以归到这里;二维显示模块一直是AutoCAD最有技术含量的模块之一。不过这一块已经被封装起来了,不用特意调用什么函数去显示,凡是放到database里面中的图形类(MODEL_SPACE/ PAPER_SPACE)都会自动显示,当然显示的时候会考虑元素的线性、颜色等等;最后是界面模块,我记得二次开发库ARX提供了支持MFC的库。近几年AutoCAD发展也蛮快的,估计又有很多新功能、新接口,但是我想怎么也逃不开这四大模块。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-18 22:09 | 显示全部楼层 来自: 中国上海
2)图形平台
    这部分和几何造型系统一样,也是计算机图形学研究的范畴,我也是略懂皮毛。以下还是把自己做过的、看过的、想过的随便聊聊,写得不好的地方请大家指导。
    所谓的图形平台,我的理解是把几何数据显示到计算机屏幕上。
    如果画简单的少量的图形,那么基本上直接用现有的库就可以了,比如最流行的OpenGL,Windows平台下的GDI等。当然这并不是说这些库很简单,其实做好这种库非常难,因为它做的事情很大一部分是和硬件、操作系统底层打交道,还有很多图形学算法,最典型的抗锯齿算法、消隐算法等。大家有兴趣的话,可以看一下OpenGL红蓝宝书和一些图形学专业书籍。
     对于复杂的模型,如果直接用这些库而不做任何处理,那么效率是及其底下的。比如说,要显示一条整船,如果每个结构以及它的细节都显示,那么软件肯定会崩溃的。但是可以做很多优化,从外面看,内部不用显示;从远处看,细节不用显示;窗口外部的不用显示等等。这些任务就需要交给专门的库来完成了,在CAD领域有大名鼎鼎的hoops,开源的OSG等,在动画游戏领域也有一些,虽然和三维CAD的显示有很多相同之处,但是区别还是挺大的。我的理解是CAD的显示需要更高的精度,而动画游戏领域更加关注美观和速度。打个比方说,同样一条船,如果是在三维CAD里面,外壳显示的应该是NURBS曲面,但是在动画软件里面,可能由很多三角片面组成,因为那样更加容易渲染。
    针对CAD图形元素的显示,先说二维。简单的场景不需要任何优化,但当显示的二维图形超过一定数量时,不管是刷新的速度还是捕捉的速度都会变得非常慢,不过二维的问题或许主要就是这两个,尤其是刷新速度。之前也说过二维CAD的龙头老大AutoCAD做了一套自己的显示引擎,它的刷新速度非常快,我用OpenGL显示列表显示同样数量的几何对象都没有它快,关键又没增加多少内存使用。国内的中望CAD近几年比较火,但是刷新速度还是和它有明显差距。
    三维的显示就比二维要复杂的多了。不过幸运的是有强大的Hoops等库。至于它的原理,网上有一些介绍,有兴趣的朋友可以找找。
回复 支持 反对

使用道具 举报

发表于 2013-6-19 16:30 来自手机 | 显示全部楼层 来自: 中国江苏无锡
呵呵....
回复 支持 反对

使用道具 举报

发表于 2013-6-20 08:13 | 显示全部楼层 来自: 中国广东广州
有可能举一些实际设计软件的例子来说明?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-21 19:09 | 显示全部楼层 来自: 中国上海
     看来感兴趣的人不多,或者有些高手觉得我太菜,懒得回复。不管怎么样,我还是坚持写完吧!我的初衷是自己概括性地把这几点先抛出来,然后和大家一起再深入讨论。不光技术,或许还可以讨论一些前景之类的。废话少说,继续了。。。。
   3)CAD数据库
   这里所说的数据库是指存储CAD数据的容器及相应的读取接口,并不是指现在流行的商业数据库,如Oracle, SQL/Server等,为了叙述方便,借用一下这个名字。
   在CAD软件的萌芽阶段,由于数据量比较少,所以一般都集成到CAD软件中。比如用MFC开发的软件,或许直接用自带的CDocument类把CAD数据存储在内存中,用序列化接口读写硬盘文件。然后自己来做一些性能优化的工作:比如为了加快查找速度,对每个数据加一个索引,利用B、B+树组织数据存储方式;把频繁使用的数据放到缓存中等。这个阶段估计和其他用到数据库的软件差别不大。
    随着数据量的增大,操作的多样化,很多软件都会出现数据管理困难或性能出现瓶颈,这个时候数据库的重要性就开始体现出来了。发展到现在,很多软件干脆以数据库为核心,其他应用功能都围着它转。比如各种管理系统,在设计的初期就会把数据库的设计做为头等大事。包括最近几年很火的大数据、云存储之类,其实都是为了更好的组织、管理和使用数据。
    CAD数据库和其他软件的数据库有很多相同之处,但是也有其自身的特点,这主要是由于它的数据比较有特点。举个最简单的例子,存储一个公司的所有员工信息,先确定好字段就可以往里面填数据了,比如/姓名/年龄/性别/....然后可以填/张三/22/男/....。但是CAD数据库可不能这样,因为数据结构可能差别很大,比如一条直线就两个点,但是一个圆需要一个点和一个半径,样条曲线更复杂。。。有些地方可能还需要存一些图片,还要存各种关系:板架下有多少块板、筋,管子和阀的连接关系等等。如何高效合理地存储这些数据是很多国际著名CAD公司曾经头痛的事情,不过现在都纷纷有了自己的解决方案。其中比较出名而且容易理解的是利用XML,它对于船舶数据有一个非常大的特点在于它的树状结构,这和船舶模型非常吻合,比如船舶下面有很多分段,分段下面有很多板架。。。
    对比结构化数据库,XML类似数据库中的一个表形式。因此,要充分利用XML的特征,必须让很多XML文件有机组织起来,成为一套完整的CAD数据库解决方案。据我所知,很多国外的三维CAD软件已经早就完成了这种转变,而且效果非常不错。
    针对CAD数据库,所涉及到的远远不止以上所说的这些。不仅要考虑在通用数据库中也是非常核心的安全性(备份、还原、回退等等)、数据并发访问、高性能(查找、写入、传输等等)等,还要重点关注具体船舶软件中的数据结构和关系。设计好架构以后,还需要提供一套比较完整而简洁的访问接口。

   
回复 支持 反对

使用道具 举报

发表于 2013-6-21 20:23 | 显示全部楼层 来自: 中国广东珠海
长知识了~谢谢楼主···
回复 支持 反对

使用道具 举报

发表于 2013-6-22 19:58 | 显示全部楼层 来自: 中国广东江门
感觉有点懂了
回复 支持 反对

使用道具 举报

发表于 2013-6-23 09:06 | 显示全部楼层 来自: 中国江苏南通
涨见识了,谢谢楼主
回复 支持 反对

使用道具 举报

发表于 2013-6-23 09:47 | 显示全部楼层 来自: 中国浙江舟山
请楼主继续。。。
回复 支持 反对

使用道具 举报

发表于 2013-6-28 13:45 | 显示全部楼层 来自: 美国
请继续
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|标签|免责声明|龙船社区

GMT+8, 2024-4-24 10:31

Powered by Imarine

Copyright © 2006, 龙船社区

快速回复 返回顶部 返回列表