楼主: com_iter
收起左侧

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

[复制链接]
发表于 2013-6-29 12:49 | 显示全部楼层 来自: 中国重庆
Foran应该是用的意大利Thinkdesign的核心,再自己开发的,这个公司被日本收购了,本来我们国家好像准备买过来的,唉,
回复 支持 反对

使用道具 举报

龙船学院
 楼主| 发表于 2013-7-2 18:54 | 显示全部楼层 来自: 中国上海
本帖最后由 com_iter 于 2013-7-2 19:00 编辑

     感谢版主整理与置顶!继续了。。。
   这里把顺序稍微调整一下,先说用户界面,最后再说船舶业务开发。a) 原来的顺序是从开发层次的角度,有前面三个模块做基础,加上基本的用户交互功能,如鼠标、键盘输入(其实这也是UI,但是我所说的是指当前流行的、友好的UI),就可以开始开发船舶设计相关的功能了。至于用户界面,可以放在最后。看到这里,或许有人会质疑,如果连对话框都没有,怎么实现那些功能。比如增新建一个结构,总得输入它的名字,选择它的材料,定义它的尺寸等等。从用户的角度看,确实如此,但是对于程序员来说,这些就是个表面现象,我们可以用很多办法让用户输入,比如最原始的cmd窗口、文本文件、甚至用网络通讯传输数据。因此,从这个角度来看的话,用户界面可以放到最后。b) 现在颠倒过来的原因是换了一个角度,即从模块的性质来分:除了船舶模块,其他都是基础或者说通用模块,也基本上是现成的或者需要稍加改造的模块。船舶模块是船舶设计软件研发的主战场,也是我个人相对比较熟悉的部分,但是出于商业上的考虑,我不方便说太多,希望大家谅解!不过我可能还会简单举几个小例子,让大家理解这五部分是怎么分工合作的。
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2013-7-4 14:16 | 显示全部楼层 来自: 中国上海
准备开发软件中 特来回复 支持一下楼主
回复 支持 反对

使用道具 举报

发表于 2013-7-6 20:34 | 显示全部楼层 来自: 中国上海
写的很不错,楼主继续
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-7 08:18 | 显示全部楼层 来自: 中国上海
sudosky 发表于 2013-7-6 20:34
写的很不错,楼主继续

过奖了,其实你也可以写一点的
回复 支持 反对

使用道具 举报

发表于 2013-7-9 14:14 | 显示全部楼层 来自: 中国辽宁大连
楼主写的非常好,继续啊
回复 支持 反对

使用道具 举报

发表于 2013-7-9 23:31 | 显示全部楼层 来自: 中国湖北武汉
图形图像处理是编程中比较难的内容,在软件行业这一块工资比较高,很羡慕人哦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-10 18:02 | 显示全部楼层 来自: 中国上海
allenspill 发表于 2013-7-9 23:31
图形图像处理是编程中比较难的内容,在软件行业这一块工资比较高,很羡慕人哦

你说对了一半,至于哪一半,我想很容易猜的。所以才会有那么多优秀的人才跑到国外或者到国内的外企去。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-10 19:18 | 显示全部楼层 来自: 中国上海
      让各位久等了,虽然反响不是那么大,我还是尽量写完吧!今天收个尾。

