properly honor default values of sphere radius and speed limit
This commit is contained in:
parent
0c28d9dc80
commit
81108c1b0f
@ -262,12 +262,11 @@ void DroneController::computeCollisions(double sphere_radius) {
|
|||||||
|
|
||||||
|
|
||||||
void DroneController::computeSpeedingViolations(double speed) {
|
void DroneController::computeSpeedingViolations(double speed) {
|
||||||
speed_violations.clear();
|
speed_limit = speed;
|
||||||
for (int i = 0; i < duration; i++) {
|
for (int i = 0; i < duration; i++) {
|
||||||
for (Drone &d : drones) {
|
for (Drone &d : drones) {
|
||||||
d.setTo(i);
|
d.setTo(i);
|
||||||
if (d.getSpeed() > speed) {
|
if (d.getSpeed() > speed) {
|
||||||
speed_violations[i].append(d.getId());
|
|
||||||
emit speedViolation(d.getId(), d.getSpeed(), i);
|
emit speedViolation(d.getId(), d.getSpeed(), i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,6 @@ class DroneController : public QObject, public Painter {
|
|||||||
QMap<int, QVector<QPair<int, int>>> collisions;
|
QMap<int, QVector<QPair<int, int>>> collisions;
|
||||||
bool draw_trajectories = false;
|
bool draw_trajectories = false;
|
||||||
bool draw_guides = false;
|
bool draw_guides = false;
|
||||||
QMap<int, QVector<int>> speed_violations;
|
|
||||||
double speed_limit = 0;
|
double speed_limit = 0;
|
||||||
|
|
||||||
static OpenGLMesh *sphere;
|
static OpenGLMesh *sphere;
|
||||||
|
@ -92,11 +92,13 @@ void MainWindow::open(const QString &path) {
|
|||||||
dc, &DroneController::computeCollisions);
|
dc, &DroneController::computeCollisions);
|
||||||
connect(settings_pane, &SettingsPane::sphereRadiusChanged,
|
connect(settings_pane, &SettingsPane::sphereRadiusChanged,
|
||||||
dc, &DroneController::displaySpheres);
|
dc, &DroneController::displaySpheres);
|
||||||
|
dc->computeCollisions(settings_pane->getSphereRadius());
|
||||||
|
|
||||||
connect(settings_pane, &SettingsPane::speedLimitChanged,
|
connect(settings_pane, &SettingsPane::speedLimitChanged,
|
||||||
[&](double _) { Q_UNUSED(_); settings_pane->clearSpeedingViolations(); });
|
[&](double _) { Q_UNUSED(_); settings_pane->clearSpeedingViolations(); });
|
||||||
connect(settings_pane, &SettingsPane::speedLimitChanged,
|
connect(settings_pane, &SettingsPane::speedLimitChanged,
|
||||||
dc, &DroneController::computeSpeedingViolations);
|
dc, &DroneController::computeSpeedingViolations);
|
||||||
|
dc->computeSpeedingViolations(settings_pane->getSpeedLimit());
|
||||||
|
|
||||||
connect(settings_pane, &SettingsPane::toggledTrajectories,
|
connect(settings_pane, &SettingsPane::toggledTrajectories,
|
||||||
dc, &DroneController::setDrawTrajectories);
|
dc, &DroneController::setDrawTrajectories);
|
||||||
|
@ -10,18 +10,24 @@
|
|||||||
|
|
||||||
SettingsPane::SettingsPane(QWidget *parent)
|
SettingsPane::SettingsPane(QWidget *parent)
|
||||||
:QWidget(parent) {
|
:QWidget(parent) {
|
||||||
QDoubleSpinBox *sphere_radius = new QDoubleSpinBox();
|
QDoubleSpinBox *sphere_radius_input = new QDoubleSpinBox();
|
||||||
sphere_radius->setSingleStep(.1);
|
sphere_radius_input->setSingleStep(.1);
|
||||||
QDoubleSpinBox *speed_limit = new QDoubleSpinBox();
|
sphere_radius_input->setValue(sphere_radius);
|
||||||
speed_limit->setSingleStep(.1);
|
QDoubleSpinBox *speed_limit_input = new QDoubleSpinBox();
|
||||||
|
speed_limit_input->setSingleStep(.1);
|
||||||
|
speed_limit_input->setValue(speed_limit);
|
||||||
QCheckBox *show_trajectories = new QCheckBox();
|
QCheckBox *show_trajectories = new QCheckBox();
|
||||||
QCheckBox *show_guides = new QCheckBox();
|
QCheckBox *show_guides = new QCheckBox();
|
||||||
collisions = new QListWidget();
|
collisions = new QListWidget();
|
||||||
speeding_violations = new QListWidget();
|
speeding_violations = new QListWidget();
|
||||||
|
|
||||||
connect(sphere_radius, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
|
connect(sphere_radius_input, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
|
||||||
|
[&](double radius) { sphere_radius = radius; });
|
||||||
|
connect(sphere_radius_input, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
|
||||||
this, &SettingsPane::sphereRadiusChanged);
|
this, &SettingsPane::sphereRadiusChanged);
|
||||||
connect(speed_limit, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
|
connect(speed_limit_input, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
|
||||||
|
[&](double speed) { speed_limit = speed; });
|
||||||
|
connect(speed_limit_input, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
|
||||||
this, &SettingsPane::speedLimitChanged);
|
this, &SettingsPane::speedLimitChanged);
|
||||||
connect(show_trajectories, &QCheckBox::stateChanged,
|
connect(show_trajectories, &QCheckBox::stateChanged,
|
||||||
this, &SettingsPane::toggledTrajectories);
|
this, &SettingsPane::toggledTrajectories);
|
||||||
@ -35,8 +41,8 @@ SettingsPane::SettingsPane(QWidget *parent)
|
|||||||
QTabWidget *tabs = new QTabWidget();
|
QTabWidget *tabs = new QTabWidget();
|
||||||
|
|
||||||
QFormLayout *layout = new QFormLayout;
|
QFormLayout *layout = new QFormLayout;
|
||||||
layout->addRow("Taille de la sphère de collision", sphere_radius);
|
layout->addRow("Taille de la sphère de collision", sphere_radius_input);
|
||||||
layout->addRow("Limite de vitesse", speed_limit);
|
layout->addRow("Limite de vitesse", speed_limit_input);
|
||||||
layout->addRow("Afficher les trajectoires", show_trajectories);
|
layout->addRow("Afficher les trajectoires", show_trajectories);
|
||||||
layout->addRow("Afficher les guides", show_guides);
|
layout->addRow("Afficher les guides", show_guides);
|
||||||
|
|
||||||
@ -48,6 +54,15 @@ SettingsPane::SettingsPane(QWidget *parent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double SettingsPane::getSphereRadius() const {
|
||||||
|
return sphere_radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
double SettingsPane::getSpeedLimit() const {
|
||||||
|
return speed_limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SettingsPane::addCollision(int idA, int idB, int frame) {
|
void SettingsPane::addCollision(int idA, int idB, int frame) {
|
||||||
BookmarkItem *item = new BookmarkItem("Frame " + QString::number(frame) + ": #"
|
BookmarkItem *item = new BookmarkItem("Frame " + QString::number(frame) + ": #"
|
||||||
+ QString::number(idA) + " et #" + QString::number(idB),
|
+ QString::number(idA) + " et #" + QString::number(idB),
|
||||||
|
@ -22,9 +22,13 @@ class SettingsPane : public QWidget {
|
|||||||
|
|
||||||
QListWidget *collisions = nullptr;
|
QListWidget *collisions = nullptr;
|
||||||
QListWidget *speeding_violations = nullptr;
|
QListWidget *speeding_violations = nullptr;
|
||||||
|
double sphere_radius = .6;
|
||||||
|
double speed_limit = .5;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SettingsPane(QWidget *parent=nullptr);
|
SettingsPane(QWidget *parent=nullptr);
|
||||||
|
double getSphereRadius() const;
|
||||||
|
double getSpeedLimit() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void addCollision(int idA, int idB, int frame);
|
void addCollision(int idA, int idB, int frame);
|
||||||
|
Loading…
Reference in New Issue
Block a user