Open CASCADE学习|视图

news2025/1/31 8:12:49

目录

Mainwin.h

Mainwin.cpp


Mainwin.h

#pragma once#include <QtWidgets/QMainWindow>#include "Displaywin.h"#include "OCC.h"class Mainwin : public QMainWindow{  Q_OBJECTpublic:  Mainwin(QWidget* parent = nullptr);  ~Mainwin();private:  Mainwin* Mui;  Displaywin* Dui;private:  QMenu* fliemenuBar;  QAction* openstepfileaction;  QMenu* drawmenuBar;  QAction* drawboxaction;  QAction* drawbottleaction;  QAction* drawhelixaction;  QMenu* viewenuBar;  QAction* viewfrontaction;  QAction* viewbackaction;  QAction* viewtopaction;  QAction* viewbottomaction;  QAction* viewleftaction;  QAction* viewrightaction;  QAction* viewaxoaction;  QAction* viewresetaction;  QAction* viewfitallaction;  QAction* viewfitareaaction;  QAction* viewzoomaction;private:  void InitAction();  void InitMenu();private:  OCC occ;private slots:  void trigeropenfile();  void trigerdrawbox();  void trigerdrawbottle();  void trigerdrawhelix();  void trigerviewfront();  void trigerviewback();  void trigerviewtop();  void trigerviewbottom();  void trigerviewleft();  void trigerviewright();  void trigerviewaxo();  void trigerviewreset();  void trigerfitall();  void trigerfitarea();  void trigerzoom();};

Mainwin.cpp

#include "Mainwin.h"
#include<QMenu>
#include<QMenuBar>
#include <QMessageBox>
#include<QFileDialog>
Mainwin::Mainwin(QWidget* parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("my draw"));
    resize(500, 500);
