大型 CAD软件架构-------------开源代码

 

大型 CAD软件架构-------------开源代码  

2011-03-03 16:25:00|  分类: 默认分类 |  标签: |字号 订阅

现在网上有很多开放源代码的CAD可以看,总结一下。


OpenCASCAD

网址是:http://www.opencascade.org/

开放源码可以下载,商业版本比开放源码版本要新,最新可下载版本为6.0。架构很完整,包括几何核心,实体建模核心,文件数据处理,显示渲染,等等。代码比价多,编译复杂,需要下大力气研究,适合在校学生研究,要是老师研究明白,用来讲CAD软件或者大型软件开发是个很好的例子。

有一些基于这个库开发自己的CAD的项目:AnyCAD,国人开发的,网站下不到了,有博客可以看:http://www.cppblog.com/mythma/。还有一个基于Python来做的封装的:pythonOCC,http://www.pythonocc.org/


Wild-cat

网址是:http://code.google.com/p/wildcat-cad/, 作者blog是:http://wildcat-cad.blogspot.com/

这是个使用GPU技术做显示的CAD。主要集中在几何部分,支持Trimmed-surface,还有几何求交的部分。注意,有些时候这个网站由于众所周知的原因上不去。


BRL-CAD

网址是:http://brlcad.org/

这个软件有意思,是美国军方开放出来的,开始是一个打赌之后的作品。开始设计的目标是显示坦克的设计!使用了CSG实体建模技术,比较完整的软件,可以参考。文档比较全,还有很多人关注。


QCAD

网址是:http://www.qcad.org

QCAD社区版本是基于GPL开放源代码的。这个软件使用了QT作为GUI,所以是跨平台的软件。支持Wndows,MacOS,Linux。软件模块比较全,可以作为开发的参考。


Intellicad

严格来说这个现在不是开放源代码的。是个社区软件,只有会员能拿到源代码。国内很多公司都是会员,例如中望,浩辰。我看到的是网上找到的2000年的时候的版本,看起来bug太多,代码也比较旧。但是可以作为参考。

这些都是比较完整的基于C/C++的开放源代码的CAD。当然也有其他语言的开放源码CAD,但作为实际生产用的CAD软件,我们暂时不考虑其他语言开发的。当然,将来的网络CAD是什么样子,我的小脑袋还看不到,呵呵。


分类: CAD, 软件架构设计 标签: 开放源代码
跨平台CAD软件开发
2009年6月24日 没有评论

拜金融危机所赐,很多CAD厂商打算把产品移植到MacOS,Linux等平台上。从Bricsys 公司和Graebet 公司的经验中,我们可以学习到如何移植你的CAD软件。

第一步:

重写那些依赖于微软API的代码。Bricsys 使用wxWidgets,这是个优秀的跨平台GUI库。开放源代码并且有很多社区的支持。Graebet 公司使用Qt。这个代码库刚刚被Nokia收购,现在可以使用LGPL授权来使用了。这步大概花费了1.5到4年的时间,涉及到95%~98%的代码。

第二部:

为各个平台修改软件,适应不同的操作系统。2~5%的代码是和特定平台有关系的,例如文件操作,GUI,设备驱动等。对于不同的操作系统,问题是不同的:


Linux:用户不是很在乎图形界面,可以稍作修改即可,直接使用Windows的界面设计。比较麻烦的是软件安装,打印机驱动等问题。


MacOS:必须重新设计图形界面,主要的问题是鼠标要适应CAD软件的交互应用。软件安装和打印驱动倒不是问题。


第三步:

测试再测试,然后发布产品。这两个公司做法不同:

Bricsys打算先发布Linux版本,这是由于已经有客户需求。MacOS的版本则要等到发布之后才开始开发。Graebert则同时开发三个平台的产品,Windows,Linux,MacOS。在90年代初,有很多CAD软件运行在不同的操作系统中,DOS,Unix,Macintosh,Atari。然后由于微软的兴起,人们花费巨大代价将所有的软件移植到Windows,现在,这些公司又开始Undo了。


