diff --git a/src/libs/vtools/dialogs/tools/dialogarc.cpp b/src/libs/vtools/dialogs/tools/dialogarc.cpp index 4c759d983..94a0dc986 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarc.cpp @@ -301,28 +301,20 @@ void DialogArc::ShowDialog(bool click) return; } - QString radius = QString::number(VAbstractValApplication::VApp()->fromPixel(line.length())); - arcVis->setRadius(radius); - SetRadius(radius); - + SetRadius(QString::number(VAbstractValApplication::VApp()->fromPixel(line.length()))); arcVis->RefreshGeometry(); stageRadius = false; stageF1 = true; } else if (stageF1) { - QString f1 = QString::number(Angle()); - arcVis->setF1(f1); - SetF1(f1); - + SetF1(QString::number(Angle())); arcVis->RefreshGeometry(); stageF1 = false; } else { - QString f2 = QString::number(arcVis->StickyEnd(Angle())); - arcVis->setF2(f2); - SetF2(f2); + SetF2(QString::number(arcVis->StickyEnd(Angle()))); FinishCreating(); } @@ -395,7 +387,8 @@ void DialogArc::ChosenObject(quint32 id, const SceneObject &type) { if (vis != nullptr) { - auto *window = qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); + auto *window = qobject_cast( + VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp index 8288d9418..6af3e88c8 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp @@ -49,23 +49,15 @@ #include "ui_dialogarcwithlength.h" #include "../vgeometry/varc.h" #include "../qmuparser/qmudef.h" +#include "../vwidgets/vabstractmainwindow.h" //--------------------------------------------------------------------------------------------------------------------- DialogArcWithLength::DialogArcWithLength(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogArcWithLength), - flagRadius(false), - flagF1(false), - flagLength(false), timerRadius(new QTimer(this)), timerF1(new QTimer(this)), - timerLength(new QTimer(this)), - radius(), - f1(), - length(), - formulaBaseHeightRadius(0), - formulaBaseHeightF1(0), - formulaBaseHeightLength(0) + timerLength(new QTimer(this)) { ui->setupUi(this); @@ -132,7 +124,7 @@ DialogArcWithLength::~DialogArcWithLength() } //--------------------------------------------------------------------------------------------------------------------- -quint32 DialogArcWithLength::GetCenter() const +auto DialogArcWithLength::GetCenter() const -> quint32 { return getCurrentObjectId(ui->comboBoxCenter); } @@ -145,10 +137,9 @@ void DialogArcWithLength::SetCenter(const quint32 &value) } //--------------------------------------------------------------------------------------------------------------------- -QString DialogArcWithLength::GetRadius() const +auto DialogArcWithLength::GetRadius() const -> QString { - return VAbstractApplication::VApp()->TrVars() - ->TryFormulaFromUser(radius, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + return VTranslateVars::TryFormulaFromUser(radius, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } //--------------------------------------------------------------------------------------------------------------------- @@ -163,7 +154,7 @@ void DialogArcWithLength::SetRadius(const QString &value) } ui->plainTextEditRadius->setPlainText(radius); - VisToolArcWithLength *path = qobject_cast(vis); + auto *path = qobject_cast(vis); SCASSERT(path != nullptr) path->setRadius(radius); @@ -171,12 +162,12 @@ void DialogArcWithLength::SetRadius(const QString &value) } //--------------------------------------------------------------------------------------------------------------------- -QString DialogArcWithLength::GetF1() const +auto DialogArcWithLength::GetF1() const -> QString { - return VAbstractApplication::VApp()->TrVars() - ->TryFormulaFromUser(f1, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + return VTranslateVars::TryFormulaFromUser(f1, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } +//--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::SetF1(const QString &value) { f1 = VAbstractApplication::VApp()->TrVars() @@ -188,7 +179,7 @@ void DialogArcWithLength::SetF1(const QString &value) } ui->plainTextEditF1->setPlainText(f1); - VisToolArcWithLength *path = qobject_cast(vis); + auto *path = qobject_cast(vis); SCASSERT(path != nullptr) path->setF1(f1); @@ -196,10 +187,9 @@ void DialogArcWithLength::SetF1(const QString &value) } //--------------------------------------------------------------------------------------------------------------------- -QString DialogArcWithLength::GetLength() const +auto DialogArcWithLength::GetLength() const -> QString { - return VAbstractApplication::VApp()->TrVars() - ->TryFormulaFromUser(length, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + return VTranslateVars::TryFormulaFromUser(length, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } //--------------------------------------------------------------------------------------------------------------------- @@ -214,15 +204,15 @@ void DialogArcWithLength::SetLength(const QString &value) } ui->plainTextEditLength->setPlainText(length); - VisToolArcWithLength *path = qobject_cast(vis); + auto *path = qobject_cast(vis); SCASSERT(path != nullptr) - path->setLength(radius); + path->setLength(length); MoveCursorToEnd(ui->plainTextEditLength); } //--------------------------------------------------------------------------------------------------------------------- -QString DialogArcWithLength::GetPenStyle() const +auto DialogArcWithLength::GetPenStyle() const -> QString { return GetComboBoxCurrentData(ui->comboBoxPenStyle, TypeLineLine); } @@ -234,7 +224,7 @@ void DialogArcWithLength::SetPenStyle(const QString &value) } //--------------------------------------------------------------------------------------------------------------------- -QString DialogArcWithLength::GetColor() const +auto DialogArcWithLength::GetColor() const -> QString { return GetComboBoxCurrentData(ui->comboBoxColor, ColorBlack); } @@ -246,7 +236,7 @@ void DialogArcWithLength::SetColor(const QString &value) } //--------------------------------------------------------------------------------------------------------------------- -qreal DialogArcWithLength::GetApproximationScale() const +auto DialogArcWithLength::GetApproximationScale() const -> qreal { return ui->doubleSpinBoxApproximationScale->value(); } @@ -256,7 +246,7 @@ void DialogArcWithLength::SetApproximationScale(qreal value) { ui->doubleSpinBoxApproximationScale->setValue(value); - VisToolArcWithLength *path = qobject_cast(vis); + auto *path = qobject_cast(vis); SCASSERT(path != nullptr) path->setApproximationScale(value); } @@ -268,7 +258,7 @@ void DialogArcWithLength::SetNotes(const QString ¬es) } //--------------------------------------------------------------------------------------------------------------------- -QString DialogArcWithLength::GetNotes() const +auto DialogArcWithLength::GetNotes() const -> QString { return ui->plainTextEditToolNotes->toPlainText(); } @@ -282,15 +272,101 @@ void DialogArcWithLength::SetAliasSuffix(const QString &alias) } //--------------------------------------------------------------------------------------------------------------------- -QString DialogArcWithLength::GetAliasSuffix() const +auto DialogArcWithLength::GetAliasSuffix() const -> QString { return ui->lineEditAlias->text(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogArcWithLength::ShowDialog(bool click) +{ + if (prepare) + { + auto *arcVis = qobject_cast(vis); + SCASSERT(arcVis != nullptr) + + auto FinishCreating = [this, arcVis]() + { + arcVis->SetMode(Mode::Show); + arcVis->RefreshGeometry(); + + emit ToolTip(QString()); + + setModal(true); + show(); + }; + + if (click) + { + // The check need to ignore first release of mouse button. + // User can select point by clicking on a label. + if (not m_firstRelease) + { + m_firstRelease = true; + return; + } + + /*We will ignore click if pointer is in point circle*/ + auto *scene = qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); + SCASSERT(scene != nullptr) + const QSharedPointer point = data->GeometricObject(GetCenter()); + QLineF line = QLineF(static_cast(*point), scene->getScenePos()); + + auto Angle = [line]() + { + if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) + { + QLineF correction = line; + correction.setAngle(VisToolArcWithLength::CorrectAngle(correction.angle())); + return correction.angle(); + } + + return line.angle(); + }; + + if (stageRadius) + { + //Radius of point circle, but little bigger. Need handle with hover sizes. + if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5) + { + return; + } + + SetRadius(QString::number(VAbstractValApplication::VApp()->fromPixel(line.length()))); + arcVis->RefreshGeometry(); + + stageRadius = false; + stageF1 = true; + } + else if (stageF1) + { + + SetF1(QString::number(Angle())); + arcVis->RefreshGeometry(); + + stageF1 = false; + } + else + { + VArc arc(*point, VAbstractValApplication::VApp()->toPixel(radius.toDouble()), f1.toDouble(), + line.angle()); + + SetLength(QString::number(VAbstractValApplication::VApp()->fromPixel(arc.GetLength()))); + + FinishCreating(); + } + + return; + } + + FinishCreating(); + } +} + //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare == false)// After first choose we ignore all objects + if (not prepare)// After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -298,11 +374,16 @@ void DialogArcWithLength::ChosenObject(quint32 id, const SceneObject &type) { if (vis != nullptr) { + auto *window = qobject_cast( + VAbstractValApplication::VApp()->getMainWindow()); + SCASSERT(window != nullptr) + connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + vis->VisualMode(id); + vis->RefreshToolTip(); } + prepare = true; - this->setModal(true); - this->show(); } } } @@ -329,7 +410,7 @@ void DialogArcWithLength::DeployLengthTextEdit() //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::FXRadius() { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit radius")); dialog->SetFormula(GetRadius()); dialog->setPostfix(UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true)); @@ -343,7 +424,7 @@ void DialogArcWithLength::FXRadius() //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::FXF1() { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit the first angle")); dialog->SetFormula(GetF1()); dialog->setPostfix(degreeSymbol); @@ -357,7 +438,7 @@ void DialogArcWithLength::FXF1() //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::FXLength() { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit the arc length")); dialog->SetFormula(GetLength()); dialog->setPostfix(UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true)); @@ -381,7 +462,7 @@ void DialogArcWithLength::SaveData() f1 = ui->plainTextEditF1->toPlainText(); length = ui->plainTextEditLength->toPlainText(); - VisToolArcWithLength *path = qobject_cast(vis); + auto *path = qobject_cast(vis); SCASSERT(path != nullptr) path->setObject1Id(GetCenter()); diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.h b/src/libs/vtools/dialogs/tools/dialogarcwithlength.h index 87160b4b6..9ef685538 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.h +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.h @@ -36,6 +36,7 @@ #include #include "../vmisc/def.h" +#include "defglobal.h" #include "dialogtool.h" namespace Ui @@ -45,40 +46,42 @@ namespace Ui class DialogArcWithLength final : public DialogTool { - Q_OBJECT + Q_OBJECT // NOLINT public: DialogArcWithLength(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); - ~DialogArcWithLength(); + ~DialogArcWithLength() override; - quint32 GetCenter() const; - void SetCenter(const quint32 &value); + auto GetCenter() const -> quint32; + void SetCenter(const quint32 &value); - QString GetRadius() const; - void SetRadius(const QString &value); + auto GetRadius() const -> QString; + void SetRadius(const QString &value); - QString GetF1() const; - void SetF1(const QString &value); + auto GetF1() const -> QString; + void SetF1(const QString &value); - QString GetLength() const; - void SetLength(const QString &value); + auto GetLength() const -> QString; + void SetLength(const QString &value); - QString GetPenStyle() const; - void SetPenStyle(const QString &value); + auto GetPenStyle() const -> QString; + void SetPenStyle(const QString &value); - QString GetColor() const; - void SetColor(const QString &value); + auto GetColor() const -> QString; + void SetColor(const QString &value); - qreal GetApproximationScale() const; - void SetApproximationScale(qreal value); + auto GetApproximationScale() const -> qreal; + void SetApproximationScale(qreal value); - void SetNotes(const QString ¬es); - QString GetNotes() const; + void SetNotes(const QString ¬es); + auto GetNotes() const -> QString; - void SetAliasSuffix(const QString &alias); - QString GetAliasSuffix() const; + void SetAliasSuffix(const QString &alias); + auto GetAliasSuffix() const -> QString; + + void ShowDialog(bool click) override; public slots: - virtual void ChosenObject(quint32 id, const SceneObject &type) override; + void ChosenObject(quint32 id, const SceneObject &type) override; /** * @brief DeployFormulaTextEdit grow or shrink formula input */ @@ -86,66 +89,71 @@ public slots: void DeployF1TextEdit(); void DeployLengthTextEdit(); - void FXRadius(); - void FXF1(); - void FXLength(); + void FXRadius(); + void FXF1(); + void FXLength(); protected: - virtual void ShowVisualization() override; + void ShowVisualization() override; /** * @brief SaveData Put dialog data in local variables */ - virtual void SaveData() override; - virtual void closeEvent(QCloseEvent *event) override; - virtual bool IsValid() const final; + void SaveData() override; + void closeEvent(QCloseEvent *event) override; + auto IsValid() const -> bool final; private slots: void ValidateAlias(); private: - Q_DISABLE_COPY(DialogArcWithLength) + Q_DISABLE_COPY_MOVE(DialogArcWithLength) // NOLINT Ui::DialogArcWithLength *ui; /** @brief flagRadius true if value of radius is correct */ - bool flagRadius; + bool flagRadius{false}; /** @brief flagF1 true if value of first angle is correct */ - bool flagF1; + bool flagF1{false}; - bool flagLength; + bool flagLength{false}; - bool flagAlias{true}; + bool flagAlias{true}; /** @brief timerRadius timer of check formula of radius */ - QTimer *timerRadius; + QTimer *timerRadius; /** @brief timerF1 timer of check formula of first angle */ - QTimer *timerF1; + QTimer *timerF1; - QTimer *timerLength; + QTimer *timerLength; /** @brief radius formula of radius */ - QString radius; + QString radius{}; /** @brief f1 formula of first angle */ - QString f1; + QString f1{}; - QString length; + QString length{}; /** @brief formulaBaseHeight base height defined by dialogui */ - int formulaBaseHeightRadius; - int formulaBaseHeightF1; - int formulaBaseHeightLength; + int formulaBaseHeightRadius{0}; + int formulaBaseHeightF1{0}; + int formulaBaseHeightLength{0}; - QString originAliasSuffix{}; + QString originAliasSuffix{}; - void Radius(); - void Length(); - void EvalF(); + bool stageRadius{true}; + bool stageF1{false}; + + bool m_firstRelease{false}; + + void Radius(); + void Length(); + void EvalF(); }; //--------------------------------------------------------------------------------------------------------------------- -inline bool DialogArcWithLength::IsValid() const +inline auto DialogArcWithLength::IsValid() const -> bool { return flagRadius && flagF1 && flagLength && flagAlias; } diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp index dc80aaa4f..2f772779f 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp @@ -347,7 +347,7 @@ void VToolArcWithLength::SetVisualization() if (not vis.isNull()) { const QSharedPointer arc = VAbstractTool::data.GeometricObject(m_id); - VisToolArcWithLength *visual = qobject_cast(vis); + auto *visual = qobject_cast(vis); SCASSERT(visual != nullptr) const VTranslateVars *trVars = VAbstractApplication::VApp()->TrVars(); @@ -360,6 +360,7 @@ void VToolArcWithLength::SetVisualization() VAbstractApplication::VApp()->Settings()->GetOsSeparator())); visual->setLineStyle(LineStyleToPenStyle(arc->GetPenStyle())); visual->setApproximationScale(arc->GetApproximationScale()); + visual->SetMode(Mode::Show); visual->RefreshGeometry(); } } diff --git a/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp b/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp index d6d850343..93697c821 100644 --- a/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp +++ b/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp @@ -42,12 +42,14 @@ #include "../visualization.h" #include "../vwidgets/scalesceneitems.h" #include "vispath.h" +#include "../vmisc/vmodifierkey.h" //--------------------------------------------------------------------------------------------------------------------- VisToolArcWithLength::VisToolArcWithLength(const VContainer *data, QGraphicsItem *parent) - :VisPath(data, parent), arcCenter(nullptr), radius(0), f1(0), length(0) + :VisPath(data, parent) { arcCenter = InitPoint(mainColor, this); + f1Point = InitPoint(supportColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -55,14 +57,94 @@ void VisToolArcWithLength::RefreshGeometry() { if (object1Id > NULL_ID) { + f1Point->setVisible(false); + const QSharedPointer first = Visualization::data->GeometricObject(object1Id); DrawPoint(arcCenter, static_cast(*first), supportColor); - if (not qFuzzyIsNull(radius) && f1 >= 0 && not qFuzzyIsNull(length)) + if (mode == Mode::Creation) { - VArc arc = VArc (length, *first, radius, f1); - arc.SetApproximationScale(m_approximationScale); - DrawPath(this, arc.GetPath(), arc.DirectionArrows(), mainColor, lineStyle, Qt::RoundCap); + QLineF r = QLineF(static_cast(*first), Visualization::scenePos); + + auto Angle = [r]() + { + if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) + { + QLineF correction = r; + correction.setAngle(CorrectAngle(correction.angle())); + return correction.angle(); + } + + return r.angle(); + }; + + auto NumberToUser = [](qreal value) + { + return VAbstractApplication::VApp()->TrVars() + ->FormulaToUser(QString::number(VAbstractValApplication::VApp()->fromPixel(value)), + VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + }; + + static const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); + + if (qFuzzyIsNull(radius)) + { + VArc arc = VArc (*first, r.length(), r.angle(), r.angle()); + arc.SetApproximationScale(m_approximationScale); + DrawPath(this, arc.GetPath(), QVector(), supportColor, Qt::DashLine, Qt::RoundCap); + + Visualization::toolTip = tr("Arc: radius = %1%2; " + "Mouse click - finish selecting the radius, " + "%3 - skip") + .arg(NumberToUser(r.length()), prefix, VModifierKey::EnterKey()); + } + else if (f1 < 0) + { + qreal f1Angle = Angle(); + VArc arc = VArc (*first, radius, f1Angle, f1Angle); + arc.SetApproximationScale(m_approximationScale); + DrawPath(this, arc.GetPath(), QVector(), supportColor, Qt::DashLine, Qt::RoundCap); + + QLineF f1Line = r; + f1Line.setLength(radius); + f1Line.setAngle(f1Angle); + + DrawPoint(f1Point, f1Line.p2(), supportColor); + + Visualization::toolTip = tr("Arc: radius = %1%2, first angle = %3°; " + "Mouse click - finish selecting the first angle, " + "%4 - sticking angle, " + "%5 - skip") + .arg(NumberToUser(radius), prefix) + .arg(f1Angle) + .arg(VModifierKey::Shift(), VModifierKey::EnterKey()); + } + else if (f1 >= 0) + { + VArc arc = VArc (*first, radius, f1, r.angle()); + arc.SetApproximationScale(m_approximationScale); + DrawPath(this, arc.GetPath(), arc.DirectionArrows(), mainColor, lineStyle, Qt::RoundCap); + + Visualization::toolTip = tr("Arc: radius = %1%2, first angle = %3°, arc length = %4%2; " + "Mouse click - finish creating, " + "%5 - skip") + .arg(NumberToUser(radius), prefix) + .arg(f1) + .arg(NumberToUser(arc.GetLength()), VModifierKey::EnterKey()); + } + } + else + { + if (not qFuzzyIsNull(radius) && f1 >= 0 && not qFuzzyIsNull(length)) + { + VArc arc = VArc (length, *first, radius, f1); + arc.SetApproximationScale(m_approximationScale); + DrawPath(this, arc.GetPath(), arc.DirectionArrows(), mainColor, lineStyle, Qt::RoundCap); + } + else + { + DrawPath(this, QPainterPath(), QVector(), mainColor, lineStyle, Qt::RoundCap); + } } } } @@ -84,3 +166,15 @@ void VisToolArcWithLength::setLength(const QString &expression) { length = FindLengthFromUser(expression, Visualization::data->DataVariables()); } + +//--------------------------------------------------------------------------------------------------------------------- +auto VisToolArcWithLength::CorrectAngle(qreal angle) -> qreal +{ + qreal ang = angle; + if (angle > 360) + { + ang = angle - 360.0 * qFloor(angle/360); + } + + return (qFloor(qAbs(ang)/5.)) * 5; +} diff --git a/src/libs/vtools/visualization/path/vistoolarcwithlength.h b/src/libs/vtools/visualization/path/vistoolarcwithlength.h index 582037f38..5b746f8d7 100644 --- a/src/libs/vtools/visualization/path/vistoolarcwithlength.h +++ b/src/libs/vtools/visualization/path/vistoolarcwithlength.h @@ -38,26 +38,30 @@ #include "../vmisc/def.h" #include "vispath.h" +#include "defglobal.h" class VisToolArcWithLength final : public VisPath { - Q_OBJECT + Q_OBJECT // NOLINT public: explicit VisToolArcWithLength(const VContainer *data, QGraphicsItem *parent = nullptr); - virtual ~VisToolArcWithLength() Q_DECL_EQ_DEFAULT; + ~VisToolArcWithLength() override =default; - virtual void RefreshGeometry() override; - void setRadius(const QString &expression); - void setF1(const QString &expression); - void setLength(const QString &expression); - virtual int type() const override {return Type;} - enum { Type = UserType + static_cast(Vis::ToolArcWithLength)}; + void RefreshGeometry() override; + void setRadius(const QString &expression); + void setF1(const QString &expression); + void setLength(const QString &expression); + auto type() const -> int override {return Type;} + enum {Type = UserType + static_cast(Vis::ToolArcWithLength)}; + + static auto CorrectAngle(qreal angle) -> qreal; private: - Q_DISABLE_COPY(VisToolArcWithLength) - VScaledEllipse *arcCenter; - qreal radius; - qreal f1; - qreal length; + Q_DISABLE_COPY_MOVE(VisToolArcWithLength) // NOLINT + VScaledEllipse *arcCenter{nullptr}; + VScaledEllipse *f1Point{nullptr}; + qreal radius{0}; + qreal f1{-1}; + qreal length{0}; }; #endif // VISTOOLARCWITHLENGTH_H