#include "main_window.h" #include "mesh_processing.h" #include #include MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent), mesh_viewer(this), toolbar(this) { connect(&mesh_viewer, &MeshViewer::initialized, this, &MainWindow::meshViewerInitialized); setCentralWidget(&mesh_viewer); addToolBar(Qt::RightToolBarArea, &toolbar); open_action = toolbar.addAction("Ouvrir…", [&](){ open(QFileDialog::getOpenFileName(this, "Ouvrir un fichier OBJ")); }); // toolbar_actions.append(toolbar.addAction("Fractionner", [&](){ // QVector> fragments = shatter(mesh); // mesh_viewer.removeOpenGLMesh(glm); // for (auto &[pos, fragment] : fragments) { // fragment.triangulate(); // QMatrix4x4 mat; // float scale = 1.2; // mat.translate(pos[0] * scale, pos[1] * scale, pos[2] * scale); // mesh_viewer.addOpenGLMeshFromOpenMesh(&fragment, mat); // } // })); open_action->setEnabled(false); for (QAction *a : toolbar_actions) { a->setEnabled(false); } } void MainWindow::open(const QString &path) { OpenMesh::IO::Options options; options.set(OpenMesh::IO::Options::VertexColor); if (!OpenMesh::IO::read_mesh(mesh, path.toUtf8().constData(), options)) { qWarning() << "Failed to read" << path; return; } for (const VertexHandle &vh : mesh.vertices()) { mesh.set_color(vh, MyMesh::Color(0, 0, 0)); } if (glm != nullptr) mesh_viewer.removeOpenGLMesh(glm); findHoles(mesh); glm = mesh_viewer.addOpenGLMeshFromOpenMesh(&mesh); for (QAction *a : toolbar_actions) { a->setEnabled(true); } } void MainWindow::meshViewerInitialized() { if (qApp->arguments().size() == 2) { open(qApp->arguments().at(1)); } open_action->setEnabled(true); }