From c180a26e097a86e251e8a60a9839df38070f5dd3 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 11 Nov 2017 11:24:30 +0200 Subject: [PATCH] Improve tool Point on middle visualization. Show point on middle position when creating a point. --HG-- branch : develop --- .../vtools/dialogs/tools/dialogalongline.cpp | 5 +++- .../visualization/line/vistoolalongline.cpp | 25 ++++++++++++++++--- .../visualization/line/vistoolalongline.h | 2 ++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/libs/vtools/dialogs/tools/dialogalongline.cpp b/src/libs/vtools/dialogs/tools/dialogalongline.cpp index 5d46370d0..d2db00eca 100644 --- a/src/libs/vtools/dialogs/tools/dialogalongline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogalongline.cpp @@ -189,11 +189,11 @@ void DialogAlongLine::ChosenObject(quint32 id, const SceneObject &type) if (flagError) { line->setObject2Id(id); - line->RefreshGeometry(); if (buildMidpoint) { SetFormula(currentLength + QLatin1String("/2")); } + line->RefreshGeometry(); prepare = true; this->setModal(true); this->show(); @@ -270,6 +270,9 @@ void DialogAlongLine::Build(const Tool &type) if (type == Tool::Midpoint) { buildMidpoint = true; + VisToolAlongLine *line = qobject_cast(vis); + SCASSERT(line != nullptr) + line->setMidPointMode(buildMidpoint); } } diff --git a/src/libs/vtools/visualization/line/vistoolalongline.cpp b/src/libs/vtools/visualization/line/vistoolalongline.cpp index c3642261f..c2c1642da 100644 --- a/src/libs/vtools/visualization/line/vistoolalongline.cpp +++ b/src/libs/vtools/visualization/line/vistoolalongline.cpp @@ -45,8 +45,14 @@ //--------------------------------------------------------------------------------------------------------------------- VisToolAlongLine::VisToolAlongLine(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent), object2Id(NULL_ID), point(nullptr), lineP1(nullptr), lineP2(nullptr), line(nullptr), - length(0) + : VisLine(data, parent), + object2Id(NULL_ID), + point(nullptr), + lineP1(nullptr), + lineP2(nullptr), + line(nullptr), + length(0), + m_midPointMode(false) { this->mainColor = Qt::red; this->setZValue(2);// Show on top real tool @@ -69,6 +75,12 @@ void VisToolAlongLine::setLength(const QString &expression) length = FindLengthFromUser(expression, Visualization::data->DataVariables()); } +//--------------------------------------------------------------------------------------------------------------------- +void VisToolAlongLine::setMidPointMode(bool midPointMode) +{ + m_midPointMode = midPointMode; +} + //--------------------------------------------------------------------------------------------------------------------- void VisToolAlongLine::RefreshGeometry() { @@ -79,7 +91,14 @@ void VisToolAlongLine::RefreshGeometry() if (object2Id <= NULL_ID) { - DrawLine(line, QLineF(static_cast(*first), Visualization::scenePos), supportColor); + QLineF cursorLine (static_cast(*first), Visualization::scenePos); + DrawLine(line, cursorLine, supportColor); + + if (m_midPointMode) + { + cursorLine.setLength(cursorLine.length()/2.0); + DrawPoint(lineP2, cursorLine.p2(), supportColor); + } } else { diff --git a/src/libs/vtools/visualization/line/vistoolalongline.h b/src/libs/vtools/visualization/line/vistoolalongline.h index c6c164dd7..63d571e8e 100644 --- a/src/libs/vtools/visualization/line/vistoolalongline.h +++ b/src/libs/vtools/visualization/line/vistoolalongline.h @@ -49,6 +49,7 @@ public: virtual void RefreshGeometry() Q_DECL_OVERRIDE; void setObject2Id(const quint32 &value); void setLength(const QString &expression); + void setMidPointMode(bool midPointMode); virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Vis::ToolAlongLine)}; private: @@ -59,6 +60,7 @@ private: VScaledEllipse *lineP2; VScaledLine *line; qreal length; + bool m_midPointMode; }; #endif // VISTOOLALONGLINE_H