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.

  1. // 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.

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

4. Create an interactive context.

  1. // 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.

  1. Handle_AIS_Shape aBox = new AIS_Shape(MF.Shape());
  2. Handle_AIS_Shape aCone = new AIS_Shape(BRepPrimAPI_MakeCone(, , ));
  3. Handle_AIS_Shape aSphere = new AIS_Shape(BRepPrimAPI_MakeSphere());

7. Display the interactive object.

  1. myContext->Display(aBox);
  2. myContext->Display(aCone);
  3. myContext->Display(aSphere);

三、结论 Conclusion

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

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

  1. QT += core gui opengl

l 头文件目录的设置:

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

l 引用库的设置:

  1.   LIBS += D:\OpenCASCADE6.5.5\ros\win64\vc11\libd\TKernel.lib
  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

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. acm入门 杭电1001题 有关溢出的考虑

    最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...

  2. C# uploadify 上传 -220 IO Error 问题

    1. 前端: uploadify 上文件大小限制配置. 2. 后端: web.config 配置 <?xml version="1.0"?> <configura ...

  3. Check a dll is x64 or x86

    Just read two good articles on this topic: http://stackoverflow.com/questions/480696/how-to-find-if- ...

  4. 出现了内部错误-网站中X509Certificate2加载证书时出错

    今天给网站配置了加密证书文件,用类X509Certificate2加载证书文件时,一直报出现了内部错误,但是Demo中用控制台程序加载证书没任何问题 读取证书文件的语句: X509Certificat ...

  5. 【Beta】Daily Scrum Meeting第六次

    1.任务进度 学号 已完成 接下去要做 502 无 发布任务到服务器 509 给所有api添加注释 将各个api改为面向对象 517 无 删除任务的控件及逻辑 530 下拉刷新控件 添加及修改职工信息 ...

  6. setView的AlertDialog在受到二次点击后出错

    错误报告: 10-21 13:11:16.009: E/AndroidRuntime(27937): FATAL EXCEPTION: main10-21 13:11:16.009: E/Androi ...

  7. Jenkins中构建Testcomplete项目的方法介绍

    Jenkins的部署在上一篇随笔中已经和大家介绍了,下面我们介绍一下再Jenkins中构建testcomplete项目.我这里使用的是Testcomplete11,下面详细介绍一下构建步骤. 1.Je ...

  8. centos 7.2 安装PHP7.1+apache2.4.23

    安装准备:   http://ftp.cuhk.edu.hk/pub/packages/apache.org//httpd/httpd-2.4.23.tar.gz 下载apache http://cn ...

  9. Comparing the MSTest and Nunit Frameworks

    I haven't seen much information online comparing the similarities and differences between the Nunit ...

  10. 安卓刷机--fastboot线刷

    首先需要下载fastboot.exe,copy到system32文件夹下. 对于安卓系统的智能手机,同时按住开机键和音量减键,或手机连上电脑,输入adb reboot bootloader进入fast ...