add option to draw support lines
This commit is contained in:
parent
5326f294ce
commit
cbf29fc087
@ -76,6 +76,25 @@ void DroneController::drawTrajectory(QOpenGLExtraFunctions *f, const Drone &d) c
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DroneController::drawSupportLine(QOpenGLExtraFunctions *f, const Drone &d) const {
|
||||||
|
OpenGLWidget::instance->getLineProgram()->bind();
|
||||||
|
OpenGLWidget::instance->getLineProgram()->setUniformValue("color", .2, .2, .2);
|
||||||
|
GLfloat data[6] = {
|
||||||
|
d.getPos().x(), 0, d.getPos().z(),
|
||||||
|
d.getPos().x(), d.getPos().y(), d.getPos().z(),
|
||||||
|
};
|
||||||
|
f->glEnableVertexAttribArray(0);
|
||||||
|
f->glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, data);
|
||||||
|
glLineWidth(2);
|
||||||
|
f->glDisable(GL_CULL_FACE);
|
||||||
|
f->glDrawArrays(GL_LINES, 0, 2);
|
||||||
|
f->glEnable(GL_CULL_FACE);
|
||||||
|
OpenGLWidget::instance->getLineProgram()->release();
|
||||||
|
OpenGLWidget::instance->getMainProgram()->bind();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DroneController::draw(QOpenGLExtraFunctions *f) const {
|
void DroneController::draw(QOpenGLExtraFunctions *f) const {
|
||||||
const QVector<QPair<int, int>> &col = collisions[frame];
|
const QVector<QPair<int, int>> &col = collisions[frame];
|
||||||
for (const Drone &d : drones) {
|
for (const Drone &d : drones) {
|
||||||
@ -95,6 +114,9 @@ void DroneController::draw(QOpenGLExtraFunctions *f) const {
|
|||||||
if (draw_trajectories) {
|
if (draw_trajectories) {
|
||||||
drawTrajectory(f, d);
|
drawTrajectory(f, d);
|
||||||
}
|
}
|
||||||
|
if (draw_support_lines) {
|
||||||
|
drawSupportLine(f, d);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,3 +218,8 @@ void DroneController::setDrawTrajectories(bool enable) {
|
|||||||
draw_trajectories = enable;
|
draw_trajectories = enable;
|
||||||
OpenGLWidget::instance->update();
|
OpenGLWidget::instance->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DroneController::setDrawSupportLines(bool enable) {
|
||||||
|
draw_support_lines = enable;
|
||||||
|
OpenGLWidget::instance->update();
|
||||||
|
}
|
||||||
|
@ -24,6 +24,7 @@ class DroneController : public QObject, public Painter {
|
|||||||
QTimer sphere_timer;
|
QTimer sphere_timer;
|
||||||
QMap<int, QVector<QPair<int, int>>> collisions;
|
QMap<int, QVector<QPair<int, int>>> collisions;
|
||||||
bool draw_trajectories = false;
|
bool draw_trajectories = false;
|
||||||
|
bool draw_support_lines = false;
|
||||||
|
|
||||||
static OpenGLMesh *sphere;
|
static OpenGLMesh *sphere;
|
||||||
static const unsigned char sphere_neutral[];
|
static const unsigned char sphere_neutral[];
|
||||||
@ -31,6 +32,7 @@ class DroneController : public QObject, public Painter {
|
|||||||
static bool collides(const Drone &a, const Drone &b, double radius);
|
static bool collides(const Drone &a, const Drone &b, double radius);
|
||||||
|
|
||||||
void drawTrajectory(QOpenGLExtraFunctions *f, const Drone &d) const;
|
void drawTrajectory(QOpenGLExtraFunctions *f, const Drone &d) const;
|
||||||
|
void drawSupportLine(QOpenGLExtraFunctions *f, const Drone &d) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DroneController(const QJsonObject &json);
|
DroneController(const QJsonObject &json);
|
||||||
@ -55,6 +57,7 @@ public slots:
|
|||||||
void computeCollisions(double sphere_radius);
|
void computeCollisions(double sphere_radius);
|
||||||
void displaySpheres(double sphere_radius);
|
void displaySpheres(double sphere_radius);
|
||||||
void setDrawTrajectories(bool enable);
|
void setDrawTrajectories(bool enable);
|
||||||
|
void setDrawSupportLines(bool enable);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,6 +91,8 @@ void MainWindow::open(const QString &path) {
|
|||||||
dc, &DroneController::displaySpheres);
|
dc, &DroneController::displaySpheres);
|
||||||
connect(settings_pane, &SettingsPane::toggledTrajectories,
|
connect(settings_pane, &SettingsPane::toggledTrajectories,
|
||||||
dc, &DroneController::setDrawTrajectories);
|
dc, &DroneController::setDrawTrajectories);
|
||||||
|
connect(settings_pane, &SettingsPane::toggledSupportLines,
|
||||||
|
dc, &DroneController::setDrawSupportLines);
|
||||||
settings_pane->setEnabled(true);
|
settings_pane->setEnabled(true);
|
||||||
|
|
||||||
glw.setPainter(dc);
|
glw.setPainter(dc);
|
||||||
|
Loading…
Reference in New Issue
Block a user