分类: CAD, 软件架构设计 标签:
特征建模和参数化
2009年5月31日 没有评论

   特征建模(Feature modeling)和参数化设计都是比较流行的概念,但是很多人容易混淆。

   比如SolidWorks有基于特征的建模,提供了特征树,和相应的工作流程。同时,在草图阶段,尺寸驱动的操作方式,让人以为这就是参数化设计了。这两个概念理解都很微妙,很多时候大家都在混着用。CAD开发人员和用户,都在按照自己的理解来使用这两个词。

    特征建模有着比较完整的特征定义,也就是说,软件中定义一个特征,意味着用户按照一定的规则生成设计结果。通常有历史记录,也就是特征树来配合建模。对于每一种特征,每个软件的定义不尽相同,但是每个软件的特征系统都试图准备出足够的特征种类,让用户能够设计出他们需要的结果。一般来说,这些特征系统都是封闭的,也就是说用户无法添加自己定义的特征到系统中去。而每个特征都是由一些基本操作生成,例如旋转,拉伸,布尔操作等等。用户需要经过训练,才能掌握软件。

    在特征建模中,有参数化的影子,实际上特征证实由许多的参数来驱动,使得我们可以在固定的操作流程下(特征树),通过修改参数,得到不同的设计结果。特征树的每一个节点,实际上是一个特征建模过程的结果,也就是一个实际的设计结果,几何实体。

    参数化建模含义要广阔的多。在机械CAD中,有着成熟的特征系统,开发人员和用户可以讲同一种语言。但是在其他行业,例如在建筑行业,特征的建立则相对困难,尽管几何操作没有机械行业那么复杂。在机械行业CAD中,特征建模系统是不欢迎新的特征的。但是在建筑等行业中,则必须开放特征系统。也就是说,一定要允许用户或者二次开发商定义自己的特征,也就是参数化组件(parametric components)。这样的参数化系统中将给用户带来极大的方便,但同时也提高了开发的困难程度。

    一种参数化实现的方式是提供基本的几何 操作和其他数据操作的接口,然后提供一个依赖框架。在这两个基础上,实现一些基本的参数化组件,并实现组件框架,以便能够让其他的参数化组件加入进来。这种实现方式比较直接,CAD开发商有最大的控制权。但是,缺点是新的参数化组件需要做开发。对于最终的用户来说,效率不是最好。这种方式实现的例子有Microsoft Visio, AutoCAD2010. 

   还有一种实现方式,就是过程式的。系统同样提供建模的核心支持,几何操作,数据操作等等。系统还要提供一个记录建模过程的建模环境,一般是使用脚本来记录用户的建模操作。用户在使用软件时,可以使用图形界面,或者结合简单的脚本,利用这些核心功能,来生成用户需要的设计结果。设计过程记录在脚本文件中。用户可以随时生成最终的设计结果;或者重新修改其中的某一些步骤;或者把某些步骤抽出来,组装成用户自己的组件。这个脚本依赖于这个CAD系统。同时这个脚本也可以作为交流的工具。这种方式,适合建筑师推敲式的建模习惯。使用这一方式的软件有Bentley的GenerativeComponents 和Rhino Grasshoper。


分类: 软件架构设计 标签: 参数化设计
CAD软件开发要点
2009年5月27日 没有评论

从某牛人那里学来的单子,共享一下,该牛人的Blog在国内是上不去的,嘿嘿。


需要改正的
做错的事情
做的很草率的事情
不该做的事情

我的话:很多事我们只是不去做,因为版本要保持兼容性,等等。其实很多很差的功能还遗留在系统中。当软件变得很庞大,我们不得不花很大的精力使得整个工具系统完备(这是个数学名词,呵呵),也就是是工具系统能够完成用户大部分的需求。如果那些不好的功能妨碍了我们,那就要考虑重构整个系统的工具的设计。


Bugs
这是正确的
找个办法绕过去
这是个新特性

我的话:很多时候,我们对待bugs的态度就是这样。这也是对用户负责任(这么说听起来不对,如果做过长时间的产品发布管理就会明白这个道理)。不过这有个前提,那就是要保证你的软件经过充分测试之后,才发布。如果用户发现了愚蠢的错误,那就是我们开发者的错误了。


回归测试
删除旧的混乱的代码
重新开始开发

我的话:回归测试非常重要,如果没有回归测试,那就不要做上面这两件事情。


代码重构
增加单元测试
按照契约编程
使用敏捷的开发流程管理
使用.NET

我的话:我对.NET持有疑问。如果做行业应用,专业应用,可以使用,而且最好使用,这个可以提高效率。但是,对于CAD平台本身,最好不要用这个技术。实践证明过,嘿嘿。


