目录
Mainwin.h
Mainwin.cpp
Mainwin.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "Displaywin.h"
#include "OCC.h"
class Mainwin : public QMainWindow
{
Q_OBJECT
public:
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);
}