OpenCASCADE+Qt创建建模平台

1、建模平台效果

在这里插入图片描述
在这里插入图片描述

2、三维控件OCCWidget

  将V3d_View视图与控件句柄绑定即可实现3d视图嵌入Qt中,为了方便也可以基于QOpenGLWidget控件进行封装,方便嵌入各种窗体使用并自由缩放。

#ifndef OCCTWIDGET_H
#define OCCTWIDGET_H

#include <QWidget>
#include <QMouseEvent>
#include <QWheelEvent>
#include <QKeyEvent>
#include <QApplication>
#include <AIS_InteractiveContext.hxx>
#include <OpenGl_GraphicDriver.hxx>
#include <V3d_View.hxx>
#include <Aspect_Handle.hxx>
#include <Aspect_DisplayConnection.hxx>
#include <Graphic3d_GraphicDriver.hxx>
#include <QOpenGLWidget>
#include <WNT_Window.hxx>

//三维显示窗口

class OCCTWidget : public QOpenGLWidget
{
    Q_OBJECT

public:
    explicit OCCTWidget(QWidget *parent = nullptr);

    //  获取三维环境交互对象
    Handle(AIS_InteractiveContext) getInteractiveContext(){return m_InteractiveContext;}

    //  获取三维显示界面
    Handle(V3d_View)  get3dView(){return m_3dView;}

private:

    // 初始化交互环境
    void initializeInteractiveContext();

    // 交互式上下文能够管理一个或多个查看器(viewer)中的图形行为和交互式对象的选择
    Handle(AIS_InteractiveContext) m_InteractiveContext;

    // 定义查看器(viewer)类型对象上的服务
    Handle(V3d_Viewer) m_3dViewer;

    // 创建一个视图
    Handle(V3d_View) m_3dView;

    // 创建3d接口定义图形驱动程序
    Handle(Graphic3d_GraphicDriver) m_graphicDriver;

protected:

    // 覆写绘图事件
    void paintEvent(QPaintEvent *);

    // 覆写窗口尺寸变化事件
    void resizeEvent(QResizeEvent *);

    // 覆写鼠标按键按下事件
    void mousePressEvent(QMouseEvent *event);

    // 覆写鼠标按键释放事件
    void mouseReleaseEvent(QMouseEvent *event);

    // 覆写鼠标移动事件
    void mouseMoveEvent(QMouseEvent *event);

    // 覆写鼠标滚轮事件
    void wheelEvent(QWheelEvent *event);
private:
    Standard_Integer m_xValue;    // 记录鼠标平移坐标X
    Standard_Integer m_yValue;    // 记录鼠标平移坐标Y
    CurrentAction3d m_currentMode; // 三维场景转换模式
};

#endif // OCCTWIDGET_H
void OCCTWidget::initializeInteractiveContext()
{
    //若交互式上下文为空,则创建对象
    if (m_InteractiveContext.IsNull())
    {
        //此对象提供与X server的连接,在Windows和Mac OS中不起作用
        Handle(Aspect_DisplayConnection) m_display_donnection = new Aspect_DisplayConnection();
        //创建OpenGl图形驱动
        if (m_graphicDriver.IsNull())
        {
            m_graphicDriver = new OpenGl_GraphicDriver(m_display_donnection);
        }
        //获取QWidget的窗口系统标识符
        WId window_handle = (WId) winId();
        
        // 创建Windows NT 窗口
        Handle(WNT_Window) wind = new WNT_Window((Aspect_Handle) window_handle);

        //创建3D查看器
        m_3dViewer = new V3d_Viewer(m_graphicDriver);

        //创建视图
        m_3dView = m_3dViewer->CreateView();
        m_3dView->SetWindow(wind);

        //打开窗口
        if (!wind->IsMapped())
        {
            wind->Map();
        }
        //创建交互式上下文
        m_InteractiveContext = new AIS_InteractiveContext(m_3dViewer);  
        ……………………………………
        ……………………………………
    }
}

3、三维建模类OCCModeling

  对OCC提供的各种建模函数进行验证,并实现较为复杂的水瓶建模。

#include <BRepPrimAPI_MakeSphere.hxx>
#include <BRepPrimAPI_MakeCone.hxx>
#include <BRepPrimAPI_MakeTorus.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <BRepOffsetAPI_MakePipe.hxx>  
#include <AIS_Shape.hxx>

