113 lines
4.2 KiB
C++
113 lines
4.2 KiB
C++
/*
|
||
* © Copyright 2014 – Urheberrechtshinweis
|
||
* Alle Rechte vorbehalten / All Rights Reserved
|
||
*
|
||
* Programmcode ist urheberrechtlich geschuetzt.
|
||
* Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner.
|
||
* Keine Verwendung ohne explizite Genehmigung.
|
||
* (vgl. § 106 ff UrhG / § 97 UrhG)
|
||
*/
|
||
|
||
#include "QNavMeshSettings.h"
|
||
|
||
#include <Indoor/navMesh/NavMeshSettings.h>
|
||
|
||
#include <QGridLayout>
|
||
#include <QLabel>
|
||
#include <QSlider>
|
||
#include <QSlider>
|
||
#include <QDialogButtonBox>
|
||
|
||
QNavMeshSettings::QNavMeshSettings(NM::NavMeshSettings* settings, QWidget* parent) : QDialog(parent) {
|
||
|
||
QGridLayout* lay = new QGridLayout(this);
|
||
this->setLayout(lay);
|
||
int row = 0;
|
||
|
||
this->setWindowTitle("NavMesh Settings");
|
||
this->setMinimumWidth(350);
|
||
|
||
// MAX QUALITY
|
||
{
|
||
lay->addWidget(new QLabel("smallest element"), row, 0);
|
||
QLabel* lblQuality = new QLabel("");
|
||
lay->addWidget(lblQuality, row, 2);
|
||
QSlider* sldQuality = new QSlider(Qt::Orientation::Horizontal); sldQuality->setMinimum(10); sldQuality->setMaximum(30);
|
||
connect(sldQuality, &QSlider::valueChanged, [settings, sldQuality, lblQuality] () {
|
||
settings->maxQuality_m = sldQuality->value() / 100.0f;
|
||
lblQuality->setText(QString("%1 m").arg(settings->maxQuality_m, 5, 'f', 2, 0));
|
||
});
|
||
sldQuality->setValue(settings->maxQuality_m * 100.0f);
|
||
lay->addWidget(sldQuality, row, 1);
|
||
++row;
|
||
}
|
||
|
||
// AGENT HEIGHT
|
||
{
|
||
lay->addWidget(new QLabel("agent height"), row, 0);
|
||
QLabel* lblHeight = new QLabel("");
|
||
lay->addWidget(lblHeight, row, 2);
|
||
QSlider* sldHeight = new QSlider(Qt::Orientation::Horizontal); sldHeight->setMinimum(10); sldHeight->setMaximum(200);
|
||
connect(sldHeight, &QSlider::valueChanged, [settings, sldHeight, lblHeight] () {
|
||
settings->agentHeight = sldHeight->value() / 100.0f;
|
||
lblHeight->setText(QString("%1 m").arg(settings->agentHeight, 5, 'f', 2, 0));
|
||
});
|
||
sldHeight->setValue(settings->agentHeight * 100.0f);
|
||
lay->addWidget(sldHeight, row, 1);
|
||
++row;
|
||
}
|
||
|
||
// AGENT RADIUS
|
||
{
|
||
lay->addWidget(new QLabel("agent radius"), row, 0);
|
||
QLabel* lblRadius = new QLabel("");
|
||
lay->addWidget(lblRadius, row, 2);
|
||
QSlider* sldRadius = new QSlider(Qt::Orientation::Horizontal); sldRadius->setMinimum(5); sldRadius->setMaximum(60);
|
||
connect(sldRadius, &QSlider::valueChanged, [settings, sldRadius, lblRadius] () {
|
||
settings->agentRadius = sldRadius->value() / 100.0f;
|
||
lblRadius->setText(QString("%1 m").arg(settings->agentRadius, 5, 'f', 2, 0));
|
||
});
|
||
sldRadius->setValue(settings->agentRadius * 100.0f);
|
||
lay->addWidget(sldRadius, row, 1);
|
||
++row;
|
||
}
|
||
|
||
|
||
// MAX EDGE LENGTH
|
||
{
|
||
lay->addWidget(new QLabel("max edge length"), row, 0);
|
||
QLabel* lblMaxEdgeLength = new QLabel("");
|
||
lay->addWidget(lblMaxEdgeLength, row, 2);
|
||
QSlider* sdlMaxEdgeLength = new QSlider(Qt::Orientation::Horizontal); sdlMaxEdgeLength->setMinimum(300); sdlMaxEdgeLength->setMaximum(2000);
|
||
connect(sdlMaxEdgeLength, &QSlider::valueChanged, [settings, sdlMaxEdgeLength, lblMaxEdgeLength] () {
|
||
settings->edgeMaxLen = sdlMaxEdgeLength->value() / 100.0f;
|
||
lblMaxEdgeLength->setText(QString("%1 m").arg(settings->edgeMaxLen, 5, 'f', 2, 0));
|
||
});
|
||
sdlMaxEdgeLength->setValue(settings->edgeMaxLen * 100.0f);
|
||
lay->addWidget(sdlMaxEdgeLength, row, 1);
|
||
++row;
|
||
}
|
||
|
||
// MIN REGION SIZE
|
||
{
|
||
lay->addWidget(new QLabel("min region size"), row, 0);
|
||
QLabel* lblMinRegionSize = new QLabel("");
|
||
lay->addWidget(lblMinRegionSize, row, 2);
|
||
QSlider* sldRegionMinSize = new QSlider(Qt::Orientation::Horizontal); sldRegionMinSize->setMinimum(400); sldRegionMinSize->setMaximum(99900);
|
||
connect(sldRegionMinSize, &QSlider::valueChanged, [settings, sldRegionMinSize, lblMinRegionSize] () {
|
||
settings->regionMinSize = sldRegionMinSize->value() / 100.0f;
|
||
lblMinRegionSize->setText(QString("%1 m").arg(settings->regionMinSize, 5, 'f', 2, 0));
|
||
});
|
||
sldRegionMinSize->setValue(settings->regionMinSize * 100.0f);
|
||
lay->addWidget(sldRegionMinSize, row, 1);
|
||
++row;
|
||
}
|
||
|
||
QDialogButtonBox* box = new QDialogButtonBox(QDialogButtonBox::StandardButton::Ok | QDialogButtonBox::StandardButton::Close);
|
||
lay->addWidget(box, row, 0, 1, 3);
|
||
|
||
connect(box, &QDialogButtonBox::accepted, [&] () {ok = true; close();});
|
||
connect(box, &QDialogButtonBox::rejected, [&] () {ok = false; close();});
|
||
|
||
}
|