国际化
过程标准化
本地化开发

我的话:良好的国际化工具很重要。最好做多语言版本的流程和开发分开。将需要做翻译的部分从开发系统中抽出来翻译,然后能够无缝的和发行版本结合起来,这就是这种系统的工作目标了。这需要在CAD软件架构设计之初就考虑到。如果已有架构,那就要考虑重构了。也有一些工具,可以直接翻译编译好的资源,但这个毕竟作用有限。翻译之外,更加重要的是:复查,这个需要有本地的工程师协助,使得符合本地的习惯。中国有中国的行规,翻译的人不一定真正了解。


运行效率
大模型测试
交互操作的效率
多线程
64位

我的话:这些都是金玉良言。很多时候忘了测试的东西。


缺少的功能
你知道的功能
你不知道的功能
新功能
核心工具
API
与行业习惯兼容
生态系统,包括web service,SOA,twitter,youtube等。
专业模块,包括钣金,模型,过程设计,知识管理。
竞争驱动
合同驱动
用户希望功能列表
合作伙伴需求
CEO的创意
未来的趋势

我的话:这里面既有新功能的来源,也有新功能的方向。


平台
软件
硬件
新的开发工具
更快,更好,更强壮
能在手机上运行么?

我的话:手机是未来的方向,我们要密切注意这个趋势。还有微软的多触点技术,大屏幕显示技术,都是未来的重点方向。


更新
新的建模核心
新的约束引擎
新的文件格式支持

我的话:在一个版本稳定之后,就不要随便增加新工具。如果用户需要,可以提高更新的频率。


集成
自有的软件
其他公司的软件
能够帮助开发的软件
分类: 软件架构设计 标签:
协同设计之二
2009年5月25日 没有评论
协同设计中的协调工作

协调工作(Coordination)是协同设计系统中非常重要的部分。通常在一个设计周期内,好的协调工作包括:


组织协同参与者;
分享交换数据;
冲突处理;
工作周期管理和协调;

经常可以使用电话会议,白板等工具。对于工作团队,需要适当的组织结构。组长,组员这种架构,利于处理冲突,协调工作内容。


冲突管理。尽管可以进新设计协调设计系统,但是还是很难避免冲突的发生,那么冲突管理非常重要了。这个既需要设计团队组织上的支持,同时也要在软件实现中有所体现。
工作周期管理。每个工作周期必须由管理者和参与者,支持者三个角色。管理者管理设计周期的各种活动,参与者负责设计,支持者负责查看,检查设计。在同步设计模式中,可以使用控制令牌来做协同,只有拥有令牌的人才能修改文件,其他人则可以查看数据。任何时候,只有一个人可以拥有令牌。对于异步设计模式,需要小心处理工作计划。
分类: 软件架构设计 标签: 协同设计
协同设计之一
2009年5月25日 没有评论

经济全球化,越来越多的项目要求分布在不同地理位置的人组成一个团队来工作。在这个背景下,协同设计在CAD软件开发中的重要性越来越突出。


什么是协同设计

现代的CAD系统主要是为用户提供设计工具,帮助用户生成设计结果。设计过程是流程化的,一步接一步进行的。两个人不能同时在一个设计文件上工作,同时,设计文件要从设计师,到结构工程师,到最后施工工程师等等。每一个专业都有自己的需求和设计结果。经常发生的情况是,后续专业的修改要返回到之前的专业重新设计。

协同设计系统,分布在不同地方的工程师可以使用网络共享工作内容。这个系统同样可以设计人员和供应商,制造商已经客户保持紧密的联系,提高沟通效率。但是,复杂的交互设计工具,知识产权,网络安全等等原因,甚至还有不同行业的工作背景等原因,是的协同设计在现代CAD系统中的应用受到了限制。


协同设计的分类
同步的和异步的。

在同步的协同设计中,用户在同一个设计文件上工作同时进行工作。要求很好的网络环境和实时的文件同步机制。那么协同系统要求有高效的通讯系统和冲突处理系统。

在异步的系统设计中,参与者不必同时在设计文件上工作,设计的结果也不必立即传递给其他参与者。设计更改的合并,实在是在用户的要求下进行的。例如对某一项目,一个总设计师,负责结构装配,部件设计交给其他设计师。这种系统中不要求数据的实时传递。


横向的和树状的。

横向的协同工作模式,意味着几个设计师同时在一个文件上工作。