#include <Geom_TrimmedCurve.hxx>
#include <GC_MakeArcOfCircle.hxx>
#include <GC_MakeSegment.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <TopoDS_Wire.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepBuilderAPI_Transform.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <TopoDS.hxx>
#include <BRepPrimAPI_MakePrism.hxx>
#include <BRepFilletAPI_MakeFillet.hxx>
#include <TopExp_Explorer.hxx>
#include <BRepPrimAPI_MakeCylinder.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <Geom_Plane.hxx>
#include <TopoDS_Edge.hxx>
#include <BRepOffsetAPI_MakeThickSolid.hxx>
#include <Geom_CylindricalSurface.hxx>
#include <Geom2d_Ellipse.hxx>
#include <Geom2d_TrimmedCurve.hxx>
#include <GCE2d_MakeSegment.hxx>
#include <BRepLib.hxx>
#include <BRepOffsetAPI_ThruSections.hxx>
#include <Geom_BezierCurve.hxx>

class OCCTModeling
{
public:
	//  生成立方体
	static TopoDS_Shape CreateBoxModel(Standard_Real _dx = 1.0, Standard_Real _dy = 1.0, Standard_Real _dz = 1.0);

	//  生成圆柱
	static TopoDS_Shape CreateCylinder(Standard_Real _R = 0.5, Standard_Real _H = 2.0);

	//  球体
	static TopoDS_Shape CreateSphere(Standard_Real _R = 1.0);

	//  生成圆锥
	static TopoDS_Shape CreateCone(Standard_Real _R1 = 1.0, Standard_Real _R2 = 0.0, Standard_Real _H = 2.0);

	//  生成圆环体
	static TopoDS_Shape CreateTorus(Standard_Real _R1 = 2.0, Standard_Real _R2 = 0.5);

	//  生成水瓶 
	static TopoDS_Shape CreateBottle(Standard_Real _Width = 60.0, Standard_Real _Height = 40.0, Standard_Real _Thickness = 20.0);

	//  生成直管
	static TopoDS_Shape CreatePipe(const Standard_Real dRadius = 20.0, const Standard_Real dThickness = 2.0, const Standard_Real dLength = 100.0);
};

4、源码地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/440970.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云轴科技ZStack荣获证券基金行业信息技术应用创新联盟年度优秀成员奖

近日&#xff0c;由中国证监会科技监管司、上海市经济和信息化委员会及上交所理事会科技发展委员会指导&#xff0c;证券基金行业信息技术应用创新联盟&#xff08;简称信创联盟&#xff09;主办的2023年年度工作会议在上海成功举办。会议汇聚了来自监管机构、政府机构、行业侧…

继深圳后,重庆与鸿蒙展开原生应用开发合作

截至2023年底&#xff0c;开源鸿蒙开源社区已有250多家生态伙伴加入&#xff0c;开源鸿蒙项目捐赠人达35家&#xff0c;通过开源鸿蒙兼容性测评的伙伴达173个&#xff0c;累计落地230余款商用设备&#xff0c;涵盖金融、教育、智能家居、交通、数字政府、工业、医疗等各领域。 …

this.$set,更新vue视图

this.$set(this.searchForm, age, 30) // 对象 this.$set(this.searchForm1, 0, { name: 汪汪, age: 11, content: 擅长口算 })// 数组

Android使用WebView打开外部网页链接

发布Android应用&#xff0c;除了用原生开发外&#xff0c;更多是采用内嵌H5网页的方式来做&#xff0c;便于更新以及多平台使用。 一、第一种方式是直接通过WebView打开外部H5链接。 新建Android工程 直接创建一个工程&#xff0c;点击运行就可以了&#xff0c;打开是个空页…

STM32(14)USART

USART:一种片上外设&#xff0c;用来实现串口通信&#xff0c;就是stm32内部的串口 USART简介 串并转换电路 串行通信和并行通信 串行&#xff1a;一根数据线&#xff0c;逐个比特位发送 为什么要串并转换 移位寄存器 USART的基本模型 通过查询SR&#xff08;状态寄存器&…

加速大模型落地:火山引擎向量数据库的实践应用

近两年随着大模型技术的快速发展&#xff0c;图片、视频、自然语言等多模态、非结构化数据的查找需求变大&#xff0c;非结构化数据的量级也远大于结构化数据&#xff0c;传统数据库已经无法满足如此多样化数据的处理需求。向量数据库以其海量的数据存储规模、高效的计算查询能…

并发安全问题(超卖问题)

一&#xff0c;问题解析 超买问题就是&#xff0c;原本库存中有200件库存&#xff0c;结果由于并发问题售出了300件这就是炒卖问题对于买东西无非就是 查询商品&#xff0c;判断库存是否充足&#xff0c;如果充足则下单成功。 这里采用的是先查询&#xff0c;再判断&#xff0c…

复杂业务场景下,如何优雅的使用设计模式来优化代码?

