同步操作将从 LucasLYF/EmptyHead 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#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 <vtkOutlineSource.h>#include <vtkPolyDataMapper.h>#include <vtkProperty.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 <QColorDialog>#include <QDockWidget>#include <QFileDialog>#include <QInputDialog>#include <QLineEdit>#include <QMenuBar>#include <QTextBrowser>#include <QToolBar>#include <STEPControl_Reader.hxx>#include "epttreewidget.h"MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent){this->resize(800, 600);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::initTreeWidget(){QDockWidget* treeDockWidget = new QDockWidget(tr("Resources Manager"), this);this->TreeWidget = new eptTreeWidget(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];}});QAction* actColor = new QAction(QIcon::fromTheme("default", QIcon(":/icons/default/128x128/Undefined.png")),tr("Color"),this);connect(actColor, &QAction::triggered, this, [=, this] {vtkSmartPointer<vtkActor> actor = this->TreeWidget->selectedItems()[0]->data(0, Qt::UserRole).value<vtkSmartPointer<vtkActor>>();if (actor) {double originColor[3], alpha;actor->GetProperty()->GetColor(originColor);alpha = actor->GetProperty()->GetOpacity();QColor color = QColorDialog::getColor(QColor(originColor[0] * 255,originColor[1] * 255,originColor[2] * 255,alpha * 255),this->TreeWidget,tr("Color Settings"),QColorDialog::ShowAlphaChannel);if (!color.isValid()) {return;}actor->GetProperty()->SetColor(color.redF(), color.greenF(), color.blueF());actor->GetProperty()->SetOpacity(color.alphaF());this->QVTKWidget->renderWindow()->Render();}});QAction* actFocus = new QAction(QIcon::fromTheme("default", QIcon(":/icons/default/128x128/Undefined.png")),tr("Focus"),this);connect(actFocus, &QAction::triggered, this, [=, this] {vtkSmartPointer<vtkActor> actor = this->TreeWidget->selectedItems()[0]->data(0, Qt::UserRole).value<vtkSmartPointer<vtkActor>>();if (actor) {this->Renderer->ResetCamera(actor->GetBounds());this->QVTKWidget->renderWindow()->Render();}});QAction* actEdgeVisible = new QAction(QIcon::fromTheme("default", QIcon(":/icons/default/128x128/Undefined.png")),tr("Edge Visible"),this);actEdgeVisible->setCheckable(1);connect(actEdgeVisible, &QAction::toggled, this, [=, this](bool visible) {vtkSmartPointer<vtkActor> actor = this->TreeWidget->selectedItems()[0]->data(0, Qt::UserRole).value<vtkSmartPointer<vtkActor>>();if (actor) {actor->GetProperty()->SetEdgeVisibility(visible);this->QVTKWidget->renderWindow()->Render();}});QAction* actLineWidth = new QAction(QIcon::fromTheme("default", QIcon(":/icons/default/128x128/Undefined.png")),tr("Line Width"),this);connect(actLineWidth, &QAction::triggered, this, [=, this] {vtkSmartPointer<vtkActor> actor = this->TreeWidget->selectedItems()[0]->data(0, Qt::UserRole).value<vtkSmartPointer<vtkActor>>();if (actor) {double originWidth = actor->GetProperty()->GetLineWidth();double setWidth = QInputDialog::getDouble(this,tr("Property Settings"),tr("Line Width: "),originWidth,0,9999,3);actor->GetProperty()->SetLineWidth(setWidth);this->QVTKWidget->renderWindow()->Render();}});QAction* actVisible = new QAction(QIcon::fromTheme("default", QIcon(":/icons/default/128x128/Undefined.png")),tr("Visible"),this);actVisible->setCheckable(1);actVisible->setChecked(1);connect(actVisible, &QAction::toggled, this, [=, this](bool visible) {vtkSmartPointer<vtkActor> actor = this->TreeWidget->selectedItems()[0]->data(0, Qt::UserRole).value<vtkSmartPointer<vtkActor>>();if (actor) {actor->SetVisibility(visible);this->QVTKWidget->renderWindow()->Render();}});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->addAction(actColor);menu->addAction(actFocus);menu->addAction(actEdgeVisible);menu->addAction(actLineWidth);menu->addAction(actVisible);menu->move(QCursor::pos());menu->show();});connect(this->TreeWidget, &QTreeWidget::itemSelectionChanged, this, [=, this] {if (this->HighLightedActor) {this->Renderer->RemoveActor(this->HighLightedActor);this->HighLightedActor = nullptr;}if (!this->TreeWidget->selectedItems().empty()) {QTreeWidgetItem* item = this->TreeWidget->selectedItems()[0];vtkSmartPointer<vtkActor> actor =item->data(0, Qt::UserRole).value<vtkSmartPointer<vtkActor>>();vtkNew<vtkOutlineSource> outlineSource;outlineSource->SetBounds(actor->GetBounds());vtkNew<vtkPolyDataMapper> outlineMapper;outlineMapper->SetInputConnection(outlineSource->GetOutputPort());this->HighLightedActor = vtkSmartPointer<vtkActor>::New();this->HighLightedActor->SetMapper(outlineMapper);this->HighLightedActor->GetProperty()->SetColor(1.0, 0.0, 0.0);this->HighLightedActor->GetProperty()->SetLineWidth(3);this->Renderer->AddActor(this->HighLightedActor);}this->QVTKWidget->renderWindow()->Render();});}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();}#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);}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。