树状的协同工作模式,是说几个人有不同的设计内容,例如,结构,建筑,装配,等等。这些不用专业之间需要正规的交流渠道和工作交接标准。


查看和编辑

在产看过程中,所有人可以查看其他人的工作内容,但是是只读的,不能编辑。

在编辑过程中,所有人都在编辑,并且向其他人发送编辑结果。


协同设计架构
瘦服务器-胖客户端

客户端负责设计和通讯功能,而服务器负责同步数据。


胖服务器-瘦客户端

建模过程在服务器端进行。客户端只是做图形显示。这种架构的好处是客户端简单,可以在互联网上部署使用,方便地理位置分散的项目使用。适合项目较小的情况,节约成本。而且考虑到网络速度对设计过程的影响。


应用/服务共享

这种模式中,没有客户端服务器之分。类似于P2P网络的架构。不需要服务器,可以降低维护成本。但是信息同步的代价比较高,适合比较小的工作组。


分类: 软件架构设计 标签: 协同设计
CAD软件中的参数化设计系统
2009年5月24日 没有评论

  自从CAD软件问世以来,它已经迅速渗透到机械、航天、纺织、电子等各个领域,发挥了巨大的作用,产生了令人瞩目的经济效益。国家科委于“九五”期间发起了“甩图板”运动,使得CAD技术在我国工程设计领域得到了极为广泛的应用,极大地提高了设计效率、缩短了设计周期。

  尽管如此,由于设计活动是一个智能化程度很强的活动,传统的CAD系统并不能很好地适应这个特点。从某种角度来说,设计活动是一系列不同特点的问题求解过程,设计问题就其本质来说是一个约束满足问题,即从系统的功能、结构、材料及工艺等方面的设计要求,得到满足这些设计条件的设计对象。而传统的CAD系统的设计较为简单,实际上帮助人们绘制设计的结果。没有真正参与到设计决策当中,帮助人们求解设计约束。从而使得CAD系统仅仅局限于辅助几何造型和工程绘图。

  1988年PTC推出的以约束驱动为核心的特征参数化CAD系统Pro/E。这一软件利用人工智能领域的专家系统和约束管理等方面的研究成果,帮助用户建立较为完善的产品模型,支持智能化的设计过程,并能进行参数化设计和变量化设计。Pro/E的成功使的CAD系统的开发者与研究者意识到了约束技术在未来CAD系统技术中的关键作用,从而致力于该技术的研究与开发。基于约束的CAD系统已被誉为CAD技术发展史上的一次革命。约束的表达、维护和求解已经成为新一代CAD系统的一个重要特征。

   目前二维几何约束求解技术已经较为成熟,在草图设计、参数化设计等方面己经有了较为成功的应用。AutoCAD2010就是最新的成果。在这个版本中,AutoCAD利用D-Cube提供的约束求解技术,开发了最新的参数化设计工具。操作界面也相对简单,明了。

   AutoCAD可以看作是典型的Computer Aided Drafing的软件,现在加入了参数化设计的功能。这表明CAD软件的参数化趋势已经明朗。通常,参数化这种功能都是机械等领域中的应用。需要用户有比较强的应用背景和经验。在建筑设计等领域,最近几年开始逐渐接受这些参数化设计的概念。


分类: 软件架构设计 标签: 参数化设计
CAD软件架构之事件处理
2009年5月21日 没有评论

事件处理,是用户界面子系统的基础。流行的GUI类库,都有自己的一套。MFC就比较懒了,直接使用windows消息系统。如果我们只考虑windows系统的话,那么使用系统消息是最简单的方式。但是在系统消息基础上,我们要进行自己的封装。windows消息众多,CAD主要关心的有以下几类消息:


 鼠标,键盘。
窗口消息。
外接设备消息,比如HP的3d鼠标,数字化仪,手写板等等。

由于操作的特殊性,我们可以把很多消息进行重新定义。比如鼠标左键消息,包括WM_LBUTTONDOWN,WM_LBUTTONUP,定义为左键输入,表示输入一个点,那么这个左键输入就变成了一个我们自己的事件系统的消息,在这基础上,我们可以改变这个事件对应的windows消息,比如改成右键的鼠标消息,我们也可以让用户来自定义自己的键盘或者干脆定义为手写板上面的消息。

