Sketch::Sketch(Document * document, const QRectF &bounds) : Tool(document) { connect(this, SIGNAL(boundsChanged()), SLOT(resizeViews())); setBounds(bounds); setObjectName("sketch"); }
YieldAction EuclideanMenuSlice::addNewMenuItem(const std::list<std::string>& params) { //TEMP RectangleGameObject* rect = new RectangleGameObject(150, 50); rect->setFillColor(sf::Color::Green); rect->setPosition(-600, 80); addItem(rect, rect->getBounds()); resizeViews(); //No params, so this always succeeds. return YieldAction(); }
YieldAction EuclideanMenuSlice::activated(GameEngineControl& geControl, Slice* prevSlice, sf::RenderWindow& window) { //Save this->window = &window; this->geControl = &geControl; //Size the view appropriately. resizeViews(); //Are we returning from a Console? if (prevSlice==console) { return handleConsoleResults(); } //Done. return YieldAction(); }
void Sketch::init() { // Add four views int numViews = 4; for(int i = 0; i < numViews; i++){ auto type = SketchViewType(SketchViewType::VIEW_TOP + i); auto view = new SketchView(document, this, type); views << view; } resizeViews(); // Add sketching UI elements auto toolsWidgetContainer = new QWidget(); toolsWidget = new Ui::SketchToolsWidget(); toolsWidget->setupUi(toolsWidgetContainer); auto toolsWidgetProxy = new QGraphicsProxyWidget(this); toolsWidgetProxy->setWidget(toolsWidgetContainer); // Place at bottom left corner auto delta = toolsWidgetProxy->sceneBoundingRect().bottomLeft() - scene()->views().front()->rect().bottomLeft(); toolsWidgetProxy->moveBy(-delta.x(), -delta.y()); // Add duplication tool dupToolWidget = new SketchDuplicate(); dupToolWidgetProxy = new QGraphicsProxyWidget(this); dupToolWidgetProxy->setWidget(dupToolWidget); auto dupDelta = toolsWidgetProxy->pos() + QPointF(toolsWidgetProxy->size().width(),0); dupToolWidgetProxy->moveBy(dupDelta.x(), dupDelta.y()); dupToolWidgetProxy->setVisible(false); dupToolWidgetProxy->setFlags(QGraphicsItem::ItemIsMovable); //dupToolWidgetProxy->setWindowFlags(Qt::Window); // Connect UI with sketch views { // Sketching new parts { connect(toolsWidget->curveButton, &QPushButton::pressed, [&](){ for(auto & v : views) v->setSketchOp(SKETCH_CURVE); }); connect(toolsWidget->sheetButton, &QPushButton::pressed, [&](){ for (auto & v : views) v->setSketchOp(SKETCH_SHEET); }); // Sketching options connect(toolsWidget->isFlat, &QCheckBox::toggled, [&](bool checked){ for(auto & v : views) v->setProperty("meshingIsFlat", checked); }); connect(toolsWidget->isSquare, &QCheckBox::toggled, [&](bool checked){ for(auto & v : views) v->setProperty("meshingIsSquare", checked); }); connect(toolsWidget->isThick, static_cast<void (QComboBox::*)(int index)>(&QComboBox::currentIndexChanged), [&](int level){ for(auto & v : views) v->setProperty("meshingIsThick", QVariant::fromValue(level)); }); } // Modify { // Select parts connect(toolsWidget->selectButton, &QPushButton::pressed, [&](){ for (auto & v : views) v->setSketchOp(SELECT_PART); }); // Deform parts connect(toolsWidget->deformButton, &QPushButton::pressed, [&](){ for (auto & v : views) v->setSketchOp(DEFORM_SKETCH); }); // Transform parts connect(toolsWidget->transformButton, &QPushButton::pressed, [&](){ for (auto & v : views) v->setSketchOp(TRANSFORM_PART); }); // Normalize and place on ground connect(toolsWidget->placeGroundButton, &QPushButton::pressed, [&](){ document->placeOnGround(document->firstModelName()); }); // Find all possible edges connect(toolsWidget->edgesButton, &QPushButton::pressed, [&](){ ModelConnector m(document->getModel(document->firstModelName())); }); } // IO { connect(toolsWidget->loadButton, &QPushButton::pressed, [&](){ QString filename = QFileDialog::getOpenFileName(0, "Load shape", "", "Shape graph (*.xml)"); if(filename.size()){ document->clearModels(); document->loadModel(filename); } }); connect(toolsWidget->saveButton, &QPushButton::pressed, [&](){ QString filename = QFileDialog::getSaveFileName(0, "Save shape", "", "Shape graph (*.xml)"); document->saveModel(document->firstModelName(), filename); }); } } // Duplicate tool UI { connect(toolsWidget->replicateButton, &QPushButton::toggled, [&](bool checked){ if(checked){ dupToolWidgetProxy->setVisible(true); emit(dupToolWidget->settingsChanged()); }else{ dupToolWidgetProxy->setVisible(false); } }); connect(dupToolWidget, &SketchDuplicate::settingsChanged, [&](){ QString dupOperation = dupToolWidget->dupOperation(); document->duplicateActiveNodeViz(document->firstModelName(), dupOperation); scene()->update(); }); connect(dupToolWidget, &SketchDuplicate::acceptedOperation, [&](){ dupToolWidgetProxy->setVisible(false); QString dupOperation = dupToolWidget->dupOperation(); document->duplicateActiveNode(document->firstModelName(), dupOperation); toolsWidget->replicateButton->setChecked(false); scene()->update(); }); } }