4)用户界面(UI)
    UI对于程序员来说,应该是相对简单的。这要归功于开发UI库的公司,尤其是微软,从win32到MFC,从.net到现在的WPF,这些库在功能越来越强大的同时,使用也越来越简单。当然还有很多其他的库,比如跨平台的QT,据说基本可以和WPF相媲美。
    但是不管那些库怎么变,UI开发本质上无非是建立用户和机器交互的方式。船舶软件和其他软件在这点上基本没多大区别。那么UI到底是怎么做出来的呢?下面我尝试用最浅显的例子来说明一下:
    大家肯定见过对话框,比如在注册用户的时候,如果用户名被人用了,会弹出一个对话框,上面提示“用户名已经存在!”。那么这个对话框是怎么来的呢?先抛开各种语言工具不谈,从操作系统(只说windows,其他类似)层次上说,它在核心层上有很大一部分是应用层,其中就包括了对窗口的支持。所以如果程序员要建立一个窗口,那么只需要在操作系统的应用层注册一个窗口就可以了,当然注册的时候要把窗口的各种信息包含进去,其中最重要的莫过于所谓的窗口处理过程,也就是说这个窗口的控制方法。这好比一个单身汉(为了叙述方便,简称ds)去婚介中心登记,然后嘱咐婚介中心工作人员:1)如果有女人关注我,请给我发E-mail;2)如果此女人年轻又有学历,直接打电话给我;3)如果此女年轻漂亮又有钱,那么离我远点(不适合ds);4)如果是男人.....这个...可以先去泰国;等等。这里婚介中心相当于操作系统,ds的个人注册信息相当于窗口,那些嘱咐的事情就是窗口处理过程了。当用户点了鼠标、按了回车键、鼠标拖动一下等等,操作系统会通过硬件收到很多消息,然后一看这个消息是给这个窗口的,就会调用这个窗口的处理过程,至于怎么处理,就要看具体的消息了,针对不同的消息,在窗口处理过程中应该有不同的处理分支。针对婚介所这个例子,如果有人关注,那么相当于有消息给ds了,然后进入处理过程(4种可能性)判断类型,分别处理。其他的windows上的界面基本都可以用这种模式来解释。
    上面那个例子肯定有不恰当的地方,不过我想还是基本能说明点问题的。这其实是UI最基础的部分,不管语言怎么发展,库怎么变化,最终还是要调用最底层的操作系统提供的功能。当然,操作系统提供的那些UI相关的功能复杂难学,想直接用那些功能做出漂亮的界面,费时费力还不一定能做出来。因此,正如我本篇开头说的,这么多年来,很多公司都开发了大量的界面库。
     基本上可以用这个结构来说明UI的位置:用户<>操作系统<>UI<>其他部分,符号“<>"指有交互。用户永远和操作系统(更准确地说是硬件,但是操作系统管理着硬件)打交道,然后通过UI去激活内部处理。比如要建一块板,用户会先用鼠标点击一下按钮“新建板”,然后弹出一个窗口“新建板”,这两个步骤还在UI部分,输入了各种参数后,点击确定,此时UI可以得到所有的参数以及命令,然后传给船舶设计软件的船体模块,此时UI模块的任务先结束了(UI或许会检查输入合法性之类的,略过不谈了),下面就是船体模块的事情了。等船体模块计算好,不管成功还是失败,还是会再次利用UI模块来告诉用户的,比如弹出一个对话框,写一行文字等等。
    有历史渊源的软件往往没有把UI当作一个层次来看待,或者根本没有层的概念。这个也可以理解,毕竟那时候软件还比较小。但是有眼光的软件公司早就开始把UI划分出来。这样做有一个非常大的好处在于可以把UI外包出去,自己做有技术含量的内部实现。而且UI的更新换代比较快,只要把接口做好了,几年以后再换一个也不是难事。那样,软件公司可以集中精力做自己所擅长的功能,又貌似跟上了时代的步伐,让客户有较好的体验。   
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-10 21:45 来自手机 | 显示全部楼层 来自: 中国上海
5)船舶设计模块
       以上说了那么多,其实还没有说到最关键的地方,和其他3d  cad软件没什么区别。船舶设计软件最核心的是这部分,但是,正如我之前说过的,这部分虽然是本人懂的比较多的,但是不能说太多太细的。
         从功能模块来讲,很多软件说明书上都有介绍,我就不多说了。这里就讲两个例子吧!1创建是管子模型,2是管子出图。提醒一下,这两个例子不符合实际的,我主要是为了说明这个功能是怎么结合以上模块开发出来的。
         1)创建管子。在做这个功能之前,要知道它怎么表达,怎么存储,怎么显示,怎么计算方便等等。管子的存储怎么样最简单呢?很容易想到的是存储管子的迹线,半径,厚度以及和其他对象的关系。所有这些都可以定义在一个数据结构里面,保存的时候也可以保存这些。当然,计算也可以用这个结构。但是有些时候,光有这些是不够的,比如要三维浏览,那么肯定要把这个结构变成可以三维显示的实体,比如用由面组成的体。这就有问题了,要不要把这个体的数据也存起来呢?否则每次要显示的时候都需要根据管子数据计算一次体,太费时间。但是如果保存实体数据的话,又好像有多余的数据。这个问题就留给大家思考了,呵呵!现在还有另外一个问题,在内存里怎么组织这种关系呢?面向对象的方法是针对这个管子数据,有一个对象实例,对象内部有一个指针指向那个实体,如果以线框模式显示的时候,这个指针可以是空的,实体模式才指向实体。当然也可以用别的办法,比如id,名字等。不过注意了,这个实体是属于几何造型模块的,和图形显示还没有什么关系。到图形显示模块,还会有个对象呢!不过它和船舶模块中的管子也有一一对应关系,这样才可以进行交互。比如用户用鼠标选中一个管子,选中的肯定是图形平台的管子,然后要做什么动作的时候,会找到管子定义数据,等等。总之,那几个对象都是互相关联的。至于怎么联,和所用的库,本身的设计思想有关。
        2) 管子出图。设计软件很重要的一块就是出图。为了说明软件的原理,这里假设需要出管子的剖面图,这个面是可以变化的。如果这个剖面和迹线垂直,那么剖面肯定是两个圆,根据定义数据中的半径和厚度就可以算出来。但是如果面有点斜呢?或者管子正好又有凸起,那么用这些数据就很难,这个时候实体数据就派上用场了,而且几何造型系统的很多算法在这个时候显示出其强大的力量!
         其实船舶设计建模里面还有很核心的一部分叫拓扑,或者参数化,这部分我想用过设计软件的朋友应该都比较熟悉的。但是它们是怎么做的呢?我想如果各位能看懂之前我说的这些,应该也有点感觉了。
        好了,就说到这里吧!希望各位多提意见,谢谢!
  
