OpenCASCADE入门指南
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入门指南相关推荐
- 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...
- Maven入门指南⑦:Maven的生命周期和插件
Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...
- UE4风格化场景设计入门指南 Stylized Station – The Environment Artist’s Survival Kit
持续时间13h 1920X1080 .ts 包含项目文件 大小解压后:4.9G 语言:英语+中文字幕(人工校对) 标题:风格化的车站--环境艺术家的生存工具包 信息: 环境艺术很难. 尤其是作为初学者 ...
- 游戏风格化角色创建入门指南视频教程
游戏风格化角色创建入门指南视频教程 时间 33小时 包括项目文件 1920X1080 MP4 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 游戏中的风格化角色创建入门指南 百度一下 ...
- mongoDB 入门指南、示例
http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html mongoDB 入门指南.示例 上一篇:简单介绍mongoDB 一.准备工作 ...
- 智能合约和区块链技术:入门指南
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 智能合约和区块链技术:入门指南 多年前,在没有数字合约和区块链技术存在的情况下,双方的合约往往以传统的方式进行.在加密货 ...
- 数据分析从头学_数据新闻学入门指南:让我们从头开始构建故事
数据分析从头学 by Mina Demian 由Mina Demian 数据新闻学入门指南:让我们从头开始构建故事 (A Beginner's Guide to Data Journalism: Le ...
- 《Redis入门指南(第2版)》一第2章 准备
本节书摘来异步社区<Redis入门指南(第2版)>一书中的第2章,作者: 李子骅 责编: 杨海玲,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第2章 准备 R ...
- jQuery中文入门指南,翻译加实例,jQuery的起点教程
中文版译者:Keel 此文以实例为基础一步步说明了jQuery的工作方式.现以中文翻译(添加我的补充说明)如下.如有相关意见或建议请 EMAIL 告知.或者在 BLOG中留言. 英文原版:http:/ ...
最新文章
- 苹果在GitHub上正式开源iOS内核源码
- Prepare document for Week 2: Signaloid in Logistics
- php 递归栏目名叠加,thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法,thinkphp递归...
- [转载] c++多态与java多态性_Java中的多态性
- itext-2.1.7.jar
- java list 去除 重复值
- 8.26树状数组讲解
- 选择排序——Java排序算法
- IntelliJ IDEA 2020 提示“Unmapped Spring configuration files found.Please configure Spring facet.”解决办法
- cesium添加单张图片
- excel公式编辑器_让同事看傻,用Excel制作 “抽奖”小软件
- html页面整体隐藏,三种隐藏 HTML 元素的方式
- python爬虫_网易音乐歌单
- 使用itext创建PDF模板
- Word中表格相关的操作
- 怎么保存网页为html格式,怎样保存网页部分内容为html格式?
- python后端面经_2019 Python后端开发面经总结:网易、滴滴、老虎证券
- php初中历史专题教学网站 毕业设计源码100623
- linux prompt模式,Linux修改prompt提示的方法 | Soo Smart!
- 数据分析告诉你月薪多少才“配”坐高铁
热门文章
- Redis【2022最新面试题】
- Could not load file or assembly ‘WMS.API.Service, Culture=neutral, PublicKeyToken=null‘. 系统找不到指定的文件
- s_gets()函数解析
- URAL 1998 The old Padawan
- 游戏中支线任务的设计Pt.1: 如龙0——海量支线搭建起来的不夜城
- 全内反射棱镜(TIR)的建模
- 致远OA ajax.do 任意文件上传 (CNVD-2021-01627) 漏洞复现
- 【时空序列预测第二篇】Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting
- 孙振耀担任海辉董事会主席 自2008年3月生效
- android crash存储位置,在Android手机上保存Crash Log