基于FreeCAD的CAE数值仿真平台开发概述

基于FreeCAD的CAE数值仿真平台开发概述

 济南友泉软件有限公司

FreeCAD是一套基于OCCOIVQt的开源CAX软件开发框架,采用了文档-视图架构,同时提供了基于Workbench的插件式开发模式,可以非常方便地用于订制CAE软件。

FreeCAD主界面-FEM模块
  1. FreeCAD代码架构

FreeCAD核心采用C++编写,使用OpenCASCADE生成几何造型,利用Open Inventor进行图形图像渲染,此外,FreeCAD提供了PyCXX扩展Python接口。

FreeCAD模块架构

 

2. FreeCAD主要使用功能模块

  • Base模块

实现类型系统、对象持久化、日志输出、PyCXX扩展Python模块等功能

  • App模块

实现基于文档对象的数据模型、属性系统、事务操作、文档操作(新建、打开、保存、关闭、增加对象、查找对象、删除对象)等功能。

  • Gui模块

实现主窗口定义、基于Workbench的开发模式、数据渲染显示等功能。

  • Part模块

IGESSTEP等主流几何文件导入;基本实体创建;倒角、布尔等操作。

  • Mesh、MeshPart、SMESH模块

使用Salome SMESHNetGen等进行网格划分。

  • FEM模块

置初边值条件、求解器配置等用于CalculiX 求解,同时提供了简单的结果后处理功能等。

3. FreeCAD的优缺点分析

势:

  • 全参数化建模
  • Workbench的开发模式,开发效率高,扩展性好
  • 富的几何文件接口
  • 集成式的几何约束求解器

不足:

  • 代码量较大,涉及的开发技术较多,文档资料比较少,开发门槛
  • 染路径较长,数据存储冗余大
  • 大规模场景效率比较低

 

4.CAE仿真平台开发思路

FEM/CFD模块作为基础,借助于PartMesh模块现有的功能,完成程序核心功能的实现;在FemGuiPartGuiMeshGui基础之上,设计统一的Workbench以实现(实体、网格、结果)渲染与界面交互功能。

对具体的应用需求(主要是几何造型生成),需要在OCC基础之上开发满足需求的功能,并将其嵌入到FreeCAD框架中。

开发思路

 

  • 几何生成

Part::Feature及其子类为基础,开发满足需求的核心几何功能(几何造型与约束),同时提供PyCXX编写的Python扩展。依托ViewProviderPartViewProviderMeshViewProviderPostObject等代码实现对象显示与交互功能。FreeCADGUI Workbench, 定制软件界面。

几何显示

 

  • 网格划分

MeshPart块基于Salome SMesh框架,提供了NetGen等网格生方法Mesh模块提供了网格存储的数据结构以及相关操作,MeshGui模块的Workbench中定义了网格划分的界面,其内部则是通过调用MeshPart模块的Python接口来生成网格。

Mesh

FreeCAD Mesh模块并没有限制网格生成工具的使用,为了完成软件的集成(实际上主要是为了使用FreeCAD较大的几何建模功能),借助于Mesh/MeshGui的数据存储与显示,需要在新的Workbench中嵌入较为成熟的网格生成工具(GmshcfMesh、MeshGems)等。MeshPart中,Mesher::createMesh()函数,通过引入其他网格划分代码来增加新的网格划分功能。

Mesh::MeshObject* Mesher::createMesh() const;

开发要点:FreeCAD网格划分功能较弱,需要利用第三方的网格划分工具生成Mesh模块的数据结构,然后进行网格显示。

  • 求解器

Fem模块中,提供了SolverObject对象,用于生成不同求解器的配置。指定工作目录之后,会根据支持的求解器的将配置文件写入到工作目录,然后便可以求解计算。

Solver
  • 后处理

目前在FreeCAD(止到0.19-pre版本),没有一个单独的一个模块用于后处理数据显示。不过,在Fem模块中实现部分后处理的功能,主要包括云图显示、切割、数据拾取等功能,功能相对比较简单。

者在Fem的基础之上,已经开发完成了CFD模块功能,主要用于完成CFD后处理功能。可以进行云图、流线、Glyph、等值线/等值面等功能。后处理功能的开发其实比较简单,大体思路就是借助于VTK完成后处理数据的生成,然后将生成的数据导入到OIV渲染管线。

Post

 

 

Module developer’s guide to FreeCAD source code by Qingfeng Xia http://www.iesensor.com • 2015-09-18 version 0.1 for FreeCAD version 0.16-dev • 2016-09-18 version 0.2 for FreeCAD version 0.17-dev License of this book This ebook is licensed the same as FreeCAD document license CC-BY 3.0 http://creativecommons.org/licenses/by/3.0/Contents 1 FreeCAD overview and architecture 7 1.1 Introduction to FreeCAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Key features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 Software architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.1 Key software libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.2 Mixed python and c++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.3 GPL code will not be included into installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 How 3D model are renderred . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.1 Selection of 3D visualization libarary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.2 Discussion of 3D rendering library selection on FreeCAD Forum . . . . . . . . . . . . . . . . . . . . . 8 1.5 Roadmap of FreeCAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.1 Keep updated with main components: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.2 C++11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.3 Pyside 2 project for Qt 5.x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2 Organisation of FreeCAD source code 11 2.1 Build system for FreeCAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.1 Analysis of src/cMake/SMesh.cMake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 List of files and folders in FreeCAD source folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 List of modules in FreeCAD Mod folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.4 Learning path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5 Learning OpenInventor/Coin3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5.1 OpenInventor in FreeCAD’s ViewProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5.2 Important classes in OpenInventor/Coin3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5.3 Window System integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.5.4 Pivy: Coin3D ’s Python wrapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3 Base, App and Main module 19 3.1 List of header files in Base folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1.1 Frequently included headers files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.1.2 Correct way of using Sequencer in try-catch block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.1.3 String enconding utf8 and conversion into wchar_t QString . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2 Type, BaseClass, PyObjectBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.1 Type system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.2 src/Base/BaseClass.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.3 src/Base/PyObjectBase.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.4 src/Base/Persistence.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.5 GeoFeature: Base class of all geometric document objects . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3 Unit scheme for physial quantity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.3.1 src/Base/Unit.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.3.2 src/Base/Quantity.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.4 List of header files in App folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5 Property framewrok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.5.1 Naming of property and PropertyEditor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.5.2 src/App/PropertyStandard.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5.3 PropertyEnumeration, see src/App/Enumeration.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5.4 Geometry related property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5.5 File related property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值