文档章节

Qt with OpenCascade

eryar
 eryar
发布于 2014/11/23 12:35
字数 1333
阅读 174
收藏 0

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公司开发和市场运作的。库被设计成模块化和易扩展。 

wps_clip_image-13969

Figure 1.1 OpenCascade架构图 

二、Qt + OpenCascade

使用的开发工具为Qt Creator 2.7.0,Qt的版本为Qt 5.0.2。如下图所示: 

wps_clip_image-31905

Figure 3.1 Qt and Qt Creator version Info 

OpenCascade的版本为OpenCASCADE6.5.5,如下图所示: 

wps_clip_image-23467

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.  

// Create a 3D viewer.
   try
   {
       myGraphicDevice = new Graphic3d_WNTGraphicDevice;
   }
   catch (Standard_Failure)
   {
       QMessageBox::critical(this, tr("About occQt"),
           tr("<h2>Fatal error in graphic initialisation!</h2>"),
           QMessageBox::Apply);
   }

   myViewer = new V3d_Viewer(myGraphicDevice, Standard_ExtString("Visu3D"));
   myViewer->Init();
   myViewer->SetDefaultLights();
   myViewer->SetLightOn();

3. Create a view.

// Create the view.
myView = theContext->CurrentViewer()->CreateView();

 4. Create an interactive context.

// Create an interactive context.
myContext = new AIS_InteractiveContext(myViewer);
myContext->SetDisplayMode(AIS_Shaded);

5. Create interactive objects. 

略; 

6. Create primitives in the interactive object.

Handle_AIS_Shape aBox = new AIS_Shape(MF.Shape());
Handle_AIS_Shape aCone = new AIS_Shape(BRepPrimAPI_MakeCone(50, 30, 80));
Handle_AIS_Shape aSphere = new AIS_Shape(BRepPrimAPI_MakeSphere(60));

7. Display the interactive object.

myContext->Display(aBox);
myContext->Display(aCone);
myContext->Display(aSphere);

 

三、结论 Conclusion

编译过程中遇到一些问题,主要是头文件包含及库引用问题。需要对Qt工程文件做如下设置: 

l 因为程序使用了QGLWidget,所以在其工程中要引用OpenGL的库。设置方法如下:

QT += core gui opengl;

 l 头文件目录的设置:

INCLUDEPATH += D:\OpenCASCADE6.5.5\ros\inc;

 l 引用库的设置:

  LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKernel.lib
  LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKMath.lib
  LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKBRep.lib
  LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKTopAlgo.lib
  LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKPrim.lib
  LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKService.lib
  LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKV3d.lib
  LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKFillet.lib

上述目录根据不同的计算机需要做相应修改。程序运行结果如下图所示: 

wps_clip_image-18191

Figure 3.1 Sphere in occQt 

 

PDF Version and Sample Code: Qt with OpenCascade

© 著作权归作者所有

eryar
粉丝 21
博文 127
码字总数 227012
作品 0
武汉
私信 提问
加载中

评论(2)

eryar
eryar
Hi,
你好!

这个需要在编译器中定义一个宏:WNT
或在代码中定义:
#define WNT
就可以了。
l
liuzhonghust
您好,编译你的示例代码时,提示C1189:#error:"Wrong compiler options has been detected. Add /DWNT option for proper compilation!!!!!",怎么解决?求赐教
FreeCAD 0.16 发布,开源 CAD/CAE 工具

FreeCAD 0.16 发布了,FreeCAD是一个基于OpenCASCADE的开源CAD/CAE工具。 OpenCASCADE是一套开源的CAD/CAM/CAE几何模型核心,来自法国Matra Datavision公司,是著名的CAD软件EUCLID的开发平台...

oschina
2016/04/21
2.9K
2
Building OpenCascade on Windows with Visual Studio

Building OpenCascade on Windows with Visual Studio eryar@163.com 摘要Abstract:详细说明OpenCascade的编译配置过程,希望对你编译OpenCascacde有所帮助。本文内容来自OCCT的Overview文档...

eryar
2013/09/23
0
0
OpenCASCADE Make Primitives-Box

OpenCASCADE Make Primitives-Box eryar@163.com Abstract. By making a simple box to demonstrate the BRep data structure of the OpenCASCADE. The construction method is different fr......

eryar
2014/11/23
0
0
如何将openCASCADE和c++结合起来,哪位牛人能不能给我指点指点啊.

如何将openCASCADE和c++结合起来,哪位牛人能不能给我指点指点啊.我现在正想用openCASCADE和c++结合起来做一个像cad软件的东西。

chenchenxixi
2012/07/09
1K
2
FreeCAD 0.17Pre 发布,开源 CAD/CAE 工具

FreeCAD 0.17Pre 发布了。 FreeCAD是一个基于OpenCASCADE的开源CAD/CAE工具。 OpenCASCADE是一套开源的CAD/CAM/CAE几何模型核心,来自法国Matra Datavision公司,是著名的CAD软件EUCLID的开发...

达尔文
2016/10/10
2.3K
3

没有更多内容

加载失败,请刷新页面

加载更多

JAVA 8 中新增 lambda 表达式的一些基本应用

import java.util.Arrays;import java.util.List;import java.util.function.Function;import java.util.stream.Collectors;public class TestLambda { public static void......

这是一只小小鸟
22分钟前
1
0
Java向word中插入Excel文件对象

前言: 在word文件中,虽然也有表格。但是有时我们想要将Excel中表格的大量数据直接插入到word文档中,这就需要用到word的插入对象的功能,也就是直接将Excel文件当做对象插入到word中。 本地的...

qianxi
24分钟前
2
0
海量数据下的注册中心 - SOFARegistry 架构介绍

SOFAStack Scalable Open Financial Architecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFARegi...

SOFAStack
27分钟前
12
0
python操作excel表格

python 对excel的操作 提示:如果需要写多个表,需要把多个表写完在保存,否则会出现表格覆盖问题 此程序 采取一边请求,一边存取,做个异常处理,即可保存已存在的数据 """# sheet的名称,...

鹏灬
29分钟前
1
0
好程序员web前端分享如何理解JS的单线程

好程序员web前端分享如何理解JS单线程,JS本质是单线程的。也就是说,它并不能像JAVA语言那样,两个线程并发执行。 但我们平时看到的JS,分明是可以同时运作很多任务的,这又是怎么回事呢? ...

好程序员IT
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部