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.

// 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(, , ));
Handle_AIS_Shape aSphere = new AIS_Shape(BRepPrimAPI_MakeSphere());

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

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

Figure 3.1 Sphere in occQt

PDF Version and Sample Code: Qt with OpenCascade

Qt with OpenCascade的更多相关文章

  1. A Simple OpenCASCADE Qt Demo-occQt

    A Simple OpenCASCADE Qt Demo-occQt eryar@163.com Abstract. OpenCASCADE have provided the Qt samples ...

  2. Use Qt in Debian for OpenCASCADE

    Use Qt in Debian for OpenCASCADE eryar@163.com Recently several OpenCASCADE enthusiasts want to buil ...

  3. OpenCascade极简环境搭建(QT环境)

    现在网上关于OpenCascade(OCCT)的环境搭建几乎都是下载源码,然后实时MinGW来编译生成源码.但是,官方有提供Windows平台下的可执行文件,如果想快速了解OpenCascade(OC ...

  4. OpenGL Shader in OpenCASCADE

    OpenGL Shader in OpenCASCADE eryar@163.com Abstract. As implementation of one of the strategic steps ...

  5. Undo/Redo for Qt Tree Model

    Undo/Redo for Qt Tree Model eryar@163.com Abstract. Qt contains a set of item view classes that use ...

  6. Qt Undo Framework Demo

    Qt Undo Framework Demo eryar@163.com Abstract. Qt’s Undo Framework is an implementation of the Comma ...

  7. OpenCASCADE JT Assistant

    OpenCASCADE JT Assistant eryar@163.com Abstract. Siemens’ JT data format accepted as the world’s fir ...

  8. Hello World of OpenCascade

    Hello World of OpenCascade eryar@163.com 摘要Abstract:以一个经典的Hello World程序为例开始对开源几何造型内核OpenCascade的学习. ...

  9. Building third-party products of OpenCascade

    Building third-party products of OpenCascade eryar@163.com Available distributives of third-party pr ...

随机推荐

  1. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  2. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  3. C#委托与事件初探

    最近刚刚接触C#,学到事件与委托部分无法理解,于是上网查阅了各种资料,终于明白了一些,在此进行总结. 一.C语言中的函数指针 想要理解什么是委托,就要先理解函数指针的概念.所谓函数指针,就是指向函数的 ...

  4. [IOS]使用了cocoapods 抱错Pods was rejected as an implicit dependency for ‘libPods.a’ because its architectures ......

    Pods was rejected as an implicit dependency for ‘libPods.a’ because its architectures ‘i386’ didn’t ...

  5. php+ajax..转

    php+ajax 登录注册页面 主要是登录注册功能,前端后台验证没有什么,这个大家可以自己加上去,比如过滤啊,正则啊等 还是先放图吧 这是登录及注册界面  点击注册切换到注册界面,点击登录切换到登录界 ...

  6. express-session 保存遇到的问题

    今天在用express4 试着做网站的时候,发现request.session 中一直不能保存新的值,还一直报一个错 express-session deprecated undefined resa ...

  7. CentOS6.4安装JDK1.7

    安装说明 1.安装环境: CentOS6.4 64位系统 2.安装方式:rpm安装 3.软 件 包:jdk-7u71-linux-x64.rpm 4.下载地址:http://www.oracle.co ...

  8. linux进程管理(上)

    程序和进程的区别: 1.程序是一种静态资源 程序启动产生进程 2.程序与进程无一一对应原则  进程是动态的一个过程 父进程和子进程在前面提过 前台进程:执行命令时只能等待的进程为前台进程也叫异步进程 ...

  9. eclipse构建maven的web项目

    如果以后要创建maven的web项目,可以参考这个链接 http://blog.csdn.net/smilevt/article/details/8215558/

  10. 同一个页面多个page之间的切换

    今天接触了JQ Mobile以下是本小白的理解(不怕大家笑话): 创建移动 web 应用程序的框架:适用于所有流行的智能手机和平板电脑: 将“写得更少.做得更多”这一理念提升到了新的层次:它会自动为网 ...