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公众号:

转载于:https://www.cnblogs.com/opencascade/p/OpenCASCADE_StartGuide.html

OpenCASCADE入门指南相关推荐

  1. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  2. Maven入门指南⑦:Maven的生命周期和插件

    Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...

  3. UE4风格化场景设计入门指南 Stylized Station – The Environment Artist’s Survival Kit

    持续时间13h 1920X1080 .ts 包含项目文件 大小解压后:4.9G 语言:英语+中文字幕(人工校对) 标题:风格化的车站--环境艺术家的生存工具包 信息: 环境艺术很难. 尤其是作为初学者 ...

  4. 游戏风格化角色创建入门指南视频教程

    游戏风格化角色创建入门指南视频教程 时间 33小时 包括项目文件 1920X1080 MP4 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 游戏中的风格化角色创建入门指南  百度一下 ...

  5. mongoDB 入门指南、示例

    http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html mongoDB 入门指南.示例 上一篇:简单介绍mongoDB 一.准备工作 ...

  6. 智能合约和区块链技术:入门指南

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 智能合约和区块链技术:入门指南 多年前,在没有数字合约和区块链技术存在的情况下,双方的合约往往以传统的方式进行.在加密货 ...

  7. 数据分析从头学_数据新闻学入门指南:让我们从头开始构建故事

    数据分析从头学 by Mina Demian 由Mina Demian 数据新闻学入门指南:让我们从头开始构建故事 (A Beginner's Guide to Data Journalism: Le ...

  8. 《Redis入门指南(第2版)》一第2章 准备

    本节书摘来异步社区<Redis入门指南(第2版)>一书中的第2章,作者: 李子骅 责编: 杨海玲,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第2章 准备 R ...

  9. jQuery中文入门指南,翻译加实例,jQuery的起点教程

    中文版译者:Keel 此文以实例为基础一步步说明了jQuery的工作方式.现以中文翻译(添加我的补充说明)如下.如有相关意见或建议请 EMAIL 告知.或者在 BLOG中留言. 英文原版:http:/ ...

最新文章

  1. 苹果在GitHub上正式开源iOS内核源码
  2. Prepare document for Week 2: Signaloid in Logistics
  3. php 递归栏目名叠加,thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法,thinkphp递归...
  4. [转载] c++多态与java多态性_Java中的多态性
  5. itext-2.1.7.jar
  6. java list 去除 重复值
  7. 8.26树状数组讲解
  8. 选择排序——Java排序算法
  9. IntelliJ IDEA 2020 提示“Unmapped Spring configuration files found.Please configure Spring facet.”解决办法
  10. cesium添加单张图片
  11. excel公式编辑器_让同事看傻,用Excel制作 “抽奖”小软件
  12. html页面整体隐藏,三种隐藏 HTML 元素的方式
  13. python爬虫_网易音乐歌单
  14. 使用itext创建PDF模板
  15. Word中表格相关的操作
  16. 怎么保存网页为html格式,怎样保存网页部分内容为html格式?
  17. python后端面经_2019 Python后端开发面经总结:网易、滴滴、老虎证券
  18. php初中历史专题教学网站 毕业设计源码100623
  19. linux prompt模式,Linux修改prompt提示的方法 | Soo Smart!
  20. 数据分析告诉你月薪多少才“配”坐高铁

热门文章

  1. Redis【2022最新面试题】
  2. Could not load file or assembly ‘WMS.API.Service, Culture=neutral, PublicKeyToken=null‘. 系统找不到指定的文件
  3. s_gets()函数解析
  4. URAL 1998 The old Padawan
  5. 游戏中支线任务的设计Pt.1: 如龙0——海量支线搭建起来的不夜城
  6. 全内反射棱镜(TIR)的建模
  7. 致远OA ajax.do 任意文件上传 (CNVD-2021-01627) 漏洞复现
  8. 【时空序列预测第二篇】Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting
  9. 孙振耀担任海辉董事会主席 自2008年3月生效
  10. android crash存储位置,在Android手机上保存Crash Log