用OCC+VS+Qt创建并显示一个几何_occ opengldriver-程序员宅基地

技术标签: c++  qt  Opencascade  

用OCC+VS+Qt创建并显示一个几何

OCC+VS+QT相关配置详细见

OCC+ QT+VS、OCC+QtCreator 环境配置

创建视图并显示几何

OCC中显示过程如下:

  1. 获取OpenGl_GraphicDriverr图形驱动

  2. 基于图形驱动初始化一个V3d_Viewer

  3. 通过Viewer创建一个视图View,并设置显示窗口

  4. 通过Viewer初始化一个AIS_Context交互环境,并设置其显示方式(shaded或者wire)

  5. 将几何模型转换为拓扑类型

  6. 经拓扑模型转换为AIS类型(交互对象类型)

  7. 在context中显示交互对象

.h文件

#pragma once

#include <QtWidgets/QMainWindow>
#include <Standard_Handle.hxx>
#include <V3d_Viewer.hxx>
#include <OpenGl_GraphicDriver.hxx>
#include <WNT_Window.hxx>
#include <V3d_View.hxx>
#include <AIS_InteractiveContext.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <TopoDs_Shape.hxx>
#include <AIS_Shape.hxx>


class QtWidgetsApplication1 : public QMainWindow
{
    
    Q_OBJECT

public:
    QtWidgetsApplication1(QWidget *parent = nullptr);
    ~QtWidgetsApplication1();
protected:
	    //重写绘图事件
	  void paintEvent(QPaintEvent *event) override;
	  //返回窗口绘图引擎
	  QPaintEngine *paintEngine() const;

private:
    Ui::QtWidgetsApplication1Class ui;
    //定义查看器viewer 3D查看器
	  Handle(V3d_Viewer) viewer;
	  //视图
  	Handle(V3d_View) view;
  	//交互式上下文,管理一个或者多个viewer
  	Handle(AIS_InteractiveContext) context;
  	//window NT窗口
	  Handle(WNT_Window) window;

};

cpp文件

#include "QtWidgetsApplication1.h"

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    
  //提供X server的连接,在window和Mac中不起作用
	Handle(Aspect_DisplayConnection) hAspect_DisplayConnect = new Aspect_DisplayConnection;
	//创建3D接口定义图形驱动
	Handle(OpenGl_GraphicDriver) driver = new OpenGl_GraphicDriver(hAspect_DisplayConnect);

	//该类的方法允许编辑、询问连接该类的其他参数(如视图、光)
	viewer = new V3d_Viewer(driver);
	view = viewer->CreateView();

	WId win_handle = winId();
	//在已有的窗口上创建窗口
	window = new WNT_Window((Aspect_Handle)win_handle);
	view->SetWindow(window);
	if (!window->IsMapped())
	{
    
		window->Map();//打开窗口
	}
	view->SetBackgroundColor(Quantity_NOC_BLACK);
	view->MustBeResized();
	viewer->SetDefaultLights();
	setAttribute(Qt::WA_PaintOnScreen);
  //交互式上下文
	context = new AIS_InteractiveContext(viewer);
	context->SetDisplayMode(AIS_Shaded, Standard_True);

	TopoDS_Shape box = BRepPrimAPI_MakeBox(10, 10, 10);
	Handle(AIS_Shape) abox = new AIS_Shape(box);
	context->Display(abox, Standard_True);
	view->FitAll();

}

QtWidgetsApplication1::~QtWidgetsApplication1()
{
    }

void QtWidgetsApplication1::paintEvent(QPaintEvent * event)
{
    
	view->Redraw();
}

QPaintEngine * QtWidgetsApplication1::paintEngine() const
{
    
	return 0;
}

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44064908/article/details/125614724

智能推荐

三分钟教你读懂支票是什么_支票的原理是什么-程序员宅基地

文章浏览阅读8.7k次。三分钟教你读懂支票是什么支票1、支票的概念及特点支票:出票人签发的,委托办理支票存款业务的银行或其他金融机构在见票时无条件支付确定金额给收款人或持票人的票据。支票必填项:支票字样、确定的金额、出票日期、无条件支付委托、付款人名称、出票人签章。支票选填项:付款地、出票地。支票结算特点:(1)简便,手续_支票的原理是什么

山东工商学院 计算机科学与技术,实验中心-山东工商学院计算机科学与技术学院...-程序员宅基地

