目录
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
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);
}