OpenCASCADE入门指南

eryar@163.com

一、概述

荀子说“君子性非异也,善假于物也”。当你会用英语,就可以与世界各国的人交流;当你会用编程语言,就可以与计算机交流;当你会用数学语言,就可以精确的描述世界。当你会用OpenCASCADE这个开发包(SDK),就可以在计算机中创造一个三维世界。大学期间,偶然在图书馆翻到一本发黄的书,讲的是用Turbo C2.0 C语言graphics.h头文件来画图的计算机图形学的书,随即对计算机图形学有了兴趣。后来一直在图书馆里面看计算机图形学方面的书,都没有得其要领。一方面是国内的教材上来都是抽象的理论,没有相对具体实现的例子;另一方面是因为自己数学也一直没有入门。

从小学到大学都要学数学,虽然高中和大学都开了物理课,但是还是没能理解抽象的数学,其实物理就是数学在现实生活中的具体应用,即用数学来解释自然现象。数学的美妙就在于用简单的文字描述自然规律。如:

这个方程可以描述一个位于坐标原点处半径为R的一个圆。再如:

这是一个简单的微分方程,描述了自由落体的运动规律。规律的意思是对于地球上任意一个自由落体运动,不考虑空气阻力等因素,可以利用此公式精确计算出它在降落的过程中的状态数据,如在某个点处的速度,距离降落点的长度等。掌握到微分方程这个工具,可以解释很多物理问题,如运动学、电学、力学。如:

上式是一个偏微分方程。理解偏微分方程,就可以…… 言归正传,如何来学习和使用OpenCASCADE呢?

二、OpenCASCADE是什么

根据OpenCASCADE源码中的ReadMe可知,OpenCASCADE是一个提供三维曲面造型和实体建模、CAD数据交换及可视化的软件开发平台。OpenCASCADE的大部分功能都是以C++的库的形式提供。OpenCASCADE可用于开发CAD、CAM及CAE相关的软件。

从OpenCASCADE6.8开始授权协议改为LGPL协议,这样就可以用OpenCASCADE开发商用程序而不用开源代码了,其使用更自由。

Open CASCADE Technology 是为特定领域快速开发程序而设计的面向对象的C++类库。可以使用OCCT来开发二维和三维的通用几何造型的计算机辅助设计程序CAD(Computer Aided Design),计算机辅助制造程序CAM(Computer Aided Manufacturing)和计算机辅助分析程序CAA(Computer Aided Analysis);仿真程序和绘图程序。OCCT库可以明显快速程序的开发进度。

OCCT库提供如下功能:

l 2D和3D几何造型工具箱,可对任何物体造型;

n 创建基本图元,如prism,cylinder, cone, torus;

n 对实体进行布尔操作,addition, subtraction and intersection;

n 根据倒圆、倒角、草图拉伸出几何实体;

n 使用偏移offsets、成壳shelling、挖空hollowing和挤压sweeps构造几何实体;

n 计算几何实体属性,如表面积、体积、重心、曲率半径;

n 使用插值interpolation、逼近approximation、投影projection计算出几何体;

l 可视化功能提供对几何实体的显示、控制功能,例如:

n 三维旋转3D rotation;

n 缩放Zoom;

n 着色Shading;

l 程序框架提供如下功能:

n 将非几何数据与几何实体关联;

n 参数化模型;

n Java Application Desktop(JAD);

OCCT库是由Open CASCADE公司开发和市场运作的。库被设计成模块化和易扩展。将C++类与以下内容分离:

l 定义数据结构(几何建模、显示和交互选择);

l 实现复杂算法;

l 提供编程接口;

图1. OpenCascade架构图

相关的类由包来分组,避免了类名的冲突。C++类名前加上包名作为前缀。如包Geom中所有的3D几何体,实现Bezier曲面的类为BezierSurface,其全称为Geom_BezierSurface。

包组成库,即提供给程序链接使用。

最的,库分组成六个模块,最小的模块Foundation Classes包含两个库,最大的模块Modeling Algorithms,包含八个库。(eryar: 可能是早期版本,最新版本的库的数量有变化。)这些模块如下图所示:

图2:Object Libraries modules and their contents

另外,Draw Test Harness(Draw)为可视化、建模算法、程序框架和数据交换模块提供测试。

三、学习过程

下面对OpenCASCADE相应模块进行简单介绍,并推荐一些参考书籍,结合参考书籍可以深入理解OpenCASCADE源码。

3.1 FoundationClasses

FoundationClasses基础类模块中主要包含两个工具集Toolkit:数学工具TKMath和核心工具TKernel。TKernel中主要是一些类型定义、自定义容器、内存管理等。理解起来需要C++编程基础知识,推荐以下几本经典教材:

钱能著. C++程序设计教程. 清华大学出版社。 学习C++程序开发的基本语法,面向对象程序设计的基本思想。

Scott Meyers. Effective C++. C++程序员可以分成两类:读过Effective C++和没读过的。

Scott Meyers. More Effective C++.

TKMath工具集主要是一些数值算法库,如矩阵变换、微分积分、解方程(组)、非线性方程组等。推荐浙大出版的《数值分析引论》:

易大义, 陈道琦. 数值分析引论. 浙江大学出版社。主要介绍插值法、函数与数据的逼近、数值积分与微分、解方组,非线性方程(组)数值解法、矩阵计算等。OpenCASCADE的math包中基本上就是这些算法的具体实现。

Fletcher Dunn, Ian Parberry. 3D Math Primer for Graphics and Game Development. 主要用来学习向量和矩阵用于图形变换。

3.2 ModelingData & ModelingAlgorithms

