diff -r 02f142b399b1 -r 94c92c923713 src/tools/drawtool.cpp --- a/src/tools/drawtool.cpp Sat Jul 24 01:50:38 2021 +0300 +++ b/src/tools/drawtool.cpp Sun Jul 25 13:49:37 2021 +0300 @@ -1,6 +1,10 @@ #include #include "drawtool.h" +static const QBrush brush = {Qt::white}; +static const QPen pen = {Qt::black}; +static const QBrush polygonBrush = {QColor{64, 255, 128}}; + DrawTool::DrawTool(QObject* parent) : BaseTool{parent} {} @@ -29,9 +33,11 @@ else { this->polygon.push_back(pos); - auto& previewLayer = info.invoker->modifyPreviewLayer(Canvas::DrawToolPreview).polygons; - previewLayer.clear(); - previewLayer.push_back({this->polygon}); + auto& previewLayer = info.invoker->modifyPreviewLayer(Canvas::DrawToolPreview); + previewLayer.points.resize(this->polygon.size()); + previewLayer.points.back() = {pos, brush, pen}; + previewLayer.polygons.clear(); + previewLayer.polygons.push_back({geom::NPolygon{this->polygon}, polygonBrush, pen}); if (this->polygon.size() == 4) { QMessageBox::information(nullptr, "test", "close the polygon"); @@ -41,6 +47,27 @@ return true; } +bool DrawTool::mouseMove(const Canvas::MouseMoveInfo& info) +{ + if (this->polygon.size() < 4 and info.worldPosition.has_value()) + { + auto& previewLayer = info.invoker->modifyPreviewLayer(Canvas::DrawToolPreview); + previewLayer.points.resize(this->polygon.size() + 1); + previewLayer.points.back() = {info.worldPosition.value(), brush, pen}; + if (previewLayer.polygons.size() > 0) + { + auto& polygon = previewLayer.polygons.back(); + polygon.geometry.points.resize(this->polygon.size() + 1); + polygon.geometry.points.back() = info.worldPosition.value(); + } + return true; + } + else + { + return false; + } +} + void DrawTool::reset() { this->polygon.clear();