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. pandas数据结构练习题(部分)

    更多函数查阅http://pandas.pydata.org/pandas-docs/stable/10min.htmlimport pandas as pd#两种数据结构from pandas im ...

  2. html浏览器存储连续多个空格,只显示一个空格

    这个问题找了很久,发现css的 white-space:pre 完美解决 .white-space { white-space:pre }

  3. 分析Array.apply(null, { length: 5 })

    Array.apply(null, { length: 5 }) 和 Array(5)有什么不同 注意:ES5,apply函数的第二个参数除了可以是数组外,还可以是类数组对象 // 类转成真正的数组 ...

  4. [译]移动API安全终极指南

    文章主要讲了移动api调用的授权和验证问题,原文链接:The Ultimate Guide to Mobile API Security 移动API的使用是Stack Overflow和 Stormp ...

  5. IT屌丝如何获取改变自己的真正内心动力

    要想从现在的低薪(年薪10万以下)快读变成未来的高新(年薪30万以上)我们要做的就只有从自身改变开始! 人改变自己的勇气,朱啊哟取决于我们自己当前的痛苦程度!直到某一天真的回避不了了,才会被动的改变, ...

  6. [转载] 谷歌技术"三宝"之MapReduce

    转载自http://blog.csdn.net/opennaive/article/details/7514146 江湖传说永流传:谷歌技术有"三宝",GFS.MapReduce和 ...

  7. Nginx+Tomcat+Memcached实现会话保持

    会话保持的三种方式 Session sticky会话绑定:通过在前端调度器的配置中实现统一session发送至同一后发端服务器 Session cluster会话集群:通过配置Tomcat保持所有To ...

  8. OpenCV探索之路(二十七):皮肤检测技术

    好久没写博客了,因为最近都忙着赶项目和打比赛==| 好吧,今天我打算写一篇关于使用opencv做皮肤检测的技术总结.那首先列一些现在主流的皮肤检测的方法都有哪些: RGB color space Yc ...

  9. get和post与服务端的交互方式

    在网上看了不少关于get和post的文章,看到博主这个,现在手录下来. 原博客地址:http://www.cnblogs.com/warrior4236/p/5675756.html 一:B/S结构, ...

  10. 手 Q 人脸识别动画实现详解

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 前言 开门见山,先来看下效果吧. 看到这么酷炫的效果图,不得不赞叹一下我们的设计师.然而,站在程序员的角度上看,除了酷炫之外更多的是复杂.但是 ...