1、引言 本文以一个实际案例来介绍在解决业务需求的路上&#xff0c;如何通过常用的设计模式来逐级优化我们的代码&#xff0c;以把我们所了解的到设计模式真实的应用于实战。 2、背景 假定我们现在有一个订单流程管理系统&#xff0c;这个系统对于用户发起的一笔订单&#…

MyBatis-Plus如何娴熟运用乐观锁

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 MyBatis-Plus如何娴熟运用乐观锁 前言乐观锁的基本概念基本概念和原理&#xff1a;为何乐观锁是解决并发问题的有效手段&#xff1a; MyBatis-Plus中乐观锁的支持1. Version 注解&#xff1a;2. 配置乐…

穿越牛熊,股市的春天还有多远?

2023年&#xff0c;资本市场的严冬令无数投资者和机构投资者都感受到了前所未有的压力。VC/PE、公募基金、股权投资类公司等机构&#xff0c;在这一年里业绩普遍不佳&#xff0c;寒意弥漫。VC/PE机构的营业收入普遍呈现负增长&#xff0c;公募基金更是历史上首次连续两年亏损&a…

包含字母数字及特殊字符 三种组合的正则两种写法

//长度8~16位&#xff1b;包含字母、数字及特殊字符 #$%^&*_-//正则1 写法&#xff1a;let reg_1 /^(?![A-Za-z0-9]$)^(?![A-Za-z#$\%^&*_\-]$)^(?![0-9#$\%^&_*\-]$)([A-Za-z0-9#$\%^&*_\-]{8,16})$///正则2 写法&#xff1a;let reg_2 /^(?![A-Za-z#$%…

在Vue中处理接口返回的二进制图片数据

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

产品经理必看,教你写一份简单的产品说明书

作为一名产品经理&#xff0c;你可能会为如何写一份能够有效传达产品特性和使用步骤的说明书而困扰。确实&#xff0c;写作产品说明书的过程中&#xff0c;需要详细并准确展示产品的所有功能&#xff0c;同时保持文本清晰、简洁和易于理解。以下是一些步骤和技巧&#xff0c;可…

AntV L7的pointLayer点图层

本案例使用L7库和Mapbox GL JS创建点数据并加载进地图。 文章目录 1. 引入 CDN 链接2. 引入组件3. 创建地图4. 创建场景5. 创建点数据5.1. 普通 json 数据5.2. geojson 数据 6. 创建点图层6.1. 普通 json 数据6.2. geojson 数据 7. 演示效果8. 代码实现 1. 引入 CDN 链接 <s…

不注册访问 Claude3 大模型

随着Claude3大模型的出世&#xff0c;大模型霸主地位已经发生易位&#xff0c;但是国内使用Claude3官网 无论是注册都不容易&#xff0c;本篇文章主要介绍如何不通过Claude3 官网实现Claude3 大模型的使用&#xff0c;这里优先推荐Chatbot Arena 一、直接通过第三方代理 Chatb…

CorelDRAW Graphics Suite2024免费试用体验15天版下载

使用基于全球知名的 Corel Painter 画笔技术构建的 100 款逼真像素画笔&#xff0c;以全新的方式将您独特的想法变为现实&#xff01;试用 CorelDRAW 的全新美术画笔&#xff0c;探索您的创意想法。 使用 CorelDRAW 中现在可用的远程字体&#xff0c;畅享更多创作自由&#xf…

Humanoid-Gym 开源人形机器人端到端强化学习训练框架!星动纪元联合清华大学、上海期智研究院发布!

系列文章目录 前言 Humanoid-Gym: Reinforcement Learning for Humanoid Robot with Zero-Shot Sim2Real Transfer GitHub Repository: GitHub - roboterax/humanoid-gym: Humanoid-Gym: Reinforcement Learning for Humanoid Robot with Zero-Shot Sim2Real Transfer 一、介…

一键查看:大厂网站都用了啥技术栈,有图有真相。

本次我们采用Wappalyzer插件来看下国内大厂的网站都采用了什么技术架构&#xff0c;文章最后由Wappalyzer的安装方法。 今日头条网站 淘宝网站 哔哩哔哩 京东商城 花瓣网 CSDN 国务院 网易 58同城 腾讯网 如何安装Wappalyzer 用Edge浏览器即可

软考70-上午题-【面向对象技术2-UML】-UML中的图1

一、图的定义 图是一组元素的图形表示&#xff0c;大多数情况下把图画成顶点、弧的联通图。 顶点&#xff1a;代表事物&#xff1b; 弧&#xff1a;代表关系。 可以从不同的角度画图&#xff0c;UML提供了13种图&#xff1a;&#xff08;只看9种&#xff09; 类图&#xff…