예제 #1
0
void MainWindow::on_actionRandomGeneration_triggered()
{
    on_actionClear_triggered();
    isSelectMannually = false;

    RandomPointsDialog * dialog = new RandomPointsDialog(this);
    dialog->exec();

    QTime t;
    t.start();

    std::random_device rd;
    std::mt19937 gen;
    gen.seed(rd());

    for(int i = 0; i < dialog->getPointsNumber(); i++)
    {
        std::uniform_int_distribution<int> randx(1, this->width() / 2 - 2);
        std::uniform_int_distribution<int> randy(100, this->height() - 2); // 100 in order to avoid paint on toolbar
        points.append(QPoint(randx(gen), randy(gen)));
    }

    qDebug()<<"random time: "<<t.elapsed() / 1000.0;
    update();
    isRandomized = true;
}
예제 #2
0
void MainWindow::mouseReleaseEvent(QMouseEvent * event)
{
    QString pos = QString("%1,%2").arg(event->pos().x()).arg(event->pos().y());
    if(isSelectMannually)
    {
        if (event->pos().x() > this->width() / 2 ||
                event->pos().y() < 100 ||
                points_set.contains(pos))
        {
            return;
        }

        points.append(event->pos());
        points_set.insert(pos);
        update();

        if (ui->actionReal_Time->isChecked())
        {
            isDemoRealTimeFinished = false;
            demoRealTime(event->pos());
            isDemoRealTimeFinished = true;
            if (isStopDemoRealTime)
            {
                on_actionClear_triggered();
            }
        }
    }
}
예제 #3
0
void MainWindow::on_actionReal_Time_toggled(bool isRealTime_)
{
    isRandomized = !isRealTime_;
    if (points.size() > 0)
    {
        on_actionClear_triggered();
    }
}
예제 #4
0
int EditorWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QMainWindow::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: on_actionClear_triggered(); break;
        case 1: on_action_New_triggered(); break;
        case 2: on_action_Run_File_triggered(); break;
        case 3: onEngineStarted(); break;
        case 4: onEngineStopped(); break;
        case 5: onEnginePanic((*reinterpret_cast< Atom(*)>(_a[1])),(*reinterpret_cast< Word(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3])),(*reinterpret_cast< const QString(*)>(_a[4]))); break;
        case 6: on_action_Inspect_Selection_triggered(); break;
        case 7: on_action_Quit_triggered(); break;
        case 8: on_action_Save_triggered(); break;
        case 9: on_actionSave_as_triggered(); break;
        case 10: on_action_Open_triggered(); break;
        default: ;
        }
        _id -= 11;
    }
    return _id;
}
예제 #5
0
void MainWindow::on_actionPerform_triggered()
{
    if (ui->actionReal_Time->isChecked() && !isRandomized)
    {
        QToolTip::showText(QPoint(this->x() + 20, this->y() + 120), "Please click Random Generation or disable Real Time Mode first", this);
        return;
    }

    isRandomized = false;

    if (points.size() < 3)
    {
        return;
    }

    if (delay_mseconds != 0)
    {
        isDemoRealTimeFinished = false;
        for(auto& p : points)
        {
            demoRealTime(p);
        }
        isDemoRealTimeFinished = true;
        if (isStopDemoRealTime)
        {
            on_actionClear_triggered();
        }
        return;
    }

    isSelectMannually = false;
    triangles.clear();

    QObject::connect(delaunay, SIGNAL(signalRefreshGui()), this, SLOT(slotRefreshGui()));

    PointVec mesh_points;
    for(auto& p : points)
    {
        mesh_points.push_back(Point(p.x(), p.y(), 0));
    }

    QTime t;
    t.start();

    delaunay->perform(mesh_points);

    qDebug()<<"delaunay time: "<<t.elapsed() / 1000.0;

    // display 2d result
    for (auto& fh : delaunay->mesh.faces())
    {
        for(auto& vh : delaunay->mesh.fv_range(fh))
        {
            Point p = delaunay->mesh.point(vh);
            triangles.push_back(QPoint(p[0], p[1]));
        }
    }
    isTrianglated = true;
    update();

    // display 3d result
    ui->viewer->setParam(delaunay, this->width(), this->height());
    ui->viewer->showMesh2D();
    ui->viewer->showMesh3D();
}
예제 #6
0
void MainWindow::closeEvent(QCloseEvent * e)
{
    on_actionClear_triggered();
    QMainWindow::closeEvent(e);
}