This action will force synchronization from LucasLYF/EmptyHead, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
#include "mainwindow.h"#include <QVTKOpenGLNativeWidget.h>#include <vtkActor.h>#include <vtkAxesActor.h>#include <vtkCaptionActor2D.h>#include <vtkEventQtSlotConnect.h>#include <vtkInteractorStyleTrackballCamera.h>#include <vtkOrientationMarkerWidget.h>#include <vtkPolyDataMapper.h>#include <vtkRenderWindow.h>#include <vtkRenderer.h>#include <vtkSTLReader.h>#include <vtkTextProperty.h>#include <vtkWorldPointPicker.h>#include <IGESControl_Reader.hxx>#include <IVtkOCC_Shape.hxx>#include <IVtkTools_DisplayModeFilter.hxx>#include <IVtkTools_ShapeDataSource.hxx>#include <QBoxLayout>#include <QDockWidget>#include <QFileDialog>#include <QLineEdit>#include <QMenuBar>#include <QTextBrowser>#include <QToolBar>#include <QTreeWidget>#include <STEPControl_Reader.hxx>MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent){this->resize(1000, 700);this->initMenuToolBar();this->initTreeWidget();this->initRenderWidget();this->initMessageWidget();}MainWindow::~MainWindow(){}void MainWindow::initMenuToolBar(){QAction* actImport = new QAction(QIcon::fromTheme("default", QIcon(":/icons/default/128x128/Undefined.png")),tr("Import"),this);connect(actImport, &QAction::triggered, this, [=, this] {QStringList filePaths = QFileDialog::getOpenFileNames(this,tr("Choose STL Files"),"","STL Files(*.stl);;""STEP Files(*.step;*.stp);;""IGES Files(*.iges;*.igs);;""All Files(*)");for (auto filePath : filePaths) {QFileInfo fileInfo(filePath);if (fileInfo.exists()) {QString type = fileInfo.suffix().toLower();vtkNew<vtkPolyDataMapper> mapper;if (type == "stl") {vtkNew<vtkSTLReader> reader;reader->SetFileName(filePath.toStdString().c_str());reader->Update();mapper->SetInputData(reader->GetOutput());} else if (type == "step" || type == "stp") {STEPControl_Reader Reader;Reader.ReadFile(filePath.toStdString().c_str());Reader.TransferRoots();IVtkOCC_Shape::Handle aShapeImpl = new IVtkOCC_Shape(Reader.Shape());vtkNew<IVtkTools_ShapeDataSource> DS;DS->SetShape(aShapeImpl);DS->Update();vtkNew<IVtkTools_DisplayModeFilter> filter;filter->SetInputData(DS->GetOutput());filter->SetDisplayMode(DM_Shading);filter->SetSmoothShading(1);filter->Update();mapper->SetInputData(filter->GetOutput());} else if (type == "iges" || type == "igs") {IGESControl_Reader Reader;Reader.ReadFile(filePath.toStdString().c_str());Reader.TransferRoots();IVtkOCC_Shape::Handle aShapeImpl = new IVtkOCC_Shape(Reader.Shape());vtkNew<IVtkTools_ShapeDataSource> DS;DS->SetShape(aShapeImpl);DS->Update();vtkNew<IVtkTools_DisplayModeFilter> filter;filter->SetInputData(DS->GetOutput());filter->SetDisplayMode(DM_Shading);filter->SetSmoothShading(1);filter->Update();mapper->SetInputData(filter->GetOutput());}vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);this->Renderer->AddActor(actor);this->Renderer->ResetCamera();this->Renderer->ResetCameraClippingRange();this->QVTKWidget->renderWindow()->Render();QTreeWidgetItem* item = new QTreeWidgetItem(this->TreeWidget);item->setText(0, fileInfo.baseName());item->setData(0, Qt::UserRole, QVariant::fromValue(actor));}}});QMenuBar* menuBar = new QMenuBar(this);QMenu* fileMenu = new QMenu(tr("File"), this);fileMenu->addAction(actImport);menuBar->addMenu(fileMenu);this->setMenuBar(menuBar);QToolBar* fileToolBar = new QToolBar(this);fileToolBar->addAction(actImport);fileToolBar->setIconSize(QSize(32, 32));fileToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);this->addToolBar(fileToolBar);}void MainWindow::initRenderWidget(){QWidget* renderWidget = new QWidget(this);this->setCentralWidget(renderWidget);QVBoxLayout* vLayout = new QVBoxLayout(renderWidget);vLayout->setContentsMargins(0, 0, 0, 0);this->QVTKWidget = new QVTKOpenGLNativeWidget(renderWidget);vLayout->addWidget(this->QVTKWidget);this->Renderer = vtkSmartPointer<vtkRenderer>::New();this->Renderer->SetBackground(1.0, 1.0, 1.0);this->QVTKWidget->renderWindow()->AddRenderer(this->Renderer);vtkNew<vtkInteractorStyleTrackballCamera> interactor;interactor->SetDefaultRenderer(this->Renderer);this->QVTKWidget->interactor()->SetInteractorStyle(interactor);// 初始化角落坐标系vtkNew<vtkAxesActor> axisActor;axisActor->GetXAxisCaptionActor2D()->GetCaptionTextProperty()->SetColor(1, 0, 0);axisActor->GetYAxisCaptionActor2D()->GetCaptionTextProperty()->SetColor(0, 1, 0);axisActor->GetZAxisCaptionActor2D()->GetCaptionTextProperty()->SetColor(0, 0, 1);axisActor->SetShaftTypeToCylinder();axisActor->SetTipTypeToCone();axisActor->SetCylinderRadius(1.5 * axisActor->GetCylinderRadius());axisActor->SetConeRadius(1.5 * axisActor->GetConeRadius());axisActor->SetSphereRadius(1.5 * axisActor->GetSphereRadius());axisActor->GetXAxisCaptionActor2D()->GetCaptionTextProperty()->ShadowOff();axisActor->GetYAxisCaptionActor2D()->GetCaptionTextProperty()->ShadowOff();axisActor->GetZAxisCaptionActor2D()->GetCaptionTextProperty()->ShadowOff();this->AxisWidget = vtkSmartPointer<vtkOrientationMarkerWidget>::New();this->AxisWidget->SetOutlineColor(0.9300, 0.5700, 0.1300);this->AxisWidget->SetOrientationMarker(axisActor);this->AxisWidget->SetInteractor(this->QVTKWidget->renderWindow()->GetInteractor());this->AxisWidget->SetViewport(0.0, 0.0, 0.07, 0.1);this->AxisWidget->SetEnabled(1);this->AxisWidget->InteractiveOff();this->Connector = vtkSmartPointer<vtkEventQtSlotConnect>::New();this->WorldPicker = vtkSmartPointer<vtkWorldPointPicker>::New();}void MainWindow::initTreeWidget(){QDockWidget* treeDockWidget = new QDockWidget(tr("Resources Manager"), this);this->TreeWidget = new QTreeWidget(this);this->TreeWidget->setHeaderHidden(true);this->TreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);this->TreeWidget->setSelectionMode(QAbstractItemView::SingleSelection);treeDockWidget->setWidget(this->TreeWidget);this->addDockWidget(Qt::LeftDockWidgetArea, treeDockWidget);QAction* actRemove = new QAction(QIcon::fromTheme("default", QIcon(":/icons/default/128x128/Undefined.png")),tr("Remove"),this);connect(actRemove, &QAction::triggered, this, [=, this] {vtkSmartPointer<vtkActor> actor = this->TreeWidget->selectedItems()[0]->data(0, Qt::UserRole).value<vtkSmartPointer<vtkActor>>();if (actor) {this->Renderer->RemoveActor(actor);this->QVTKWidget->renderWindow()->Render();delete this->TreeWidget->selectedItems()[0];}});connect(this->TreeWidget, &QTreeWidget::customContextMenuRequested, this, [=, this] {if (this->TreeWidget->selectedItems().size() == 0) {return;}QMenu* menu = new QMenu(this->TreeWidget);menu->setAttribute(Qt::WA_DeleteOnClose);menu->addAction(actRemove);menu->move(QCursor::pos());menu->show();});}//-----------------------------------------------------------------------------------------------------#define MessageColorRed(STRING) \QString(tr("<font color=red>" STRING "</font>" \"<font color=black> </font>"))#define MessageColorBlue(STRING) \QString(tr("<font color=blue>" STRING "</font>" \"<font color=black> </font>"))#define MessageColorGreen(STRING) \QString(tr("<font color=green>" STRING "</font>" \"<font color=black> </font>"))//-----------------------------------------------------------------------------------------------------void MainWindow::initMessageWidget(){QWidget* messageWidget = new QWidget(this);QVBoxLayout* vLayout = new QVBoxLayout(messageWidget);QDockWidget* messageDockWidget = new QDockWidget(tr("Message Manager"), this);this->TextBrowser = new QTextBrowser(this);vLayout->addWidget(this->TextBrowser);this->LineEdit = new QLineEdit(this);vLayout->addWidget(this->LineEdit);messageDockWidget->setWidget(messageWidget);this->addDockWidget(Qt::RightDockWidgetArea, messageDockWidget);connect(this->LineEdit, &QLineEdit::returnPressed, this, [=, this] {if (this->LineEdit->text().isEmpty()) {return;}QString message = this->LineEdit->text();this->TextBrowser->append(message);this->LineEdit->clear();QString result = MessageColorGreen("Command Done.");if (message == "MT ON") { // 打开鼠标跟踪this->Connector->Connect(this->QVTKWidget->interactor(),vtkCommand::MouseMoveEvent,this,SLOT(updateMouseInfo()));} else if (message == "MT OFF") { // 关闭鼠标跟踪this->Connector->Disconnect(this->QVTKWidget->interactor(),vtkCommand::MouseMoveEvent,this,SLOT(updateMouseInfo()));} else {result = MessageColorRed("Unknown Command!");}this->TextBrowser->append(result);});}//-----------------------------------------------------------------------------------------------------void MainWindow::updateMouseInfo(){int x, y;this->QVTKWidget->interactor()->GetEventPosition(x, y);this->WorldPicker->Pick(x, y, 0, this->Renderer);double pos[3];this->WorldPicker->GetPickPosition(pos);QString message = QString::number(pos[0]) + "," + QString::number(pos[1]) + "," +QString::number(pos[2]);this->TextBrowser->append(message);}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。