陈维桓. 微分几何. 北京大学出版社. 主要用来学习将曲线和曲面看成矢量函数及其分析方法。

Les Piegl, Wayne Tiller. The NURBS Book. 想从事CAD,必须理解NURBS。这本书可以说是NURBS的经典之作,几个博士的翻译也很到位。

王仁宏, 李崇君, 朱春钢. 计算几何教程. 科学出版社。主要还是介绍B样条曲线的基础知识。

朱心雄. 自由曲线曲面造型技术. 科学出版社. 主要介绍了B样条曲线曲面的基础理论及相关的算法,如求交算法,光顺算法,点云数据拟合曲面算法等。

3.3 Visualization

在理解了OpenCASCADE中显示数据的产生后,再结合上面两本OpenGL的经典书,OpenGL的学习应该更轻松。

汪嘉业. 王文平. 屠长河. 杨承磊. 计算几何及应用. 科学出版社。主要学习其中点集的Delaunay三角剖分算法,OpenCASCADE中由造型数据到可视化数据的生成就是使用了这个算法。

3.4 ApplicationFramework

Gof的设计模式,将前人编程开发中的经验以模式的方式进行总结,可以提高面向对象程序开发水平。

MARTIN REDDY. API design for C++. 学习其中API的设计,使其模块化,见名知义等。

3.5 DataExchange

李原. 张开富. 余剑峰. 计算机辅助几何设计技术及应用. 西北工业大学出版社。其中也有一些曲线曲面的知识,不过都是简单地一带而过,主要学习其中对IGES文件的解析,有了一种格式的解析经验,其三维格式可以查找其规格书来进行解析。

3.6 Draw

Tcl/Tk同Python类似,都是脚本语言。OpenCASCADE中使用Tcl/Tk的目的就是为了跨平台的测试造型算法。看看本书,学习Tcl/Tk的基本语法,及如何在程序中自定义命令。理解这之后,就可以完全理解Draw这个模块的实现原理。

四、结论

OpenCASCADE的源码比较庞大,学习起来涉及的内容较多。希望能将学习的过程当作数据理论的实践,体验数学理论可视化过程中的乐趣。另外将OpenCASCADE中解决一些问题的思路拿来解决自己在学习、工作中遇到的问题。

OpenCASCADE入门指南的更多相关文章

  1. Web API 入门指南 - 闲话安全

    Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...

  2. Vue.js 入门指南之“前传”(含sublime text 3 配置)

    题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...

  3. yii2实战教程之新手入门指南-简单博客管理系统

    作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...

  4. 【翻译】Fluent NHibernate介绍和入门指南

    英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...

  5. ASP.NET MVC 5 入门指南汇总

    经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...

  6. 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍

    我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...

  7. 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据

    我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...

  8. 一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模

    我们前2篇文章:一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍 和一起学微软Power BI系列-官方文档-入门指南(2)获取源数据 中,我们介绍了官方入门文档与获取 ...

  9. 一起学微软Power BI系列-官方文档-入门指南(4)Power BI的可视化

    在前面的系列文章中,我们介绍了官方有关获取数据,以及建模的原始文档和基本介绍.今天继续给大家介绍官方文档中,有关可视化的内容.实际上获获取数据和建模更注重业务关系的处理,而可视化则关注对数据的解读.这 ...

随机推荐

  1. Windows下caffe的配置和调用caffe库(一)

    一.Windows下caffe的配置: 1. 下载caffe官网提供的开发包,https://github.com/microsoft/caffe 2. 将caffe-master目录下的Window ...

  2. AngularJS学习篇(二十二)

    AngularJS 依赖注入 什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或 ...

  3. sublime 集成git插件,及git常用命令

    以前用了很久的totoiseSVN,显然不够高大上,开发界的版本装x利器还得是git.然而git的命令行对没怎么用过linux的人可能觉得还不如用gitGUI,可是当你知道sublime可以集成git ...

  4. C# 判断文件是否文本文件

    在网上查了好多资料,大部分都是通过将文件读成二进制流,取前两个字节判断,比如.jpg的是255216.代码如下: ); i++; }return isTextFile; }catch (Excepti ...

  5. x01.AntWorld: An Python AI Game

    1. 学习了一下 AI 五子棋,顺手改作 19 路的棋盘,便于围棋通用.render.py 主要修改如下: # 常量部分: IMAGE_PATH = 'img/' StoneSize = 32 WID ...

  6. ecshop添加菜单以及权限分配

    增加菜单并添加权限: admin/includes/inc_menu.php 添加 $modules['**_name1']['name2'] = 'your href' admin/includes ...

  7. JavaScript高级程序设计之自学笔记(一)————Array类型

    以下为自学笔记. 一.Array类型 创建数组的基本方式有两种: 1.1第一种是使用Array构造函数(可省略new操作符). 1.2第二种是使用数组字面量表示法. 二.数组的访问 2.1访问方法 在 ...

  8. vue-router在ie9及以下history模式支持

    参考: https://www.npmjs.com/package/vue-route https://github.com/devote/HTML5-History-API 提要: ie9及以下不支 ...

  9. mysql数据库表卡死解决方法

    ---恢复内容开始--- 问题引起原因: 由于在执行大量插入操作的时候意外终止程序之后, MySQl的线程并没有被终止,导致表不能打开和操作 -  解决思路就是找到等待的线程并kill -- 查看所有 ...

  10. 将下载到本地的JAR包手动添加到Maven仓库

    <!-- https://mvnrepository.com/artifact/ojdbc/ojdbc --><!-- (参数一):下载到本地的ojdbc-10.2.0.4.0.ja ...