自定义的事件,可以充分抽象以达到界面交互系统的要求。实现的时候,事件系统也可以和以下的子系统结合考虑,形成灵活的界面交互系统:


VBA等内置的宏语言。这样就可以支持自动录制用户的界面操作形成宏。
命令系统。CAD软件的传统交互方式就是用键盘输入命令,现在仍然保留这个命令系统,那么我们的自定义事件就可以和命令系统结合起来。
外部程序。CAD软件有时候需要和外部的进程进行数据交互,那么这个时候事件系统要充分考虑到外部程序消息交换的需要。

实际实现自定义事件系统的时候,可以先预定义一些事件,然后实现自己的时间队列和相应的处理函数。再把这些加入到windows的消息循环中去。这种实现方式最为灵活,但是比较困难,需要精心的测试和研究。


分类: CAD, 软件架构设计 标签:
CAD软件架构
2009年5月21日 没有评论

这个题目比较大,我也不打算长篇大论。鄙人才疏学浅,但有幸观摩了一些CAD软件的源代码,对架构设计有些零零碎碎的想法,呵呵,发泄一下,同事没人对这个感兴趣。

CAD软件有很长时间的历史了,因为需求来自工业界,和商业软件一样,有着漫长的发展史。但由于这些种软件和普通大众有一定的距离,所以很多地方不为人所知。广义上来说,3dMax, Maya,这些软件也可以说是CAD软件,当然我的这个定义比较宽泛。这些产品都有一些共同的特点,技术上的,商业应用上的:


交互性强。设计软件,从最开始的光笔,绘图板,到现代的三维扫描,动作捕捉设备,这些都是不断加入到这种软件的接口中的。因此软件的架构中,第一要素就是要考虑提高交互设计的效率。
适应性强。这里面内容很丰富。首先软件要有很强的可配置性,GUI,快捷操作,甚至操作系统平台,都有可能根据需要进行定制。比如Maya,有windows,Linux版本,界面使用QT开发,而有些软件只有windows版本,那么可以使用MFC了。这个对架构设计的要求是很高的。这些灵活性时必须在架构设计定型之前就要考虑到的。其次,软件要提供用户定制开发的接口。由于设计软件,尤其是跨越很多行业的设计软件,必然要面多众多特殊的需求,有些甚至是矛盾的。用户开发接口就很重要了,也就是二次开发接口。比如AutoCAD提供的ObjectARX.好的二次开发接口可以充分扩展软件的功能,使得软件的市场份额逐步扩大,形成生态圈,这个是软件在商业上成功的基石。这个可以看AutoCAD这个产品的发展历史。
可维护性。这个有两方面,一是开发,通常CAD软件的生命周期都比较长,尤其是比较大型的产品(当然商业上失败的不算~_^,不过失败的原因,很重要的一条就是这个)。为了适应随着技术进步和用户需求的发展不断变化的市场需求(这个比较搞,没办法,CAD软件的用户有些是很“变态的”,他们明白很多,甚至比开发人员还要理解软件), 软件的架构必须能够体够足够的支撑。如果架构做不到,那么意味着在商业上可能失掉重要的机会,ProE,就是个重新架构的产品,老东家没办法,只好另起炉灶了。第二方面就是用户支持,这个同样非常重要。CAD软件有个特点,就是用户忠诚度很高,因为这是他们生存的工具。我在公司的论坛上面就看到,在美国有一家两代人都靠公司的产品谋生,如果产品出现为题,说不定那些家伙会提着枪到公司去的。呵呵。这里有个调查,能够说明这个问题:We then asked respondents to tell us what are the most important issues that they look for in a new reseller / vendor – and service and support came through as the most important element, with price getting slightly less mentions。  From: http://www.caddigest.com/subjects/research/select/022704_cadspaghetti_vendor.htm
现代化的研发。这里面所说的,就是最近比较时髦的那些概念了,什么敏捷啦,SaaS.CAD也同样遇到这些概念的冲击,开发团队如果很庞大,那么管理问题就越来越重要。根据我的有限的经验,UG的开发团队管理是很出名的。CAD可以说是个智力密集型的产品。很多产品里面的技术,比公开的技术要先进非常多。这个是很奇怪的事情。同时CAD软件的专业性也决定了开发的复杂,要面对不同的行业,不同的需求,不同的国家,等等这些。比如国际化,如果你的软件要翻译成10国语言,那么你的架构设计就要小心了。
  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值