• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            eryar

            PipeCAD - Plant Piping Design Software.
            RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
            posts - 603, comments - 590, trackbacks - 0, articles - 0

            OpenCASCADE入門指南

            Posted on 2017-12-22 21:49 eryar 閱讀(11879) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCASCADE入門指南

            eryar@163.com

            一、概述

            荀子說“君子性非異也,善假于物也”。當你會用英語,就可以與世界各國的人交流;當你會用編程語言,就可以與計算機交流;當你會用數學語言,就可以精確的描述世界。當你會用OpenCASCADE這個開發包(SDK),就可以在計算機中創造一個三維世界。大學期間,偶然在圖書館翻到一本發黃的書,講的是用Turbo C2.0 C語言graphics.h頭文件來畫圖的計算機圖形學的書,隨即對計算機圖形學有了興趣。后來一直在圖書館里面看計算機圖形學方面的書,都沒有得其要領。一方面是國內的教材上來都是抽象的理論,沒有相對具體實現的例子;另一方面是因為自己數學也一直沒有入門。

            從小學到大學都要學數學,雖然高中和大學都開了物理課,但是還是沒能理解抽象的數學,其實物理就是數學在現實生活中的具體應用,即用數學來解釋自然現象。數學的美妙就在于用簡單的文字描述自然規律。如:

            wps_clip_image-18619

            這個方程可以描述一個位于坐標原點處半徑為R的一個圓。再如:

            wps_clip_image-24949

            這是一個簡單的微分方程,描述了自由落體的運動規律。規律的意思是對于地球上任意一個自由落體運動,不考慮空氣阻力等因素,可以利用此公式精確計算出它在降落的過程中的狀態數據,如在某個點處的速度,距離降落點的長度等。掌握到微分方程這個工具,可以解釋很多物理問題,如運動學、電學、力學。如:

            wps_clip_image-2329

            上式是一個偏微分方程。理解偏微分方程,就可以…… 言歸正傳,如何來學習和使用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 提供編程接口;

            wps_clip_image-8551

            圖1. OpenCascade架構圖

            相關的類由包來分組,避免了類名的沖突。C++類名前加上包名作為前綴。如包Geom中所有的3D幾何體,實現Bezier曲面的類為BezierSurface,其全稱為Geom_BezierSurface。

            包組成庫,即提供給程序鏈接使用。

            最的,庫分組成六個模塊,最小的模塊Foundation Classes包含兩個庫,最大的模塊Modeling Algorithms,包含八個庫。(eryar: 可能是早期版本,最新版本的庫的數量有變化。)這些模塊如下圖所示:

            圖2:Object Libraries modules and their contents

            image

            另外,Draw Test Harness(Draw)為可視化、建模算法、程序框架和數據交換模塊提供測試。

            三、學習過程

            下面對OpenCASCADE相應模塊進行簡單介紹,并推薦一些參考書籍,結合參考書籍可以深入理解OpenCASCADE源碼。

            3.1 FoundationClasses

            FoundationClasses基礎類模塊中主要包含兩個工具集Toolkit:數學工具TKMath和核心工具TKernel。TKernel中主要是一些類型定義、自定義容器、內存管理等。理解起來需要C++編程基礎知識,推薦以下幾本經典教材:

            wps_clip_image-15547

            錢能著. C++程序設計教程. 清華大學出版社。 學習C++程序開發的基本語法,面向對象程序設計的基本思想。

            wps_clip_image-18487

            Scott Meyers. Effective C++. C++程序員可以分成兩類:讀過Effective C++和沒讀過的。

            wps_clip_image-11974

            Scott Meyers. More Effective C++. 

            TKMath工具集主要是一些數值算法庫,如矩陣變換、微分積分、解方程(組)、非線性方程組等。推薦浙大出版的《數值分析引論》:

            wps_clip_image-15297

            易大義, 陳道琦. 數值分析引論. 浙江大學出版社。主要介紹插值法、函數與數據的逼近、數值積分與微分、解方組,非線性方程(組)數值解法、矩陣計算等。OpenCASCADE的math包中基本上就是這些算法的具體實現。

            wps_clip_image-32717

            Fletcher Dunn, Ian Parberry. 3D Math Primer for Graphics and Game Development. 主要用來學習向量和矩陣用于圖形變換。

            3.2 ModelingData & ModelingAlgorithms

            wps_clip_image-11234

            陳維桓. 微分幾何. 北京大學出版社. 主要用來學習將曲線和曲面看成矢量函數及其分析方法。

            wps_clip_image-21350

            Les Piegl, Wayne Tiller. The NURBS Book. 想從事CAD,必須理解NURBS。這本書可以說是NURBS的經典之作,幾個博士的翻譯也很到位。

            wps_clip_image-23623

            wps_clip_image-31564

            王仁宏, 李崇君, 朱春鋼. 計算幾何教程. 科學出版社。主要還是介紹B樣條曲線的基礎知識。

            wps_clip_image-2418

            朱心雄. 自由曲線曲面造型技術. 科學出版社. 主要介紹了B樣條曲線曲面的基礎理論及相關的算法,如求交算法,光順算法,點云數據擬合曲面算法等。

            3.3 Visualization

            wps_clip_image-5324

            wps_clip_image-11023

            在理解了OpenCASCADE中顯示數據的產生后,再結合上面兩本OpenGL的經典書,OpenGL的學習應該更輕松。

            wps_clip_image-29253

            汪嘉業. 王文平. 屠長河. 楊承磊. 計算幾何及應用. 科學出版社。主要學習其中點集的Delaunay三角剖分算法,OpenCASCADE中由造型數據到可視化數據的生成就是使用了這個算法。

            3.4 ApplicationFramework

            wps_clip_image-9684

            Gof的設計模式,將前人編程開發中的經驗以模式的方式進行總結,可以提高面向對象程序開發水平。

            wps_clip_image-14854

            MARTIN REDDY. API design for C++. 學習其中API的設計,使其模塊化,見名知義等。

            3.5 DataExchange

            wps_clip_image-20863

            李原. 張開富. 余劍峰. 計算機輔助幾何設計技術及應用. 西北工業大學出版社。其中也有一些曲線曲面的知識,不過都是簡單地一帶而過,主要學習其中對IGES文件的解析,有了一種格式的解析經驗,其三維格式可以查找其規格書來進行解析。

            3.6 Draw

            wps_clip_image-11479

            Tcl/Tk同Python類似,都是腳本語言。OpenCASCADE中使用Tcl/Tk的目的就是為了跨平臺的測試造型算法。看看本書,學習Tcl/Tk的基本語法,及如何在程序中自定義命令。理解這之后,就可以完全理解Draw這個模塊的實現原理。

            四、結論

            OpenCASCADE的源碼比較龐大,學習起來涉及的內容較多。希望能將學習的過程當作數據理論的實踐,體驗數學理論可視化過程中的樂趣。另外將OpenCASCADE中解決一些問題的思路拿來解決自己在學習、工作中遇到的問題。

             

            歡迎大家關注OpenCASCADE公眾號:

            OpenCASCADE微信公眾號

            久久免费视频观看| 亚洲国产天堂久久综合网站| 久久久久国产亚洲AV麻豆| 欧美激情精品久久久久久久| 久久人做人爽一区二区三区 | 人人狠狠综合久久88成人| 久久国产热精品波多野结衣AV| 亚洲狠狠综合久久| 国产69精品久久久久久人妻精品| 国产精品久久久久天天影视| 久久无码精品一区二区三区| 亚洲AV无码久久精品蜜桃| 久久国产乱子伦精品免费午夜| 亚洲va国产va天堂va久久| 久久精品一区二区三区中文字幕 | 久久国产精品-久久精品| 欧美性大战久久久久久| 久久久九九有精品国产| 久久只有这精品99| 久久一本综合| 国产巨作麻豆欧美亚洲综合久久 | 久久亚洲精品国产亚洲老地址| 亚洲av伊人久久综合密臀性色| 久久久久久无码国产精品中文字幕| 久久精品中文闷骚内射| 中文字幕久久精品无码| 亚洲美日韩Av中文字幕无码久久久妻妇| 久久综合久久综合久久综合| 狠狠色丁香久久婷婷综合五月 | 久久精品一本到99热免费| 欧美午夜精品久久久久久浪潮| 欧美亚洲另类久久综合| 久久本道伊人久久| 99久久精品午夜一区二区| 久久亚洲国产成人精品性色| 99久久免费国产精品特黄| 免费无码国产欧美久久18| 久久久久久久波多野结衣高潮| 久久久这里只有精品加勒比| 国产香蕉久久精品综合网| 中文字幕日本人妻久久久免费|