回复 支持 反对

使用道具 举报

发表于 2013-7-12 00:22 | 显示全部楼层 来自: 中国湖北武汉
在下略懂GDI+,DX和OPENGL
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-13 17:30 | 显示全部楼层 来自: 中国上海
allenspill 发表于 2013-7-12 00:22
在下略懂GDI+,DX和OPENGL

       光懂OpenGL或者DX只能做些功能相对简单的程序。要做点事情,起码把C++,windows(或者其他平台)编程和数据结构学好。
回复 支持 反对

使用道具 举报

发表于 2013-7-13 23:33 | 显示全部楼层 来自: 中国天津
楼主写的好多东西终于使我茅塞顿开,因为以前大学时纠结过,各种矛盾,没有条理,只能说谢谢楼主了,虽然现在自己只是应用各种船舶CAD软件了。
回复 支持 反对

使用道具 举报

发表于 2013-7-14 22:39 | 显示全部楼层 来自: 中国湖北武汉
com_iter 发表于 2013-7-13 17:30
光懂OpenGL或者DX只能做些功能相对简单的程序。要做点事情,起码把C++,windows(或者其他平台)编 ...

       搂住,其实你言重了,现在c#其实已经足够了好用了,而且现在做图形处理用C#居多 (不得不承认微软是一家伟大的公司),包括GDI+,DX,OPENGL里面的类已经做得很完善了,C++将来应用只会越来越窄,而且现在基本是JAVA和C#的天下.
       我说一下我的具体情况吧,我本来是搞舾装的,后来搞C#,做了有一年多的开发,主要用ASP.NET,学的不够精吧,但是据我所知其实C#已经不需要了解太多数据结构或者算法,因为微软把一些常见的数据结构都给你做好了(比如集合,泛型),拿来直接用就行.

回复 支持 反对

使用道具 举报

