irpas技术客

大型CAx(CAD/CAE/CAM)软件开发中的关键组件_JiNan.YouQuan.Soft

网络 7048

通过对FreeCAD、SALOME、Qt等多款代码的分析研究,发现这些软件在架构设计、模块实现等方面,存在许多相似(同)的技术思想。因此,有必要对这些共性、主流的技术予以总结分析。

Structuring a system into subsystems helps reduce complexity.? ---GoF. Design Patterns.

通过不断地分析总结,旨在系统性地分析总结大型CAx(CAD/CAE/CAM)软件开发中的关键组件设计方法。希望对从事国产CAx软件开发的朋友们在技术选型、系统设计等方面有所帮助,也非常欢迎大家予以批评指教。

注1:限于研究水平,分析难免不当,欢迎批评指正。

注2:文章内容会不定期更新。

一、工程组织

工程组织着眼于组织管理CAx软件研发过程中相关的代码、文档、工程配置文件等。虽然,很难在软件开发初始阶段就设计出能够兼顾诸多诉求的工程组织形式。但是,有一点却很确定,良好的工程组织对于管理、维护软件文件是大有裨益的。

从目前来看,基于Qt的桌面CAx软件开发仍旧是主流,并且在未来有限的时间内仍旧会占据较大份额。

CMakeQt是GitHub上一个开源Qt软件开发的CMake模板,已经被Blender等许多开源项目所采用,非常值得借鉴引用。

二、MVC框架

在面向对象程序设计语言中,软件框架一般使用虚类(接口)构筑对象间的关系。

A framework is a set of cooperating classes that make up a resuable design clas of software.

Frameworks use abstract classes to define and maintain relationships between objects.

MVC(Model-View-Controller,模型-视图-控制器)是一种客户端软件设计框架,依据GoF(Gang of Foure)的Design Patterns一书中所介绍的23种模式,MVC框架使用到了Observer、Facade、Proxy、Mediator、Command、Iterator等设计模式。

Conceptual Diagram Ref. from PureMVC

文档/视图架构源于MVC模式,用于实现数据与显示的分离。文档\视图架构要点在于处理应用程序、主框架、文档、子框架、视图等(桌面)应用程序组件之间的关系。

?在文档/视图框架中,将每一条数据抽象成一个数据项(Document Item),文档则将一系列数据项按照一定方式组织起来,实现独立于底层具体存储方式的数据项访问、编辑等功能。视图以GUI的形式显示、编辑数据项。

GoF's Design Patterns: The Application class is responsible for managing Documents and will create them as required—when the user selects Open or New from a menu, for example. 三、日志系统

日志系统用于输出运行过程中的信息,方便跟踪软件运行状态及其异常排错。

Qt 提供了QMessageLogger用于将日志输出到文件;而Boos Log v2则提供了更加强大的日志输出功能。

QMessageLogger is used to generate messages for the Qt logging framework.?

四、类型系统

类型系统提供了运行时类型信息(RTTI, RunTime Type Information)、对象动态生成与管理等功能。

Qt Meta-Object System借助于Qt RTTI,实现了对象动态生成、基于信号/槽的通信等功能。

Qt's meta-object system provides the signals and slots mechanism for inter-object communication, run-time type information, and the dynamic property system.

五、属性系统

六、文档对象模型

文档对象模型(Document Object Model)主要用于管理软件中数据,将数据抽象成对象,进而将对象按照一定方式(Directed Acyclic Graph,DAG)组装成文档。从这个角度来看,文档对象模型实际上就是数据模型(Data Model),也就是研究如何抽象并组织数据的问题。

Qt将对象组织成树状结构,这的确可以满足大部分的场景应用,但却难以处理对象的多引用与数据一致性问题。

QObjects?organize themselves in object trees. When you create a?QObject?with another object as parent, it's added to the parent's?children() list, and is deleted when the parent is?

OSG则将对象组织成了DAG以优化OpenGL渲染性能,但所提供的DAG节点主要是面向OpenGL渲染管线。

七、命令系统

八、资源系统

九、窗口系统

十、插件系统

十一、接口扩展

十二、 网络应用

随着高性能计算特别是超级计算平台的兴起,CAx软件正逐渐由桌面系统逐渐向基于云计算平台的网络应用进行转变。近十年来,国家也建立了天津、济南、郑州、无锡、昆山、广州、深圳、长沙、成都等八大超算中心。不少新型的CAx软件公司也瞅准了这个时机,相继推出了自己的产品,国外有PTC OneShape,国内有华云三维的CrownCAD。

鉴于目前的形式,CAx软件在设计之初就应当考虑云计算赋能的问题,因此,需要对目前云计算平台(特别是国内的八大超算中心)的软硬件情况做深入的研究,为前期软件系统设计、技术选型等提供依据。

关于HPC集群架设相关的技术,笔者在前面的博文中,已经以此进行了论述。

参见:部署HPC集群的实施方案

?超算中心大都基于Linux操作系统或者其衍生版本,其中又以CentOS系统居多,大都提供Web登录、VPN SSH登录等访问方式。济南超算中心山河计算平台提供了Web Services、SDK、CLI等三种开发接口。

单从CAx软件研发来看,基于云计算的CAx软件开发至少会涉及到远程登录、文件/数据传输、命令执行、作业管理等功能模块。

?基于B/S架构的CAx软件研发,在实时性等方面还存在一些技术难点;基于C/S架构方案中,缺少专门的CAx软件通信协议。

近几年,以虚拟化、云计算等技术为基础的云桌面逐渐兴起,这或许为发展基于云计算的CAx软件提供了可行性。

参考文献

Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides. Design Patterns:elements of reusable object-oriented software.?Addison Wesley, 1994.

EURIWARE. SALOME GUI Architecture. 2010.

网络资源

FreeCADhttps://·/libsshhttps://·/

CORBA?https://·/products.html

Slurmhttps://slurm.schedmd.com/


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #注2文章内容会不定期更新