​
    Dui = new Displaywin(this);
    setCentralWidget(Dui);
    InitAction();
    InitMenu();
}
Mainwin::~Mainwin()
{}
void Mainwin::InitAction()
{
    openstepfileaction = new QAction(tr("open"), this);
    openstepfileaction->setShortcut(tr("Ctrl+O"));
    openstepfileaction->setStatusTip(tr("open a step file"));
    connect(openstepfileaction, SIGNAL(triggered()), this, SLOT(trigeropenfile()));
​
    drawboxaction = new QAction(tr("box"), this);
    drawboxaction->setShortcut(tr("Ctrl+1"));
    drawboxaction->setStatusTip(tr("draw a box"));
    connect(drawboxaction, SIGNAL(triggered()), this, SLOT(trigerdrawbox()));
​
    drawbottleaction = new QAction(tr("bottle"), this);
    drawbottleaction->setShortcut(tr("Ctrl+2"));
    drawbottleaction->setStatusTip(tr("draw a bottle"));
    connect(drawbottleaction, SIGNAL(triggered()), this, SLOT(trigerdrawbottle()));
​
    drawhelixaction = new QAction(tr("helix"), this);
    drawhelixaction->setShortcut(tr("Ctrl+3"));
    drawhelixaction->setStatusTip(tr("draw a helix"));
    connect(drawhelixaction, SIGNAL(triggered()), this, SLOT(trigerdrawhelix()));
​
    viewfrontaction = new QAction(tr("front"), this);
    viewfrontaction->setShortcut(tr("Ctrl+4"));
    viewfrontaction->setStatusTip(tr("front"));
    connect(viewfrontaction, SIGNAL(triggered()), this, SLOT(trigerviewfront()));
​
    viewbackaction = new QAction(tr("back"), this);
    viewbackaction->setShortcut(tr("Ctrl+5"));
    viewbackaction->setStatusTip(tr("back"));
    connect(viewbackaction, SIGNAL(triggered()), this, SLOT(trigerviewback()));
​
    viewtopaction = new QAction(tr("top"), this);
    viewtopaction->setShortcut(tr("Ctrl+6"));
    viewtopaction->setStatusTip(tr("top"));
    connect(viewtopaction, SIGNAL(triggered()), this, SLOT(trigerviewtop()));
​
    viewbottomaction = new QAction(tr("bottom"), this);
    viewbottomaction->setShortcut(tr("Ctrl+7"));
    viewbottomaction->setStatusTip(tr("bottom"));
    connect(viewbottomaction, SIGNAL(triggered()), this, SLOT(trigerviewbottom()));
​
    viewleftaction = new QAction(tr("left"), this);
    viewleftaction->setShortcut(tr("Ctrl+8"));
    viewleftaction->setStatusTip(tr("left"));
    connect(viewleftaction, SIGNAL(triggered()), this, SLOT(trigerviewleft()));
​
    viewrightaction = new QAction(tr("right"), this);
    viewrightaction->setShortcut(tr("Ctrl+9"));
    viewrightaction->setStatusTip(tr("right"));
    connect(viewrightaction, SIGNAL(triggered()), this, SLOT(trigerviewright()));
​
    viewaxoaction = new QAction(tr("axo"), this);
    viewaxoaction->setShortcut(tr("Ctrl+A"));
    viewaxoaction->setStatusTip(tr("axo"));
    connect(viewaxoaction, SIGNAL(triggered()), this, SLOT(trigerviewaxo()));
​
    viewresetaction = new QAction(tr("reset"), this);
    viewresetaction->setShortcut(tr("Ctrl+B"));
    viewresetaction->setStatusTip(tr("reset"));
    connect(viewresetaction, SIGNAL(triggered()), this, SLOT(trigerviewreset()));
​
    viewfitallaction = new QAction(tr("fitall"), this);
    viewfitallaction->setShortcut(tr("Ctrl+C"));
    viewfitallaction->setStatusTip(tr("fitall"));
    connect(viewfitallaction, SIGNAL(triggered()), this, SLOT(trigerfitall()));
​
    viewfitareaaction = new QAction(tr("fitarea"), this);
    viewfitareaaction->setShortcut(tr("Ctrl+D"));
    viewfitareaaction->setStatusTip(tr("fitarea"));
    connect(viewfitareaaction, SIGNAL(triggered()), this, SLOT(trigerfitarea()));
​
    viewzoomaction = new QAction(tr("zoom"), this);
    viewzoomaction->setShortcut(tr("Ctrl+E"));
    viewzoomaction->setStatusTip(tr("zoom"));
    connect(viewzoomaction, SIGNAL(triggered()), this, SLOT(trigerzoom()));
}
​
void Mainwin::InitMenu()
{
    fliemenuBar = menuBar()->addMenu("Flie");
    fliemenuBar->addAction(openstepfileaction);
​
​
    drawmenuBar = menuBar()->addMenu("Draw");
    drawmenuBar->addAction(drawboxaction);
    drawmenuBar->addAction(drawbottleaction);
    drawmenuBar->addAction(drawhelixaction);
​
    viewenuBar = menuBar()->addMenu("View");
    viewenuBar->addAction(viewfrontaction);
    viewenuBar->addAction(viewbackaction);
    viewenuBar->addAction(viewtopaction);
    viewenuBar->addAction(viewbottomaction);
    viewenuBar->addAction(viewleftaction);
    viewenuBar->addAction(viewrightaction);
    viewenuBar->addAction(viewaxoaction);
    viewenuBar->addAction(viewresetaction);
    viewenuBar->addAction(viewfitallaction);
    viewenuBar->addAction(viewfitareaaction);
    viewenuBar->addAction(viewzoomaction);
​
}
void Mainwin::trigeropenfile()
{
​
    QString filename = QFileDialog::getOpenFileName(this, "open file dialog", "/", "step files(*.step)");
    std::string stdfilename = filename.toStdString();
    const char* cstr = stdfilename.c_str();
    TopoDS_Shape stepShape = occ.Open_STEP(cstr);
    Quantity_Color color = Quantity_Color(0.3, 0.5, 0.3, Quantity_TOC_RGB);
    Handle(AIS_Shape) aisstep = new AIS_Shape(stepShape);
    Dui->GetInteractiveContext()->Display(aisstep, Standard_True);
    Dui->GetView()->FitAll();
​
}
​
void Mainwin::trigerdrawbox()
{
    TopoDS_Shape box = occ.createBox();
    Handle(AIS_Shape) aisBox = new AIS_Shape(box);
    Dui->GetInteractiveContext()->Display(aisBox, Standard_True);
    Dui->GetView()->FitAll();
​
}
void Mainwin::trigerdrawbottle()
{
    TopoDS_Shape bottle = occ.MakeBottle(50, 70, 30);
    Handle(AIS_Shape) aisBottle = new AIS_Shape(bottle);
    Dui->GetInteractiveContext()->Display(aisBottle, Standard_True);
    Dui->GetView()->FitAll();
}
void Mainwin::trigerdrawhelix()
{
    TopoDS_Shape helix = occ.createHelix2(3.0, M_PI/3,3.63);
    Handle(AIS_Shape) aishelix = new AIS_Shape(helix);
    Dui->GetInteractiveContext()->Display(aishelix, Standard_True);
    Dui->GetView()->FitAll();
}
void Mainwin::trigerviewfront()
{
    Dui->GetView()->SetProj(V3d_Yneg);
}
​
void Mainwin::trigerviewback()
{
    Dui->GetView()->SetProj(V3d_Ypos);
}
​
void Mainwin::trigerviewtop()
{
    Dui->GetView()->SetProj(V3d_Zpos);
}
​
void Mainwin::trigerviewbottom()
{
    Dui->GetView()->SetProj(V3d_Zneg);
}
​
void Mainwin::trigerviewleft()
{
    Dui->GetView()->SetProj(V3d_Xneg);
}
​
void Mainwin::trigerviewright()
{
    Dui->GetView()->SetProj(V3d_Xpos);
}
​
void Mainwin::trigerviewaxo()
{
    Dui->GetView()->SetProj(V3d_XposYnegZpos);
}
​
void Mainwin::trigerviewreset()
{
    Dui->GetView()->Reset();
}
void Mainwin::trigerfitall()
{
    Dui->GetView()->FitAll();
    Dui->GetView()->ZFitAll();
    Dui->GetView()->Redraw();
}
​
void Mainwin::trigerfitarea()
{
    //setCurrentAction(CurAction3d_WindowZooming);
}
​
void Mainwin::trigerzoom()
{
    //setCurrentAction(CurAction3d_DynamicZooming);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BTC网络 vs ETH网络

设计理念 BTC 网络 比特币是一种数字货币&#xff0c;旨在作为一种去中心化的、不受政府或金融机构控制的电子货币。其主要目标是实现安全的价值传输和储存&#xff0c;比特币的设计强调去中心化和抗审查。 ETH 网络 以太坊是一个智能合约平台&#xff0c;旨在支持分散的应…

深入探究Nginx的使用方法

目录 引言 一、网络状态页 二、Nginx 第三方模块 三、变量 &#xff08;一&#xff09;内置变量 &#xff08;二&#xff09;自定义变量 四、自定义日志 &#xff08;一&#xff09;有关日志的配置信息 &#xff08;二&#xff09;error日志的设置 1.日志的等级 2.自…

RT-Thread 自动初始化

最近的程序设计中用到了RT-Thread中的自动初始化&#xff0c;用起来也非常容易&#xff0c;一个宏就解决了&#xff0c;但是原理是什么呢&#xff1f;下面我们一起来学习&#xff1a; 1.1、一般情况的初始化调用 一般情况下&#xff0c;系统中的初始化会这样做&#xff0c;应该…

如何使用 OpenAI Sora?

Sora - 探索AI视频模型的无限可能 OpenAI 的最新项目名为 Sora&#xff0c;这是一个强大的文本到视频模型&#xff0c;可以根据简单的文本提示生成令人兴奋的视频。这个尖端的人工智能模型允许用户描述一个场景&#xff0c;例如“卡通袋鼠跳迪斯科舞”&#xff0c;Sora将生成与…

交叉编译qt到arm平台

使用pkg-config命令查看xxx包是否存在&#xff1a; pkg-config --print-errors xxx pkg-config的搜索路径可以通过环境变量PKG_CONFIG_PATH指定。需要在运行./configure 之前指定。 ./configure -release -qt-libjpeg -qt-libpng -qt-zlib -qt-pcre -xplatform linux-aarch64-…

主机字节序与网络字节序

大端序和小端序 大端序&#xff08;Big Endian&#xff09;和小端序&#xff08;Little Endian&#xff09;是两种计算机存储数据的方式。 大端序指的是将数据的高位字节存储在内存的低地址处&#xff0c;而将低位字节存储在内存的高地址处。这类似于我们阅读多位数时从左往右…

【HarmonyOS】鸿蒙开发之Stage模型-应用配置文件——第4.2章

Stage模型-应用配置文件 AppScope -> app.json5&#xff1a;应用的全局配置信息entry&#xff1a;OpenHarmony工程模块&#xff0c;编译构建生成一个HAP包 build&#xff1a;用于存放OpenHarmony编译生成的hap包src -> main -> ets&#xff1a;用于存放ArkTS源码src …

kubectl 命令行管理K8S(上)

目录 陈述式资源管理方式 介绍 命令 项目的生命周期 创建 kubectl create命令 发布 kubectl expose命令 更新 kubectl set 回滚 kubectl rollout 删除 kubectl delete 应用发布策略 金丝雀发布 陈述式资源管理方式 介绍 1.kubernetes 集群管理集群资源…

Magento2常见表的作用

1.sales_sequence_profile 更改订单号或者发票号的前缀及最大值

YOLOv6代码解读[01] readme解读

文章目录 模型指标安装训练单GPU多GPU断点续练评估推断部署教程模型指标

Python--界面UI控制,模拟键鼠操作的模块pyautogui(超详细用法)

一、简介 PyAutoGUI是一个Python 第三方库&#xff0c;需要pip install 安装 。它允许我们通过编程方式模拟鼠标和键盘的操作&#xff0c;窗口操作&#xff0c;以及界面的截图匹配。由于它是照搬人的操作&#xff0c;底层没有套牢在Windows系统&#xff0c;所以它可以跨平台。…

韩国突发:将批准比特币ETF

作者&#xff1a;秦晋 韩国两党宣布将批准比特币ETF。比特币也再次成为竞选的宠儿。 4月10日&#xff0c;韩国将迎来每隔4年而进行的一次立法大选。在大选之前&#xff0c;现执政党与反对党都承诺将批准比特币ETF。 我们知道&#xff0c;比特币的主要受众群体以年轻人居多。此前…

Vulnhub靶机网卡启动失败(Raise network interfaces)

完整版见个人博客&#xff1a;xzajyjs.cn 问题 使用一些Linux靶机进行搭建后可能会出现无法搜索到IP的情况&#xff0c;并且会在系统启动时报错&#xff0c;类似下图所示 这个主要是因为vulnhub上的镜像由于搭建环境、版本等问题不适配&#xff0c;网卡没有正确识别导致的&am…

数据结构-关键路径

介绍 在AOV网的基础上&#xff0c;如果用对应边来表示活动持续时间&#xff0c;这种有向图被称为AOE网在AOE网中&#xff0c;入度为0的为源点&#xff0c;出度为0的为汇点&#xff0c;整张网看做是一件事情完成的过程&#xff0c;那么这两个点就是事情的开始和结束。每个活动持…

【程序员怎样才能学好算法】《算法秘籍》给出答案

【文末送书】今天推荐一本优质算法书籍《算法秘籍》&#xff0c;这是一本关于数据结构和算法的书&#xff0c;以Java为描述语言&#xff0c;介绍了计算机编程中常用的数据结构和算法。全书共13章&#xff0c;讲述了常见的数据结构、排序算法、位运算、树、递归、回溯算法、贪心…

消息中间件篇之Kafka-数据清理机制

一、Kafka文件存储机制 Kafka文件存储结构&#xff1a;一个Topic有多个分区。每一个分区都有多个段&#xff0c;每个段都有三个文件。 为什么要分段&#xff1f;1. 删除无用文件方便&#xff0c;提高磁盘利用率。 2. 查找数据便捷。 二、数据清理机制 1.日志的清理策略方案1 根…

《TCP/IP详解 卷一》第7章 防火墙和NAT

7.1 引言 NAT通常改变源IP和源端口&#xff0c;不改变目的IP和目的端口。 7.2 防火墙 常用防火墙&#xff1a; 包过滤防火墙&#xff08;packet-filter firewall&#xff09; 代理防火墙&#xff08;proxy firewall&#xff09; 代理防火墙作用&#xff1a; 1. 通过代理服务…

【递归】【回溯】Leetcode 112. 路径总和 113. 路径总和 II

【递归】【回溯】Leetcode 112. 路径总和 113. 路径总和 II 112. 路径总和解法&#xff1a;递归 有递归就有回溯 记得return正确的返回上去 113. 路径总和 II解法 递归 如果需要搜索整棵二叉树&#xff0c;那么递归函数就不要返回值 如果要搜索其中一条符合条件的路径&#xff…

常见集合框架底层原理

常见集合框架底层原理 常见的集合有哪些 Java集合类主要由两个接口Collection和Map派生出来的&#xff0c;Collection有三个子接口: List、 Set、Queue List代表了有序可重复集合&#xff0c;可直接根据元素的索引来访问Set代表了无序集合&#xff0c;只能根据元素本身来访问…

nginx---------------重写功能 防盗链 反向代理 (五)

一、重写功能 rewrite Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;重写功能(…