发表于 2013-7-14 22:46 | 显示全部楼层 来自: 中国辽宁大连
不错~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 23:12 来自手机 | 显示全部楼层 来自: 中国上海
本帖最后由 com_iter 于 2013-7-14 23:23 编辑
allenspill 发表于 2013-7-14 22:39 搂住,其实你言重了,现在c#其实已经足够了好用了,而且现在做图形处理用C#居多 (不得不承认微软是一 ...
如果不想深入底层,一般来说,用c#和一些强大的库,然后专注于船舶设计软件功能,确实能做出很好的东西,这点我不否认,其实这也是我非常希望看到的开发模式。但是,前提是要有好的基础!否则,很难想象能开发三维cad软件,当然,也有可能是我孤陋寡闻了。不过,据我所知,几大cad软件底层基本都是c/c++,但是上层或者外包的一些功能用其他语言比较多。你说的图形处理用c#居多或许主要指功能层吧。还有,你说现在基本上是c#和java的天下,c++会衰退,我希望你有机会去查查它们本身是用什么写的,它们跑的系统是用什么写的。不过对性能要求不是特别苛刻的应用开发倒确实如此。不管怎么样,欢迎参与讨论!
回复 支持 反对

使用道具 举报

发表于 2013-7-15 00:33 | 显示全部楼层 来自: 中国福建漳州
想向楼主请教个问题关于插值样条函数的。国际通用标准曲面函数nurbs曲线,我看了好久他的公式,它提供力的作用点以及改点对曲线的作用基函数,请问,当我已知曲面上的点如何反算出nurbs曲线的点和基函数的相关参数呢?谢谢不惜赐教
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-15 13:11 来自手机 | 显示全部楼层 来自: 中国上海
另壶冲 发表于 2013-7-15 00:33 想向楼主请教个问题关于插值样条函数的。国际通用标准曲面函数nurbs曲线,我看了好久他的公式,它提供力的作 ...

得知曲面上的点以及其导矢可以拟合出曲面,至于用插值还是逼近,次数多少,都可以自己来确定。具体你可以查看《the nurbs book》的第九章,翻译的中文版叫 《非均匀有理b样条》清华大学出版社。当然,所选的这些点及其导失也可以拟合出曲线。如果你的编程环境提供nurbs模块,直接查一下如何构造一个nurbs曲线对象就知道怎么做了; 如果没有这个模块,可以在网上找一个小的nurbs计算库,类似opennurbs。
回复 支持 反对

使用道具 举报

发表于 2013-7-16 20:00 | 显示全部楼层 来自: 中国湖北武汉
com_iter 发表于 2013-7-14 23:12
如果不想深入底层,一般来说,用c#和一些强大的库,然后专注于船舶设计软件功能,确实能做出很好的东西,这 ...

      C#的执行效率确实不如C或者C++ , C或者C++ 在底层应用较多这个不可否认,但是随着行业的成熟,软件也越来越成熟,真正从底层开始重新开发一套架构,好像还真不是太多,(如果你经常上51job或者智联的话,可以搜一下C++,然后再搜一下.NET和java便一目了然),而且目前经济形势也不是太好,各公司都愿意用最低的成本来做开发,这也是C#和java应用较广的原因之一吧!
     c#和java应该都是C派系的语言,至于他们本身是用什么写的,这句我没懂你的意思,他们跑的系统?你是指运行的环境吧?java是可以跨UNIX和windows平台的,c#嘛,其实也可以,只是微软做的比较独而已。
回复 支持 反对

使用道具 举报

发表于 2013-7-16 21:39 | 显示全部楼层 来自: 中国浙江舟山
另壶冲 发表于 2013-7-15 00:33
想向楼主请教个问题关于插值样条函数的。国际通用标准曲面函数nurbs曲线,我看了好久他的公式,它提供力的作 ...

曲面反求,可以通过曲线反求的方式近似一下嘛.首先可以分成UV两个方向,分别拟合成曲线,再两个求和公式,轻松搞定!不过,反求的方式应该还有很多.有兴趣可以多多尝试.
当下,是不是对大规模散乱点的曲面拟合挺热门的.如果技术成熟,修船上面的外板换板,可以不用去敲样箱,直接扫描一下.就能把曲面拟合出来了.这个到是有比较前景的应用.不知道有没有人这样做过!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 01:26

Powered by Imarine

Copyright © 2006, 龙船社区

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