Exemplo n.º 1
0
Sketch::Sketch(Document * document, const QRectF &bounds) : Tool(document)
{
    connect(this, SIGNAL(boundsChanged()), SLOT(resizeViews()));

    setBounds(bounds);
    setObjectName("sketch");
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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();
}
Exemplo n.º 4
0
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();
        });
    }
}