文章浏览阅读148次。计算机教学实验中心成立于1999年,隶属计算机科学与技术学院。实验中心现有软件、电子、网络、通信、大学生科技创新、AR技术研究所等41间实验室,实验面积5600平方米,固定资产3500万元,教(职)工26人。实验中心以先进精良的设备条件、整洁舒适的教学环境、科学严谨的管理方式为计算机科学与技术学院、信息与电子工程学院、管理科学与工程学院等学院的实验教学、课程设计、毕业设计等实践环节和全院计算机公共..._计算机科学与技术实验教学中心 山东

CUDA ERROR: device-side assert triggered at 问题及解决思路-程序员宅基地

文章浏览阅读10w+次,点赞45次,收藏82次。cuda errorRuntimeError: cuda runtime error (59) : device-side assert triggered at ...我之前还以为是因为GPU抽风了引发的BUG,所以第一次没有在意,直接又重新开始运行了一次,但是第二次就发现程序在同样的地方断掉了,这也就想起来我以前看到的一个博客,里面有句话的大概意思是这样的:每次都在同样的地方出错的..._cuda error: device-side assert triggered

HDOJ1556 树状数组简单应用_hdoj 树状数组基础-程序员宅基地

文章浏览阅读251次。Color the ballTime Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 23142 Accepted Submission(s): 11237Problem DescriptionN个气球排成一排,_hdoj 树状数组基础

浅析HTML_解析html-程序员宅基地

文章浏览阅读430次。HTML面试题整理以及一些自我理解_解析html

idea 启动报错: Failed to create JVM.JVM.Path XXXXXXX\jbr\ 我的解决办法-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏6次。idea 启动报错: Failed to create JVM.JVM.Path XXXXXXX\jbr\ 我的解决办法在C:\Users\Administrator\AppData\Roaming\JetBrains\PhpStorm2021.1的文件夹里,找到 phpstorm64.exe.vmoptions 这个文件,并改回原来的配置即可。因为这个路径下的vmoptions文件是我当时修改过的(Help->Edit custom VM Options) phpstorm64.exe.vmop_failed to create jvm

随便推点

Java Swing 如何使用JTree(1)_swing 如何初始化一个jtree-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏6次。Java Swing 如何使用JTree_swing 如何初始化一个jtree

Go 语言到底适合干什么?_对java开发者来说 go 能做什么-程序员宅基地

文章浏览阅读115次。Go 语言对于构建微服务和 API 很有优势,因为它的代码结构简单,易于维护,同时具有高效和高并发特性。由于云计算中的系统通常是分布式的,Go 语言的并发编程模型非常适合用于处理云计算中的任务。由于 Go 语言具有高效和高性能的特性,因此它非常适合用于构建 Web 应用程序。Go 语言原生支持高效的并发编程,因此非常适合用于构建网络应用程序和分布式系统。Go 语言具有高效的执行性能和并发处理能力,因此很适合用于处理大量数据。Go 语言的语言特性、安全性和执行效率都非常适合用于系统编程领域。_对java开发者来说 go 能做什么

【虚拟仿真】Unity3D中拆分模型教程(多种类型模型拆分)_unity怎么拆分模型-程序员宅基地

文章浏览阅读1.4w次,点赞63次,收藏160次。推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。一、前言今天有小伙伴在我这篇文章【虚拟仿真】Unity3D对物体进行拆分实现下面问我如何一秒一拆:虽然我已经给出了思路,但是离实现还是有点思路,正好我对于我这篇文章也是不满意,就解答一下小伙伴的疑惑,然后再将文章内容进行升级。原文章:【虚拟仿真】Unity3D对物体进行拆分实._unity怎么拆分模型

ChatGLM2本地部署的实战方案-程序员宅基地

文章浏览阅读10w+次,点赞55次,收藏74次。本文主要介绍了ChatGLM2本地部署应用的实战方案,希望对学习大语言模型的同学们有所帮助。文章目录1. 介绍2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库3. 下载权重文件4. 运行ChatGLM2 4.1 方式一 4.2 方式二_chatglm2

r语言c1,R语言之主成分分析-程序员宅基地

文章浏览阅读568次。主成分分析R软件实现程序(一):>d=read.table("clipboard",header=T)#从剪贴板读取数据>sd=scale(d)#对数据进行标准化处理>sd#输出标准化后的数据和属性信息,把标准化的数据拷贝到剪贴板备用>d=read.table("clipboard",header=T)#从剪贴板读取标准化数据>pca=princomp(d,co..._r语言dcor什么意思

webGl学习-程序员宅基地

文章浏览阅读127次。开个新坑,不知道能不能做完学习地址:mdn地址浏览器支持范围:支持范围首先是创建一个容器,与canvas的canvas.getContext('2d')相似let canvas = document.getElementById('myCanvas');let gl = canvas.getContext('webgl');_webgl学习