Wed, 26 Feb 2020 02:21:07 +0200
grid stuff
#include <QMouseEvent> #include "canvas.h" Canvas::Canvas( Model* model, DocumentManager* documents, const ldraw::ColorTable& colorTable, QWidget* parent) : PartRenderer{model, documents, colorTable, parent} { this->setMouseTracking(true); } void Canvas::handleSelectionChange(const QSet<ldraw::Id>& selectedIds, const QSet<ldraw::Id>& deselectedIds) { Q_ASSERT(not selectedIds.contains(ldraw::NULL_ID)); this->selection.subtract(deselectedIds); this->selection.unite(selectedIds); this->compiler->setSelectedObjects(this->selection); this->update(); } void Canvas::mouseMoveEvent(QMouseEvent* event) { #if 0 std::optional<glm::vec3> p = this->cameraToGrid(event->pos()); if (p.has_value()) { this->newStatusText("Position: (%1, %2, %3)"_q.arg(p->x).arg(p->y).arg(p->z)); } else { this->newStatusText("Position: <none>"_q); } #else const QPointF originAtCamera = this->worldToCamera({1, 1, 1}); this->newStatusText("Origin at (%1, %2), cursor at (%3, %4)"_q.arg(originAtCamera.x()).arg(originAtCamera.y()).arg(event->pos().x()).arg(event->pos().y())); #endif const ldraw::Id id = this->pick(event->pos()); this->highlighted = id; this->totalMouseMove += (event->pos() - this->lastMousePosition).manhattanLength(); this->lastMousePosition = event->pos(); PartRenderer::mouseMoveEvent(event); } void Canvas::mousePressEvent(QMouseEvent* event) { this->totalMouseMove = 0; this->lastMousePosition = event->pos(); PartRenderer::mousePressEvent(event); } void Canvas::mouseReleaseEvent(QMouseEvent* event) { if (this->totalMouseMove < (2.0 / sqrt(2)) * 5.0) { if (this->highlighted == ldraw::NULL_ID) { this->selection = {}; } else { this->selection = {this->highlighted}; } this->compiler->setSelectedObjects(this->selection); emit selectionChanged(this->selection); this->update(); } PartRenderer::mouseReleaseEvent(event); }