From ca2fe5fff156c50c7d34d559f4f0aef6d1bfa3d0 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 20 May 2022 15:49:15 +0300 Subject: [PATCH] Improved curve segment warnings. --- ChangeLog.txt | 1 + src/libs/vgeometry/vabstractcubicbezier.cpp | 31 ++++++++-- src/libs/vgeometry/vabstractcubicbezier.h | 3 +- .../vgeometry/vabstractcubicbezierpath.cpp | 34 +++++++--- src/libs/vgeometry/vabstractcubicbezierpath.h | 2 +- src/libs/vgeometry/varc.cpp | 62 +++++++++++++++---- src/libs/vgeometry/varc.h | 6 +- src/libs/vgeometry/vellipticalarc.cpp | 35 ++++++++--- src/libs/vgeometry/vellipticalarc.h | 4 +- src/libs/vgeometry/vspline.cpp | 4 +- src/libs/vgeometry/vspline.h | 2 +- .../toolsinglepoint/toolcut/vtoolcutarc.cpp | 12 ++-- .../toolcut/vtoolcutspline.cpp | 8 ++- .../toolcut/vtoolcutsplinepath.cpp | 2 +- .../toolsinglepoint/vtoolsinglepoint.cpp | 4 +- .../toolsinglepoint/vtoolsinglepoint.h | 6 +- .../visualization/path/vistoolcutarc.cpp | 2 +- .../visualization/path/vistoolcutspline.cpp | 2 +- src/test/ValentinaTest/tst_varc.cpp | 2 +- src/test/ValentinaTest/tst_vspline.cpp | 2 +- 20 files changed, 164 insertions(+), 60 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index af9bafff6..54e562474 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -2,6 +2,7 @@ - Fix crash when default locale is ru. - Puzzle app. Fix incorrect update of a layout piece. - Fix visualization for tool Point of intersection line and axis. +- Improved curve segment warnings. # Valentina 0.7.51 April 18, 2022 - Z value change for a layout piece. diff --git a/src/libs/vgeometry/vabstractcubicbezier.cpp b/src/libs/vgeometry/vabstractcubicbezier.cpp index 5ab4e8151..6b9e8b5ed 100644 --- a/src/libs/vgeometry/vabstractcubicbezier.cpp +++ b/src/libs/vgeometry/vabstractcubicbezier.cpp @@ -406,10 +406,11 @@ VAbstractCubicBezier::~VAbstractCubicBezier() * @param spl1p3 third point of first spline * @param spl2p2 second point of second spline * @param spl2p3 third point of second spline + * @param pointName cutting point name. * @return point of cutting. This point is forth point of first spline and first point of second spline. */ QPointF VAbstractCubicBezier::CutSpline(qreal length, QPointF &spl1p2, QPointF &spl1p3, QPointF &spl2p2, - QPointF &spl2p3) const + QPointF &spl2p3, const QString &pointName) const { //Always need return two splines, so we must correct wrong length. const qreal minLength = ToPixel(1, Unit::Mm); @@ -423,7 +424,7 @@ QPointF VAbstractCubicBezier::CutSpline(qreal length, QPointF &spl1p2, QPointF & VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; - return QPointF(); + return {}; } const qreal maxLength = fullLength - minLength; @@ -432,8 +433,17 @@ QPointF VAbstractCubicBezier::CutSpline(qreal length, QPointF &spl1p2, QPointF & { length = minLength; - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too small. Optimize it to minimal " - "value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment (%2) is too small. Optimize it to minimal " + "value.").arg(name(), pointName); + } + else + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too small. Optimize it to minimal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } @@ -441,8 +451,17 @@ QPointF VAbstractCubicBezier::CutSpline(qreal length, QPointF &spl1p2, QPointF & { length = maxLength; - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too big. Optimize it to maximal " - "value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment (%2) is too big. Optimize it to maximal value.") + .arg(name(), pointName); + } + else + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too big. Optimize it to maximal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } diff --git a/src/libs/vgeometry/vabstractcubicbezier.h b/src/libs/vgeometry/vabstractcubicbezier.h index 5c501b831..a23bcbf43 100644 --- a/src/libs/vgeometry/vabstractcubicbezier.h +++ b/src/libs/vgeometry/vabstractcubicbezier.h @@ -57,7 +57,8 @@ public: virtual VPointF GetP3 () const =0; virtual VPointF GetP4 () const =0; - QPointF CutSpline ( qreal length, QPointF &spl1p2, QPointF &spl1p3, QPointF &spl2p2, QPointF &spl2p3) const; + QPointF CutSpline (qreal length, QPointF &spl1p2, QPointF &spl1p3, QPointF &spl2p2, QPointF &spl2p3, + const QString &pointName) const; virtual QString NameForHistory(const QString &toolName) const override; diff --git a/src/libs/vgeometry/vabstractcubicbezierpath.cpp b/src/libs/vgeometry/vabstractcubicbezierpath.cpp index 99de0e36b..6a5371c95 100644 --- a/src/libs/vgeometry/vabstractcubicbezierpath.cpp +++ b/src/libs/vgeometry/vabstractcubicbezierpath.cpp @@ -164,10 +164,11 @@ int VAbstractCubicBezierPath::Segment(const QPointF &p) const * @param spl1p3 second control point first spline. * @param spl2p2 first control point second spline. * @param spl2p3 second control point second spline. + * @param pointName cutting point name. * @return cutting point. */ QPointF VAbstractCubicBezierPath::CutSplinePath(qreal length, qint32 &p1, qint32 &p2, QPointF &spl1p2, QPointF &spl1p3, - QPointF &spl2p2, QPointF &spl2p3) const + QPointF &spl2p2, QPointF &spl2p3, const QString &pointName) const { if (CountSubSpl() < 1) { @@ -187,7 +188,7 @@ QPointF VAbstractCubicBezierPath::CutSplinePath(qreal length, qint32 &p1, qint32 VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; - return QPointF(); + return {}; } const qreal maxLength = fullLength - minLength; @@ -196,8 +197,17 @@ QPointF VAbstractCubicBezierPath::CutSplinePath(qreal length, qint32 &p1, qint32 { length = minLength; - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too small. Optimize it to minimal " - "value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment (%2) is too small. Optimize it to minimal " + "value.").arg(name(), pointName); + } + else + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too small. Optimize it to minimal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } @@ -205,8 +215,17 @@ QPointF VAbstractCubicBezierPath::CutSplinePath(qreal length, qint32 &p1, qint32 { length = maxLength; - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too big. Optimize it to maximal " - "value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment (%2) is too big. Optimize it to maximal value.") + .arg(name(), pointName); + } + else + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too big. Optimize it to maximal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } @@ -221,7 +240,8 @@ QPointF VAbstractCubicBezierPath::CutSplinePath(qreal length, qint32 &p1, qint32 { p1 = i-1; p2 = i; - const QPointF point = spl.CutSpline(length - (fullLength - splLength), spl1p2, spl1p3, spl2p2, spl2p3); + const QPointF point = spl.CutSpline(length - (fullLength - splLength), spl1p2, spl1p3, spl2p2, spl2p3, + pointName); const QVector points = GetSplinePath(); diff --git a/src/libs/vgeometry/vabstractcubicbezierpath.h b/src/libs/vgeometry/vabstractcubicbezierpath.h index 6f457b166..9b88815de 100644 --- a/src/libs/vgeometry/vabstractcubicbezierpath.h +++ b/src/libs/vgeometry/vabstractcubicbezierpath.h @@ -72,7 +72,7 @@ public: int Segment(const QPointF &p) const; QPointF CutSplinePath(qreal length, qint32 &p1, qint32 &p2, QPointF &spl1p2, QPointF &spl1p3, QPointF &spl2p2, - QPointF &spl2p3) const; + QPointF &spl2p3, const QString &pointName) const; virtual QString NameForHistory(const QString &toolName) const override; diff --git a/src/libs/vgeometry/varc.cpp b/src/libs/vgeometry/varc.cpp index 2afab412f..22e66fac6 100644 --- a/src/libs/vgeometry/varc.cpp +++ b/src/libs/vgeometry/varc.cpp @@ -342,9 +342,10 @@ QVector VArc::GetPoints() const * @param length length first arc. * @param arc1 first arc. * @param arc2 second arc. + * @param pointName cutting point name. * @return point cutting */ -QPointF VArc::CutArc(qreal length, VArc &arc1, VArc &arc2) const +auto VArc::CutArc(qreal length, VArc &arc1, VArc &arc2, const QString &pointName) const -> QPointF { //Always need return two arcs, so we must correct wrong length. const qreal fullLength = GetLength(); @@ -358,7 +359,7 @@ QPointF VArc::CutArc(qreal length, VArc &arc1, VArc &arc2) const VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; - return QPointF(); + return {}; } QLineF line(static_cast(GetCenter()), GetP1()); @@ -375,15 +376,34 @@ QPointF VArc::CutArc(qreal length, VArc &arc1, VArc &arc2) const if (length < minLength) { - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too small. Optimize it to " - "minimal value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = tr("Curve '%1'. Length of a cut segment (%2) is too small. Optimize it to minimal value.") + .arg(name(), pointName); + } + else + { + errorMsg = tr("Curve '%1'. Length of a cut segment is too small. Optimize it to minimal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } else if (length > maxLength) { - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too big. Optimize it to " - "maximal value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = tr("Curve '%1'. Length of a cut segment (%2) is too big. Optimize it to maximal value.") + .arg(name(), pointName); + } + else + { + + errorMsg = tr("Curve '%1'. Length of a cut segment is too big. Optimize it to maximal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } @@ -404,15 +424,33 @@ QPointF VArc::CutArc(qreal length, VArc &arc1, VArc &arc2) const if (length > minLength) { - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too small. Optimize it to " - "minimal value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = tr("Curve '%1'. Length of a cut segment (%2) is too small. Optimize it to minimal value.") + .arg(name(), pointName); + } + else + { + errorMsg = tr("Curve '%1'. Length of a cut segment is too small. Optimize it to minimal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } else if (length < maxLength) { - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too big. Optimize it to " - "maximal value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = tr("Curve '%1'. Length of a cut segment (%2) is too big. Optimize it to maximal value.") + .arg(name(), errorMsg); + } + else + { + errorMsg = tr("Curve '%1'. Length of a cut segment is too big. Optimize it to maximal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } @@ -436,11 +474,11 @@ QPointF VArc::CutArc(qreal length, VArc &arc1, VArc &arc2) const //--------------------------------------------------------------------------------------------------------------------- -QPointF VArc::CutArc(qreal length) const +QPointF VArc::CutArc(qreal length, const QString &pointName) const { VArc arc1; VArc arc2; - return this->CutArc(length, arc1, arc2); + return this->CutArc(length, arc1, arc2, pointName); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vgeometry/varc.h b/src/libs/vgeometry/varc.h index 1ecef9c47..cfbd80d47 100644 --- a/src/libs/vgeometry/varc.h +++ b/src/libs/vgeometry/varc.h @@ -81,8 +81,8 @@ public: virtual QVector GetPoints () const override; - QPointF CutArc (qreal length, VArc &arc1, VArc &arc2) const; - QPointF CutArc (qreal length) const; + QPointF CutArc (qreal length, VArc &arc1, VArc &arc2, const QString &pointName) const; + QPointF CutArc (qreal length, const QString &pointName) const; protected: virtual void CreateName() override; virtual void CreateAlias() override; @@ -93,6 +93,6 @@ private: qreal MaxLength() const; }; -Q_DECLARE_TYPEINFO(VArc, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(VArc, Q_MOVABLE_TYPE); // NOLINT #endif // VARC_H diff --git a/src/libs/vgeometry/vellipticalarc.cpp b/src/libs/vgeometry/vellipticalarc.cpp index 593fefe46..f89b09ce3 100644 --- a/src/libs/vgeometry/vellipticalarc.cpp +++ b/src/libs/vgeometry/vellipticalarc.cpp @@ -347,7 +347,8 @@ qreal VEllipticalArc::GetEndAngle() const * @param arc2 second arc. * @return point cutting */ -QPointF VEllipticalArc::CutArc(const qreal &length, VEllipticalArc &arc1, VEllipticalArc &arc2) const +QPointF VEllipticalArc::CutArc(const qreal &length, VEllipticalArc &arc1, VEllipticalArc &arc2, + const QString &pointName) const { //Always need return two arcs, so we must correct wrong length. qreal len = 0; @@ -363,7 +364,7 @@ QPointF VEllipticalArc::CutArc(const qreal &length, VEllipticalArc &arc1, VEllip VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; - return QPointF(); + return {}; } const qreal maxLength = fullLength - minLength; @@ -372,8 +373,17 @@ QPointF VEllipticalArc::CutArc(const qreal &length, VEllipticalArc &arc1, VEllip { len = minLength; - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too small. Optimize it to minimal " - "value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment (%2) is too small. Optimize it to minimal " + "value.").arg(name(), pointName); + } + else + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too small. Optimize it to minimal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } @@ -381,8 +391,17 @@ QPointF VEllipticalArc::CutArc(const qreal &length, VEllipticalArc &arc1, VEllip { len = maxLength; - const QString errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too big. Optimize it to maximal " - "value.").arg(name()); + QString errorMsg; + if (not pointName.isEmpty()) + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment (%2) is too big. Optimize it to maximal value.") + .arg(name(), pointName); + } + else + { + errorMsg = QObject::tr("Curve '%1'. Length of a cut segment is too big. Optimize it to maximal value.") + .arg(name()); + } VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : qWarning() << VAbstractApplication::warningMessageSignature + errorMsg; } @@ -405,11 +424,11 @@ QPointF VEllipticalArc::CutArc(const qreal &length, VEllipticalArc &arc1, VEllip //--------------------------------------------------------------------------------------------------------------------- -QPointF VEllipticalArc::CutArc(const qreal &length) const +QPointF VEllipticalArc::CutArc(const qreal &length, const QString &pointName) const { VEllipticalArc arc1; VEllipticalArc arc2; - return this->CutArc(length, arc1, arc2); + return this->CutArc(length, arc1, arc2, pointName); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vgeometry/vellipticalarc.h b/src/libs/vgeometry/vellipticalarc.h index b5eeeec5b..e56678007 100644 --- a/src/libs/vgeometry/vellipticalarc.h +++ b/src/libs/vgeometry/vellipticalarc.h @@ -101,8 +101,8 @@ public: virtual qreal GetStartAngle () const override; virtual qreal GetEndAngle () const override; - QPointF CutArc (const qreal &length, VEllipticalArc &arc1, VEllipticalArc &arc2) const; - QPointF CutArc (const qreal &length) const; + QPointF CutArc (const qreal &length, VEllipticalArc &arc1, VEllipticalArc &arc2, const QString &pointName) const; + QPointF CutArc (const qreal &length, const QString &pointName) const; static qreal OptimizeAngle(qreal angle); protected: diff --git a/src/libs/vgeometry/vspline.cpp b/src/libs/vgeometry/vspline.cpp index b9f209398..30619886f 100644 --- a/src/libs/vgeometry/vspline.cpp +++ b/src/libs/vgeometry/vspline.cpp @@ -196,13 +196,13 @@ qreal VSpline::GetLength () const } //--------------------------------------------------------------------------------------------------------------------- -QPointF VSpline::CutSpline(qreal length, VSpline &spl1, VSpline &spl2) const +QPointF VSpline::CutSpline(qreal length, VSpline &spl1, VSpline &spl2, const QString &pointName) const { QPointF spl1p2; QPointF spl1p3; QPointF spl2p2; QPointF spl2p3; - const QPointF cutPoint = CutSpline (length, spl1p2, spl1p3, spl2p2, spl2p3 ); + const QPointF cutPoint = CutSpline(length, spl1p2, spl1p3, spl2p2, spl2p3, pointName); spl1 = VSpline(GetP1(), spl1p2, spl1p3, VPointF(cutPoint)); spl1.SetApproximationScale(GetApproximationScale()); diff --git a/src/libs/vgeometry/vspline.h b/src/libs/vgeometry/vspline.h index 8bb4dfaa7..6430bb560 100644 --- a/src/libs/vgeometry/vspline.h +++ b/src/libs/vgeometry/vspline.h @@ -104,7 +104,7 @@ public: qreal GetKcurve() const; using VAbstractCubicBezier::CutSpline; - QPointF CutSpline ( qreal length, VSpline &spl1, VSpline &spl2) const; + QPointF CutSpline(qreal length, VSpline &spl1, VSpline &spl2, const QString &pointName) const; virtual QVector GetPoints () const override; // cppcheck-suppress unusedFunction diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp index f8506ad00..cbdb152d3 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp @@ -127,13 +127,13 @@ VToolCutArc* VToolCutArc::Create(const QPointer &dialog, VMainGraphi * @brief Create help create tool. * @param initData init data. */ -VToolCutArc* VToolCutArc::Create(VToolCutInitData &initData) +auto VToolCutArc::Create(VToolCutInitData &initData) -> VToolCutArc* { const QSharedPointer arc = initData.data->GeometricObject(initData.baseCurveId); //Declare special variable "CurrentLength" - VCurveLength *length = new VCurveLength(initData.baseCurveId, initData.baseCurveId, arc.data(), - *initData.data->GetPatternUnit()); + auto *length = new VCurveLength(initData.baseCurveId, initData.baseCurveId, arc.data(), + *initData.data->GetPatternUnit()); length->SetName(currentLength); initData.data->AddVariable(length); @@ -141,7 +141,7 @@ VToolCutArc* VToolCutArc::Create(VToolCutInitData &initData) VArc arc1; VArc arc2; - QPointF point = arc->CutArc(VAbstractValApplication::VApp()->toPixel(result), arc1, arc2); + QPointF point = arc->CutArc(VAbstractValApplication::VApp()->toPixel(result), arc1, arc2, initData.name); arc1.SetAliasSuffix(initData.aliasSuffix1); arc2.SetAliasSuffix(initData.aliasSuffix2); @@ -296,9 +296,11 @@ QString VToolCutArc::MakeToolTip() const const QString endAngleStr = tr("end angle"); const QString radiusStr = tr("radius"); + const QSharedPointer point = VAbstractTool::data.GeometricObject(m_id); + VArc ar1; VArc ar2; - arc->CutArc(VAbstractValApplication::VApp()->toPixel(length), ar1, ar2); + arc->CutArc(VAbstractValApplication::VApp()->toPixel(length), ar1, ar2, point->name()); ar1.setId(m_id + 1); ar1.SetAliasSuffix(m_aliasSuffix1); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp index 26ae1f2e5..2f13d7956 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp @@ -143,7 +143,8 @@ VToolCutSpline* VToolCutSpline::Create(VToolCutInitData &initData) const qreal result = CheckFormula(initData.id, initData.formula, initData.data); QPointF spl1p2, spl1p3, spl2p2, spl2p3; - QPointF point = spl->CutSpline(VAbstractValApplication::VApp()->toPixel(result), spl1p2, spl1p3, spl2p2, spl2p3); + QPointF point = spl->CutSpline(VAbstractValApplication::VApp()->toPixel(result), spl1p2, spl1p3, spl2p2, spl2p3, + initData.name); VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my); p->SetShowLabel(initData.showLabel); @@ -285,8 +286,11 @@ QString VToolCutSpline::MakeToolTip() const ->FormulaToUser(formula, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); const qreal length = Visualization::FindValFromUser(expression, VAbstractTool::data.DataVariables()); + const QSharedPointer p = VAbstractTool::data.GeometricObject(m_id); + QPointF spl1p2, spl1p3, spl2p2, spl2p3; - QPointF point = spl->CutSpline(VAbstractValApplication::VApp()->toPixel(length), spl1p2, spl1p3, spl2p2, spl2p3); + QPointF point = spl->CutSpline(VAbstractValApplication::VApp()->toPixel(length), spl1p2, spl1p3, spl2p2, spl2p3, + p->name()); VSpline spline1 = VSpline(spl->GetP1(), spl1p2, spl1p3, VPointF(point)); spline1.SetAliasSuffix(m_aliasSuffix1); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp index a878277ea..5d417a110 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp @@ -222,7 +222,7 @@ VPointF *VToolCutSplinePath::CutSplinePath(qreal length, const QSharedPointerCutSplinePath(length, p1, p2, spl1p2, spl1p3, spl2p2, spl2p3); + const QPointF point = splPath->CutSplinePath(length, p1, p2, spl1p2, spl1p3, spl2p2, spl2p3, pName); VPointF *p = new VPointF(point); p->setName(pName); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp index a91245fbe..dd531ecea 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp @@ -415,11 +415,11 @@ auto VToolSinglePoint::InitSegments(GOType curveType, qreal segLength, const VPo QPointF spl1p2, spl1p3, spl2p2, spl2p3; if (not VFuzzyComparePossibleNulls(segLength, -1)) { - spl->CutSpline(segLength, spl1p2, spl1p3, spl2p2, spl2p3); + spl->CutSpline(segLength, spl1p2, spl1p3, spl2p2, spl2p3, p->name()); } else { - spl->CutSpline(0, spl1p2, spl1p3, spl2p2, spl2p3); + spl->CutSpline(0, spl1p2, spl1p3, spl2p2, spl2p3, p->name()); } VSpline *spl1 = new VSpline(spl->GetP1(), spl1p2, spl1p3, *p); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h index 93a86a224..9cf2a4e26 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h @@ -113,7 +113,7 @@ protected: static QPair InitSegments(GOType curveType, qreal segLength, const VPointF *p, quint32 curveId, VContainer *data, const QString &alias1, const QString &alias2); private: - Q_DISABLE_COPY(VToolSinglePoint) + Q_DISABLE_COPY(VToolSinglePoint) // NOLINT }; //--------------------------------------------------------------------------------------------------------------------- @@ -131,11 +131,11 @@ inline auto VToolSinglePoint::InitArc(VContainer *data, qreal segLength, const V if (not VFuzzyComparePossibleNulls(segLength, -1)) { - arc->CutArc(segLength, arc1, arc2); + arc->CutArc(segLength, arc1, arc2, p->name()); } else { - arc->CutArc(0, arc1, arc2); + arc->CutArc(0, arc1, arc2, p->name()); } // Arc highly depend on id. Need for creating the name. diff --git a/src/libs/vtools/visualization/path/vistoolcutarc.cpp b/src/libs/vtools/visualization/path/vistoolcutarc.cpp index 8f2581b74..1095d7771 100644 --- a/src/libs/vtools/visualization/path/vistoolcutarc.cpp +++ b/src/libs/vtools/visualization/path/vistoolcutarc.cpp @@ -70,7 +70,7 @@ void VisToolCutArc::RefreshGeometry() { VArc ar1; VArc ar2; - QPointF p = arc->CutArc(length, ar1, ar2); + QPointF p = arc->CutArc(length, ar1, ar2, QString()); DrawPoint(point, p, mainColor); DrawPath(arc1, ar1.GetPath(), ar1.DirectionArrows(), Qt::darkGreen, lineStyle, Qt::RoundCap); diff --git a/src/libs/vtools/visualization/path/vistoolcutspline.cpp b/src/libs/vtools/visualization/path/vistoolcutspline.cpp index 62f07800e..da833adaf 100644 --- a/src/libs/vtools/visualization/path/vistoolcutspline.cpp +++ b/src/libs/vtools/visualization/path/vistoolcutspline.cpp @@ -74,7 +74,7 @@ void VisToolCutSpline::RefreshGeometry() QPointF spl1p3; QPointF spl2p2; QPointF spl2p3; - const QPointF p = spl->CutSpline (length, spl1p2, spl1p3, spl2p2, spl2p3 ); + const QPointF p = spl->CutSpline(length, spl1p2, spl1p3, spl2p2, spl2p3, QString()); VSpline sp1 = VSpline(spl->GetP1(), spl1p2, spl1p3, VPointF(p)); sp1.SetApproximationScale(spl->GetApproximationScale()); diff --git a/src/test/ValentinaTest/tst_varc.cpp b/src/test/ValentinaTest/tst_varc.cpp index 5a57d26a0..2e2fb83af 100644 --- a/src/test/ValentinaTest/tst_varc.cpp +++ b/src/test/ValentinaTest/tst_varc.cpp @@ -399,7 +399,7 @@ void TST_VArc::TestCutArc() VArc arc1; VArc arc2; - QPointF point = arc.CutArc(cutLength, arc1, arc2); + QPointF point = arc.CutArc(cutLength, arc1, arc2, QString()); QCOMPARE(point, cutPoint); diff --git a/src/test/ValentinaTest/tst_vspline.cpp b/src/test/ValentinaTest/tst_vspline.cpp index b660fd6c9..1689f8602 100644 --- a/src/test/ValentinaTest/tst_vspline.cpp +++ b/src/test/ValentinaTest/tst_vspline.cpp @@ -785,7 +785,7 @@ void TST_VSpline::TestLengthByPoint_data() const qreal length = spl.GetLength(); const qreal testLength = length*(2.0/3.0); VSpline spl1, spl2; - const QPointF p = spl.CutSpline(testLength, spl1, spl2); + const QPointF p = spl.CutSpline(testLength, spl1, spl2, QString()); QTest::newRow("Point on spline") << spl << p << testLength; QTest::newRow("Wrong point") << spl << QPointF(-10000, -10000) << -1.0;