Qt with OpenCascade
摘要Abstract:詳細介紹了如何在Qt中使用OpenCascade。
關鍵字Key Words:Qt、OpenCascade
一、引言 Introduction
1.1 Overview of Qt
Qt是1991年奇趣科技開發的一個跨平臺的C++圖形用戶界面應用程序框架。它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所有功能。Qt很容易擴展,并且允許真正地組件編程。基本上,Qt同X Window上的Motif,Openwin,GTK等圖形界面庫和Windows平臺上的MFC,OWL,VCL,ATL是同類型的東西。
Qt具有如下優點:
l 優良的跨平臺特性:Qt支持下列操作系統:Microsoft Windows 95/98, NT, Linux, Solaris, SunOS, HP-UX, FreeBSD, SCO等;
l 面向對象:Qt良好的封裝機制使得Qt的模塊化程序非常高,可重用性較好,對于用戶開發來說是非常方便的。Qt提供了一種稱為signals/slots的安全類型來替代callback,這使得各個元件之間的協同工作變得非常簡單;
l 豐富的API:Qt包含多達250個以上的C++類,還提供基于模板的collections, serialization, file, I/O device, directory management, data/time類。甚至還包括正則表達式的處理功能;
l 支持2D、3D圖形渲染,支持OpenGL;
l 大量的開發文檔;
l XML支持;
Qt按不同的版本進行發布:
n Qt商業版:提供給商業軟件開發。它們提供傳統商業軟件發行版并且提供在協議有效期內的免費升級和技術支持服務。
n Qt開源版:僅為了開發自由和開放源碼軟件,提供了和商業版同樣的功能。GNU通用公共許可證下,它是免費的。
2009年3月發布的Qt4.5起,NOKIA為Qt增添了開源LGPL授權選擇。
1.2 Overview of OpenCascacde
OpenCascade(簡稱OCC)平臺是由法國Matra Datavision公司開發的CAD/CAE/CAM軟件平臺,可以說是世界上最重要的幾何造型平臺之一。開源OCC對象庫是一個面向對象的C++類庫,用于快速設計領域的專業應用程序。OCC主要用于開發二維和三維幾何建模應用程序,包括通用的或專業的計算機輔助設計(CAD)系統、計算機輔助制造(CAM)系統或分析領域的應用程序、仿真應用程序或圖形演示工具。OCC通過有機組織的C++庫文件提供了六個模塊:
l FoundationClasses
l ModelingData
l ModelingAlgorithms
l Visualization
l ApplicationFramework
l DataExchange
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公司開發和市場運作的。庫被設計成模塊化和易擴展。
Figure 1.1 OpenCascade架構圖
二、Qt + OpenCascade
使用的開發工具為Qt Creator 2.7.0,Qt的版本為Qt 5.0.2。如下圖所示:
Figure 3.1 Qt and Qt Creator version Info
OpenCascade的版本為OpenCASCADE6.5.5,如下圖所示:
Figure 3.2 OpenCascade Version Info
在OpenCascade中創建三維場景的步驟分為:
1.Create attributes.
2.Create a 3D viewer.
3.Create a view.
4.Create an interactive context.
5.Create interactive objects.
6.Create primitives in the interactive object.
7.Display the interactive object.
詳細說明請參考《Visualization User’s Guide》。下面結合程序代碼進行說明。
1. Create attributes.
略;
2. Create a 3D viewer.
2 try
3 {
4 myGraphicDevice = new Graphic3d_WNTGraphicDevice;
5 }
6 catch (Standard_Failure)
7 {
8 QMessageBox::critical(this, tr("About occQt"),
9 tr("<h2>Fatal error in graphic initialisation!</h2>"),
10 QMessageBox::Apply);
11 }
12
13 myViewer = new V3d_Viewer(myGraphicDevice, Standard_ExtString("Visu3D"));
14 myViewer->Init();
15 myViewer->SetDefaultLights();
16 myViewer->SetLightOn();
3. Create a view.
2 myView = theContext->CurrentViewer()->CreateView();
4. Create an interactive context.
2 myContext = new AIS_InteractiveContext(myViewer);
3 myContext->SetDisplayMode(AIS_Shaded);
5. Create interactive objects.
略;
6. Create primitives in the interactive object.
2 Handle_AIS_Shape aCone = new AIS_Shape(BRepPrimAPI_MakeCone(50, 30, 80));
3 Handle_AIS_Shape aSphere = new AIS_Shape(BRepPrimAPI_MakeSphere(60));
7. Display the interactive object.
2 myContext->Display(aCone);
3 myContext->Display(aSphere);
三、結論 Conclusion
編譯過程中遇到一些問題,主要是頭文件包含及庫引用問題。需要對Qt工程文件做如下設置:
l 因為程序使用了QGLWidget,所以在其工程中要引用OpenGL的庫。設置方法如下:QT += core gui opengl;
l 頭文件目錄的設置:INCLUDEPATH += D:\OpenCASCADE6.5.5\ros\inc;
l 引用庫的設置:
2 LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKMath.lib
3 LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKBRep.lib
4 LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKTopAlgo.lib
5 LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKPrim.lib
6 LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKService.lib
7 LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKV3d.lib
8 LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKFillet.lib
上述目錄根據不同的計算機需要做相應修改。程序運行結果如下圖所示:
Figure 3.1 Sphere in occQt
Figure 3.2 Transformation in occQt
PDF Version and Sample Code: Qt with OpenCascade