void ViewportView::openAddMenu(bool view_commands) { QMenu* m = new QMenu(this); if (view_commands && !angle_locked) { auto sub = new QMenu("View"); connect(sub->addAction("Top"), &QAction::triggered, [=]{ this->spinTo(0, 0); }); connect(sub->addAction("Bottom"), &QAction::triggered, [=]{ this->spinTo(0, -M_PI); }); connect(sub->addAction("Left"), &QAction::triggered, [=]{ this->spinTo(M_PI/2, -M_PI/2); }); connect(sub->addAction("Right"), &QAction::triggered, [=]{ this->spinTo(-M_PI/2, -M_PI/2); }); connect(sub->addAction("Front"), &QAction::triggered, [=]{ this->spinTo(0, -M_PI/2); }); connect(sub->addAction("Back"), &QAction::triggered, [=]{ this->spinTo(-M_PI, -M_PI/2); }); m->addMenu(sub); m->addSeparator(); } populateNodeMenu(m, view_scene->getGraph()); m->exec(QCursor::pos()); m->deleteLater(); }
void MainWindow::populateMenu(QMenu* menu, bool recenter, Viewport* v) { // Hard-code important menu names to set their order. for (auto c : {"2D", "3D", "2D → 3D", "3D → 2D", "CSG"}) menu->addMenu(c); menu->addSeparator(); populateNodeMenu(menu, recenter, v); menu->addSeparator(); addNodeToMenu(QStringList(), "Script", menu, recenter, [](Graph *r){ return new Node("s*", "import fab\n\n" "title('script')\n" "input('r', float, 1)\n" "output('c', fab.shapes.circle(0, 0, r))", r); }, v); }