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. 【转载】XSS学习笔记

    XSS的分类 非持久型 非持久型XSS也称反射型XSS.具体原理就是当用户提交一段代码的时候,服务端会马上返回页面的执行结果.那么当攻击者让被攻击者提交一个伪装好的带有恶意代码的链接时,服务端也会立刻 ...

  2. linux环境手动编译安装Nginx实践过程 附异常解决

    1.下载nginx源码包并解压 可在http://nginx.org/en/download.html下载.tar.gz的源码包,如(nginx-1.4.7.tar.gz) 或者使用云盘下载   ht ...

  3. [C#]使用Costura.Fody将源DLL合并到目标EXE

    本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址 ...

  4. ubuntu 14.04搭建PHP项目基本流程

    首先准备需要安装东西的列表1.apache服务器,2.php,3.mysql,4.几个软件包的链接包,安装方式是以apt-get方式安装; 1.安装apache服务器: apt-get install ...

  5. oracle数据库冷备中的手工备份和恢复

    我的操作系统是red hat5.5 32位系统oracle11g 以我的系统为例: 冷备状态下,数据库必须是关闭的,但是我们现在要做一个实验,在开库的状态下分别查询出: 1.show paramete ...

  6. .net core 开发短网址平台的思路

    最近有个客户要求开发一套短网址网站,小编现在都使用.net core进行网站开发了,以是厘厘思路,想想使用.net core 的中间件应该很容易实现. 1. 构建一个中间件,监测网站的响应状态,代码如 ...

  7. C++中类的多态与虚函数的使用

    C++的三大特性:封装.继承.多态.以前学的时候自己没去总结,记得在一本c++入门的书讲得还是比较清楚.今天上网找了一下多态,找到下面这篇文章写得比较清晰. http://pcedu.pconline ...

  8. insert时报Cannot add or update a child row: a foreign key constraint fails (`yanchangzichan`.`productstatusrecord`, CONSTRAINT `p_cu` FOREIGN KEY (`cid`) REFERENCES `customer` (`cid`))错误

    mybatis在insert时报Cannot add or update a child row: a foreign key constraint fails (`yanchangzichan`.` ...

  9. P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    题目描述 给出n个物品,体积为w[i],现把其分成若干组,要求每组总体积<=W,问最小分组.(n<=18) 输入格式: Line 1: N and W separated by a spa ...

  10. ASP.NET异常处理机制

    try{ //获取并使用资源,可能出现异常}catch(DivideByZeroException de){}catch(ArithmeticException ae){}catch(Exceptio ...