From 1d76a59ae70e7d9b33764a45494b6bd49ab0d480 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sun, 10 Apr 2016 14:40:04 +0300 Subject: [PATCH 01/41] Rotation VPointF, VArc, VCubicBezier and VCubicBezierPath. --HG-- branch : feature --- src/libs/vgeometry/varc.cpp | 13 ++ src/libs/vgeometry/varc.h | 1 + src/libs/vgeometry/vcubicbezier.cpp | 12 ++ src/libs/vgeometry/vcubicbezier.h | 1 + src/libs/vgeometry/vcubicbezierpath.cpp | 13 ++ src/libs/vgeometry/vcubicbezierpath.h | 1 + src/libs/vgeometry/vellipticalarc.cpp | 182 +++++++++++++----- src/libs/vgeometry/vellipticalarc.h | 21 +- src/libs/vgeometry/vellipticalarc_p.h | 160 ++++++++++----- src/libs/vgeometry/vpointf.cpp | 16 ++ src/libs/vgeometry/vpointf.h | 3 + src/test/ValentinaTest/qttestmainlambda.cpp | 40 ++-- src/test/ValentinaTest/tst_varc.cpp | 35 ++++ src/test/ValentinaTest/tst_varc.h | 2 + src/test/ValentinaTest/tst_vellipticalarc.cpp | 119 ++++++++++-- src/test/ValentinaTest/tst_vellipticalarc.h | 3 + 16 files changed, 484 insertions(+), 138 deletions(-) diff --git a/src/libs/vgeometry/varc.cpp b/src/libs/vgeometry/varc.cpp index 5b351f9bf..2ce5770ec 100644 --- a/src/libs/vgeometry/varc.cpp +++ b/src/libs/vgeometry/varc.cpp @@ -112,6 +112,19 @@ VArc &VArc::operator =(const VArc &arc) return *this; } +//--------------------------------------------------------------------------------------------------------------------- +VArc VArc::Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix) const +{ + const VPointF center = GetCenter().Rotate(originPoint, degrees); + + const QPointF p1 = VPointF::RotatePF(originPoint, GetP1(), degrees); + const QPointF p2 = VPointF::RotatePF(originPoint, GetP2(), degrees); + + VArc arc(center, GetRadius(), QLineF(center.toQPointF(), p1).angle(), QLineF(center.toQPointF(), p2).angle()); + arc.setName(name() + prefix); + return arc; +} + //--------------------------------------------------------------------------------------------------------------------- VArc::~VArc() {} diff --git a/src/libs/vgeometry/varc.h b/src/libs/vgeometry/varc.h index a1f0077c9..f8f85aa1b 100644 --- a/src/libs/vgeometry/varc.h +++ b/src/libs/vgeometry/varc.h @@ -52,6 +52,7 @@ public: VArc (qreal length, VPointF center, qreal radius, qreal f1); VArc(const VArc &arc); VArc& operator= (const VArc &arc); + VArc Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix = QString()) const; virtual ~VArc() Q_DECL_OVERRIDE; QString GetFormulaF1 () const; diff --git a/src/libs/vgeometry/vcubicbezier.cpp b/src/libs/vgeometry/vcubicbezier.cpp index d8503d15c..4afadcb0c 100644 --- a/src/libs/vgeometry/vcubicbezier.cpp +++ b/src/libs/vgeometry/vcubicbezier.cpp @@ -61,6 +61,18 @@ VCubicBezier &VCubicBezier::operator=(const VCubicBezier &curve) return *this; } +//--------------------------------------------------------------------------------------------------------------------- +VCubicBezier VCubicBezier::Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix) const +{ + const VPointF p1 = GetP1().Rotate(originPoint, degrees); + const VPointF p2 = GetP2().Rotate(originPoint, degrees); + const VPointF p3 = GetP3().Rotate(originPoint, degrees); + const VPointF p4 = GetP4().Rotate(originPoint, degrees); + VCubicBezier curve(p1, p2, p3, p4); + curve.setName(name() + prefix); + return curve; +} + //--------------------------------------------------------------------------------------------------------------------- VCubicBezier::~VCubicBezier() { diff --git a/src/libs/vgeometry/vcubicbezier.h b/src/libs/vgeometry/vcubicbezier.h index 57b9193f8..64d0009cd 100644 --- a/src/libs/vgeometry/vcubicbezier.h +++ b/src/libs/vgeometry/vcubicbezier.h @@ -42,6 +42,7 @@ public: VCubicBezier(const VPointF &p1, const VPointF &p2, const VPointF &p3, const VPointF &p4, quint32 idObject = 0, Draw mode = Draw::Calculation); VCubicBezier &operator=(const VCubicBezier &curve); + VCubicBezier Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix = QString()) const; virtual ~VCubicBezier(); virtual VPointF GetP1() const Q_DECL_OVERRIDE; diff --git a/src/libs/vgeometry/vcubicbezierpath.cpp b/src/libs/vgeometry/vcubicbezierpath.cpp index cf463b794..e54fdf821 100644 --- a/src/libs/vgeometry/vcubicbezierpath.cpp +++ b/src/libs/vgeometry/vcubicbezierpath.cpp @@ -79,6 +79,19 @@ VCubicBezierPath &VCubicBezierPath::operator=(const VCubicBezierPath &curve) return *this; } +//--------------------------------------------------------------------------------------------------------------------- +VCubicBezierPath VCubicBezierPath::Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix) const +{ + const QVector points = GetCubicPath(); + VCubicBezierPath curve; + for(int i=0; i < points.size(); ++i) + { + curve.append(points.at(i).Rotate(originPoint, degrees)); + } + curve.setName(name() + prefix); + return curve; +} + //--------------------------------------------------------------------------------------------------------------------- VCubicBezierPath::~VCubicBezierPath() { diff --git a/src/libs/vgeometry/vcubicbezierpath.h b/src/libs/vgeometry/vcubicbezierpath.h index aa84f87e5..d17008049 100644 --- a/src/libs/vgeometry/vcubicbezierpath.h +++ b/src/libs/vgeometry/vcubicbezierpath.h @@ -45,6 +45,7 @@ public: VCubicBezierPath(const VCubicBezierPath &curve); VCubicBezierPath(const QVector &points, quint32 idObject = 0, Draw mode = Draw::Calculation); VCubicBezierPath &operator=(const VCubicBezierPath &curve); + VCubicBezierPath Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix = QString()) const; virtual ~VCubicBezierPath(); VPointF &operator[](int indx); diff --git a/src/libs/vgeometry/vellipticalarc.cpp b/src/libs/vgeometry/vellipticalarc.cpp index cd2327b88..956dc061e 100644 --- a/src/libs/vgeometry/vellipticalarc.cpp +++ b/src/libs/vgeometry/vellipticalarc.cpp @@ -39,7 +39,7 @@ * @brief VEllipticalArc default constructor. */ VEllipticalArc::VEllipticalArc() - :VAbstractCurve(GOType::EllipticalArc), d (new VEllipticalArcData) + : VAbstractCurve(GOType::EllipticalArc), d (new VEllipticalArcData) {} //--------------------------------------------------------------------------------------------------------------------- @@ -51,18 +51,19 @@ VEllipticalArc::VEllipticalArc() * @param f1 start angle (degree). * @param f2 end angle (degree). */ -VEllipticalArc::VEllipticalArc (VPointF center, qreal radius1, qreal radius2, - QString formulaRadius1, QString formulaRadius2, qreal f1, QString formulaF1, qreal f2, - QString formulaF2, qreal rotationAngle, quint32 idObject, Draw mode) +VEllipticalArc::VEllipticalArc (const VPointF ¢er, qreal radius1, qreal radius2, const QString &formulaRadius1, + const QString &formulaRadius2, qreal f1, const QString &formulaF1, qreal f2, + const QString &formulaF2, qreal rotationAngle, quint32 idObject, Draw mode) : VAbstractCurve(GOType::EllipticalArc, idObject, mode), - d (new VEllipticalArcData(center, radius1, radius2, formulaRadius1, formulaRadius2, - f1, formulaF1, f2, formulaF2, rotationAngle)) + d (new VEllipticalArcData(center, radius1, radius2, formulaRadius1, formulaRadius2, f1, formulaF1, f2, formulaF2, + rotationAngle)) { CreateName(); } //--------------------------------------------------------------------------------------------------------------------- -VEllipticalArc::VEllipticalArc(VPointF center, qreal radius1, qreal radius2, qreal f1, qreal f2, qreal rotationAngle) +VEllipticalArc::VEllipticalArc(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal f2, + qreal rotationAngle) : VAbstractCurve(GOType::EllipticalArc, NULL_ID, Draw::Calculation), d (new VEllipticalArcData(center, radius1, radius2, f1, f2, rotationAngle)) { @@ -70,20 +71,20 @@ VEllipticalArc::VEllipticalArc(VPointF center, qreal radius1, qreal radius2, qre } //--------------------------------------------------------------------------------------------------------------------- -VEllipticalArc::VEllipticalArc(qreal length, QString formulaLength, VPointF center, qreal radius1, qreal radius2, - QString formulaRadius1, QString formulaRadius2, qreal f1, QString formulaF1, qreal rotationAngle, - quint32 idObject, Draw mode) +VEllipticalArc::VEllipticalArc(qreal length, const QString &formulaLength, const VPointF ¢er, qreal radius1, + qreal radius2, const QString &formulaRadius1, const QString &formulaRadius2, qreal f1, + const QString &formulaF1, qreal rotationAngle, quint32 idObject, Draw mode) : VAbstractCurve(GOType::EllipticalArc, idObject, mode), - d (new VEllipticalArcData(formulaLength, center, radius1, radius2, formulaRadius1, formulaRadius2, - f1, formulaF1, rotationAngle)) + d (new VEllipticalArcData(formulaLength, center, radius1, radius2, formulaRadius1, formulaRadius2, f1, formulaF1, + rotationAngle)) { CreateName(); FindF2(length); } //--------------------------------------------------------------------------------------------------------------------- -VEllipticalArc::VEllipticalArc(qreal length, VPointF center, qreal radius1, qreal radius2, qreal f1, - qreal rotationAngle) +VEllipticalArc::VEllipticalArc(qreal length, const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, + qreal rotationAngle) : VAbstractCurve(GOType::EllipticalArc, NULL_ID, Draw::Calculation), d (new VEllipticalArcData(center, radius1, radius2, f1, rotationAngle)) { @@ -117,6 +118,19 @@ VEllipticalArc &VEllipticalArc::operator =(const VEllipticalArc &arc) return *this; } +//--------------------------------------------------------------------------------------------------------------------- +VEllipticalArc VEllipticalArc::Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix) const +{ + const VPointF center = GetCenter().Rotate(originPoint, degrees); + const QPointF p1 = VPointF::RotatePF(originPoint, GetP1(), degrees); + const QPointF p2 = VPointF::RotatePF(originPoint, GetP2(), degrees); + const qreal f1 = QLineF(center.toQPointF(), p1).angle() - GetRotationAngle(); + const qreal f2 = QLineF(center.toQPointF(), p2).angle() - GetRotationAngle(); + VEllipticalArc elArc(center, GetRadius1(), GetRadius2(), f1, f2, GetRotationAngle()); + elArc.setName(name() + prefix); + return elArc; +} + //--------------------------------------------------------------------------------------------------------------------- VEllipticalArc::~VEllipticalArc() {} @@ -165,42 +179,74 @@ QPointF VEllipticalArc::GetP2 () const */ QPointF VEllipticalArc::GetPoint (qreal angle) const { + // Original idea http://alex-black.ru/article.php?content=109#head_3 if (angle > 360 || angle < 0) {// Filter incorect value of angle - QLineF dummy(0,0, 100, 0); + QLineF dummy(0, 0, 100, 0); dummy.setAngle(angle); angle = dummy.angle(); } // p - point without rotation - qreal x = qAbs((d->radius1 * d->radius2)/ - (qSqrt(d->radius2*d->radius2+d->radius1*d->radius1*qTan(M_PI*angle/180)*qTan(M_PI*angle/180)))); - qreal y = qAbs(qTan(M_PI*angle/180) * x); + qreal x = 0; + qreal y = 0; - if (angle > 90 && angle <= 180) - { - x = -x; + qreal angleRad = qDegreesToRadians(angle); + const int n = GetQuadransRad(angleRad); + if (VFuzzyComparePossibleNulls(angleRad, 0) || VFuzzyComparePossibleNulls(angleRad, M_2PI) || + VFuzzyComparePossibleNulls(angleRad, -M_2PI)) + { // 0 (360, -360) degress + x = d->radius1; + y = 0; } - else if (angle > 180 && angle < 270) - { - x = -x; - y = -y; - } - else if (angle > 270) - { - y = -y; - } - else if (VFuzzyComparePossibleNulls(angle, 90)) - { + else if (VFuzzyComparePossibleNulls(angleRad, M_PI_2) || VFuzzyComparePossibleNulls(angleRad, -3 * M_PI_2)) + { // 90 (-270) degress x = 0; y = d->radius2; } - else if (VFuzzyComparePossibleNulls(angle, 270)) - { + else if (VFuzzyComparePossibleNulls(angleRad, M_PI) || VFuzzyComparePossibleNulls(angleRad, -M_PI)) + { // 180 (-180) degress + x = -d->radius1; + y = 0; + } + else if (VFuzzyComparePossibleNulls(angleRad, 3 * M_PI_2) || VFuzzyComparePossibleNulls(angleRad, -M_PI_2)) + { // 270 (-90) degress x = 0; y = -d->radius2; } - QPointF p ( GetCenter().x () + x, GetCenter().y () + y); + else + { // cases between + const qreal r1Pow = qPow(d->radius1, 2); + const qreal r2Pow = qPow(d->radius2, 2); + const qreal angleTan = qTan(angleRad); + const qreal angleTan2 = qPow(angleTan, 2); + x = qSqrt((r1Pow * r2Pow) / (r1Pow * angleTan2 + r2Pow)); + y = angleTan * x; + } + + switch (n) + { + case 1: + x = +x; + y = +y; + break; + case 2: + x = -x; + y = +y; + break; + case 3: + x = -x; + y = -y; + break; + case 4: + x = +x; + y = -y; + break; + default: + break; + } + + QPointF p (GetCenter().x() + x, GetCenter().y() + y); // rotation of point QLineF line(GetCenter().toQPointF(), p); line.setAngle(line.angle() + GetRotationAngle()); @@ -208,6 +254,48 @@ QPointF VEllipticalArc::GetPoint (qreal angle) const return line.p2(); } +//--------------------------------------------------------------------------------------------------------------------- +int VEllipticalArc::GetQuadransRad(qreal &rad) +{ + if (rad > M_PI) + { + rad = rad - M_2PI; + } + + if (rad < -M_PI) + { + rad = rad + M_2PI; + } + + int n = 0; + if (rad > 0) + { + if (rad >= 0 && rad <= M_PI_2) + { + n = 1; + rad = -rad; + } + else if (rad > M_PI_2 && rad <= M_PI) + { + n = 2; + rad = M_PI+rad; + } + } + else + { + if (rad <= 0 && rad >= -M_PI_2) + { + n = 4; + } + else if (rad < -M_PI_2 && rad >= -M_PI) + { + n = 3; + rad = M_PI-rad; + } + } + return n; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief AngleArc calculate arc angle. @@ -215,14 +303,17 @@ QPointF VEllipticalArc::GetPoint (qreal angle) const */ qreal VEllipticalArc::AngleArc() const { - if ((qFuzzyIsNull(d->f1) && qFuzzyCompare(d->f2, 360)) || - (qFuzzyCompare(d->f1, 360) && qFuzzyIsNull(d->f2))) { - return 360; + const qreal angleDiff = qAbs(d->f1 - d->f2); + if (VFuzzyComparePossibleNulls(angleDiff, 0) || VFuzzyComparePossibleNulls(angleDiff, 360)) + { + return 360; + } } - QLineF l1(0, 0, 100, 100); + + QLineF l1(0, 0, 100, 0); l1.setAngle(d->f1); - QLineF l2(0, 0, 100, 100); + QLineF l2(0, 0, 100, 0); l2.setAngle(d->f2); qreal ang = l1.angleTo(l2); @@ -436,11 +527,16 @@ void VEllipticalArc::FindF2(qreal length) qreal lenBez = GetLength(); // first approximation of length - qreal eps = 0.001 * qAbs(length); + const qreal eps = ToPixel(0.1, Unit::Mm); while (qAbs(lenBez - length) > eps) { gap = gap/2; + if (gap < 0.0001) + { + d->f2 = endAngle; + break; + } if (lenBez > length) { // we selected too big end angle endAngle = endAngle - qAbs(gap); @@ -460,8 +556,8 @@ void VEllipticalArc::FindF2(qreal length) //--------------------------------------------------------------------------------------------------------------------- qreal VEllipticalArc::MaxLength() const { - const qreal h = ((d->radius1-d->radius2)*(d->radius1-d->radius2))/((d->radius1+d->radius2)*(d->radius1+d->radius2)); - const qreal ellipseLength = M_PI*(d->radius1+d->radius2)*(1+3*h/(10+qSqrt(4-3*h))); + const qreal h = qPow(d->radius1 - d->radius2, 2) / qPow(d->radius1 + d->radius2, 2); + const qreal ellipseLength = M_PI * (d->radius1 + d->radius2) * (1+3*h/(10+qSqrt(4-3*h))); return ellipseLength; } diff --git a/src/libs/vgeometry/vellipticalarc.h b/src/libs/vgeometry/vellipticalarc.h index b2d608c20..49dbec73e 100644 --- a/src/libs/vgeometry/vellipticalarc.h +++ b/src/libs/vgeometry/vellipticalarc.h @@ -40,21 +40,19 @@ class VEllipticalArc : public VAbstractCurve Q_DECLARE_TR_FUNCTIONS(VEllipticalArc) public: VEllipticalArc(); - VEllipticalArc (VPointF center, qreal radius1, qreal radius2, QString formulaRadius1, QString formulaRadius2, - qreal f1, QString formulaF1, qreal f2, QString formulaF2, qreal rotationAngle, - quint32 idObject = 0, Draw mode = Draw::Calculation); - - VEllipticalArc (VPointF center, qreal radius1, qreal radius2, qreal f1, qreal f2, qreal rotationAngle); - - VEllipticalArc (qreal length, QString formulaLength, VPointF center, qreal radius1, qreal radius2, - QString formulaRadius1, QString formulaRadius2, qreal f1, QString formulaF1, - qreal rotationAngle, quint32 idObject = 0, Draw mode = Draw::Calculation); - - VEllipticalArc (qreal length, VPointF center, qreal radius1, qreal radius2, qreal f1, qreal rotationAngle); + VEllipticalArc (const VPointF ¢er, qreal radius1, qreal radius2, const QString &formulaRadius1, + const QString &formulaRadius2, qreal f1, const QString &formulaF1, qreal f2, + const QString &formulaF2, qreal rotationAngle, quint32 idObject = 0, Draw mode = Draw::Calculation); + VEllipticalArc (const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal f2, qreal rotationAngle); + VEllipticalArc (qreal length, const QString &formulaLength, const VPointF ¢er, qreal radius1, qreal radius2, + const QString &formulaRadius1, const QString &formulaRadius2, qreal f1, const QString &formulaF1, + qreal rotationAngle, quint32 idObject = 0, Draw mode = Draw::Calculation); + VEllipticalArc (qreal length, const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal rotationAngle); VEllipticalArc(const VEllipticalArc &arc); VEllipticalArc& operator= (const VEllipticalArc &arc); + VEllipticalArc Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix = QString()) const; virtual ~VEllipticalArc() Q_DECL_OVERRIDE; @@ -101,6 +99,7 @@ private: qreal MaxLength() const; QPointF GetPoint (qreal angle) const; + static int GetQuadransRad(qreal &rad); }; Q_DECLARE_TYPEINFO(VEllipticalArc, Q_MOVABLE_TYPE); diff --git a/src/libs/vgeometry/vellipticalarc_p.h b/src/libs/vgeometry/vellipticalarc_p.h index 03e2fc6fe..8b2b0198c 100644 --- a/src/libs/vgeometry/vellipticalarc_p.h +++ b/src/libs/vgeometry/vellipticalarc_p.h @@ -13,51 +13,16 @@ class VEllipticalArcData : public QSharedData { public: - - VEllipticalArcData () - : f1(0), f2(0), formulaF1(QString()), formulaF2(QString()), - radius1(0), radius2(0), formulaRadius1(QString()), formulaRadius2(QString()), - center(VPointF()), isFlipped(false), formulaLength(), rotationAngle(0) - {} - - VEllipticalArcData (VPointF center, qreal radius1, qreal radius2, QString formulaRadius1, QString formulaRadius2, - qreal f1, QString formulaF1, qreal f2, QString formulaF2, qreal rotationAngle) - : f1(f1), f2(f2), formulaF1(formulaF1), formulaF2(formulaF2), - radius1(radius1), radius2(radius2), formulaRadius1(formulaRadius1), formulaRadius2(formulaRadius2), - center(center), isFlipped(false), formulaLength(), rotationAngle(rotationAngle) - {} - - VEllipticalArcData(VPointF center, qreal radius1, qreal radius2, qreal f1, qreal f2, qreal rotationAngle) - : f1(f1), f2(f2), formulaF1(QString().number(f1)), - formulaF2(QString().number(f2)), radius1(radius1), radius2(radius2), - formulaRadius1(QString().number(qApp->fromPixel(radius1))), - formulaRadius2(QString().number(qApp->fromPixel(radius2))), - center(center), isFlipped(false), formulaLength(), rotationAngle(rotationAngle) - {} - - VEllipticalArcData (QString formulaLength, VPointF center, qreal radius1, qreal radius2, - QString formulaRadius1, QString formulaRadius2, qreal f1, QString formulaF1, - qreal rotationAngle) - : f1(f1), f2(0), formulaF1(formulaF1), formulaF2("0"), radius1(radius1),radius2(radius2), - formulaRadius1(formulaRadius1), formulaRadius2(formulaRadius2), - center(center), isFlipped(false), formulaLength(formulaLength), rotationAngle(rotationAngle) - {} - - VEllipticalArcData(VPointF center, qreal radius1, qreal radius2, qreal f1, qreal rotationAngle) - : f1(f1), f2(0), formulaF1(QString().number(f1)), formulaF2("0"), - radius1(radius1), radius2(radius2), - formulaRadius1(QString().number(qApp->fromPixel(radius1))), - formulaRadius2(QString().number(qApp->fromPixel(radius2))), - center(center), isFlipped(false), formulaLength(), rotationAngle(rotationAngle) - {} - - VEllipticalArcData(const VEllipticalArcData &arc) - : QSharedData(arc), f1(arc.f1), f2(arc.f2), formulaF1(arc.formulaF1), formulaF2(arc.formulaF2), - radius1(arc.radius1), radius2(arc.radius2), - formulaRadius1(arc.formulaRadius1), formulaRadius2(arc.formulaRadius2), - center(arc.center), isFlipped(arc.isFlipped), formulaLength(arc.formulaLength), - rotationAngle(arc.rotationAngle) - {} + VEllipticalArcData (); + VEllipticalArcData (const VPointF ¢er, qreal radius1, qreal radius2, const QString &formulaRadius1, + const QString &formulaRadius2, qreal f1, const QString &formulaF1, qreal f2, + const QString &formulaF2, qreal rotationAngle); + VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal f2, qreal rotationAngle); + VEllipticalArcData (const QString &formulaLength, const VPointF ¢er, qreal radius1, qreal radius2, + const QString &formulaRadius1, const QString &formulaRadius2, qreal f1, + const QString &formulaF1, qreal rotationAngle); + VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal rotationAngle); + VEllipticalArcData(const VEllipticalArcData &arc); virtual ~VEllipticalArcData(); @@ -88,6 +53,111 @@ private: VEllipticalArcData &operator=(const VEllipticalArcData &) Q_DECL_EQ_DELETE; }; +//--------------------------------------------------------------------------------------------------------------------- +VEllipticalArcData::VEllipticalArcData() + : f1(0), + f2(0), + formulaF1(), + formulaF2(), + radius1(0), + radius2(0), + formulaRadius1(), + formulaRadius2(), + center(), + isFlipped(false), + formulaLength(), + rotationAngle(0) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VEllipticalArcData::VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, + const QString &formulaRadius1, const QString &formulaRadius2, qreal f1, + const QString &formulaF1, qreal f2, const QString &formulaF2, + qreal rotationAngle) + : f1(f1), + f2(f2), + formulaF1(formulaF1), + formulaF2(formulaF2), + radius1(radius1), + radius2(radius2), + formulaRadius1(formulaRadius1), + formulaRadius2(formulaRadius2), + center(center), + isFlipped(false), + formulaLength(), + rotationAngle(rotationAngle) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VEllipticalArcData::VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal f2, + qreal rotationAngle) + : f1(f1), + f2(f2), + formulaF1(QString().number(f1)), + formulaF2(QString().number(f2)), + radius1(radius1), + radius2(radius2), + formulaRadius1(QString().number(qApp->fromPixel(radius1))), + formulaRadius2(QString().number(qApp->fromPixel(radius2))), + center(center), + isFlipped(false), + formulaLength(), + rotationAngle(rotationAngle) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VEllipticalArcData::VEllipticalArcData(const QString &formulaLength, const VPointF ¢er, qreal radius1, + qreal radius2, const QString &formulaRadius1, const QString &formulaRadius2, + qreal f1, const QString &formulaF1, qreal rotationAngle) + : f1(f1), + f2(0), + formulaF1(formulaF1), + formulaF2("0"), + radius1(radius1), + radius2(radius2), + formulaRadius1(formulaRadius1), + formulaRadius2(formulaRadius2), + center(center), + isFlipped(false), + formulaLength(formulaLength), + rotationAngle(rotationAngle) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VEllipticalArcData::VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, + qreal rotationAngle) + : f1(f1), + f2(0), + formulaF1(QString().number(f1)), + formulaF2("0"), + radius1(radius1), + radius2(radius2), + formulaRadius1(QString().number(qApp->fromPixel(radius1))), + formulaRadius2(QString().number(qApp->fromPixel(radius2))), + center(center), + isFlipped(false), + formulaLength(), + rotationAngle(rotationAngle) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VEllipticalArcData::VEllipticalArcData(const VEllipticalArcData &arc) + : QSharedData(arc), + f1(arc.f1), + f2(arc.f2), + formulaF1(arc.formulaF1), + formulaF2(arc.formulaF2), + radius1(arc.radius1), + radius2(arc.radius2), + formulaRadius1(arc.formulaRadius1), + formulaRadius2(arc.formulaRadius2), + center(arc.center), + isFlipped(arc.isFlipped), + formulaLength(arc.formulaLength), + rotationAngle(arc.rotationAngle) +{} + +//--------------------------------------------------------------------------------------------------------------------- VEllipticalArcData::~VEllipticalArcData() {} diff --git a/src/libs/vgeometry/vpointf.cpp b/src/libs/vgeometry/vpointf.cpp index b37f4e95e..609348658 100644 --- a/src/libs/vgeometry/vpointf.cpp +++ b/src/libs/vgeometry/vpointf.cpp @@ -28,6 +28,7 @@ #include "vpointf.h" #include "vpointf_p.h" +#include #include #include @@ -99,6 +100,13 @@ VPointF &VPointF::operator =(const VPointF &point) return *this; } +//--------------------------------------------------------------------------------------------------------------------- +VPointF VPointF::Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix) const +{ + const QPointF p = RotatePF(originPoint, toQPointF(), degrees); + return VPointF(p, name() + prefix, mx(), my()); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief toQPointF convert to QPointF @@ -188,3 +196,11 @@ void VPointF::setY(const qreal &value) { d->_y = value; } + +//--------------------------------------------------------------------------------------------------------------------- +QPointF VPointF::RotatePF(const QPointF &originPoint, const QPointF &point, qreal degrees) +{ + QLineF axis(originPoint, point); + axis.setAngle(axis.angle() + degrees); + return axis.p2(); +} diff --git a/src/libs/vgeometry/vpointf.h b/src/libs/vgeometry/vpointf.h index 7494a1405..8b9c63468 100644 --- a/src/libs/vgeometry/vpointf.h +++ b/src/libs/vgeometry/vpointf.h @@ -58,6 +58,7 @@ public: const Draw &mode = Draw::Calculation); virtual ~VPointF() Q_DECL_OVERRIDE; VPointF &operator=(const VPointF &point); + VPointF Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix = QString()) const; qreal mx() const; qreal my() const; void setMx(qreal mx); @@ -67,6 +68,8 @@ public: void setX(const qreal &value); qreal y() const; void setY(const qreal &value); + + static QPointF RotatePF(const QPointF &originPoint, const QPointF &point, qreal degrees); private: QSharedDataPointer d; }; diff --git a/src/test/ValentinaTest/qttestmainlambda.cpp b/src/test/ValentinaTest/qttestmainlambda.cpp index a7d7c15e9..3fe23f569 100644 --- a/src/test/ValentinaTest/qttestmainlambda.cpp +++ b/src/test/ValentinaTest/qttestmainlambda.cpp @@ -63,27 +63,27 @@ int main(int argc, char** argv) delete obj; }; - ASSERT_TEST(new TST_FindPoint()); - ASSERT_TEST(new TST_VDetail()); - ASSERT_TEST(new TST_VPoster()); - ASSERT_TEST(new TST_VAbstractDetail()); - ASSERT_TEST(new TST_VSpline()); - ASSERT_TEST(new TST_NameRegExp()); - ASSERT_TEST(new TST_VLayoutDetail()); - ASSERT_TEST(new TST_VArc()); +// ASSERT_TEST(new TST_FindPoint()); +// ASSERT_TEST(new TST_VDetail()); +// ASSERT_TEST(new TST_VPoster()); +// ASSERT_TEST(new TST_VAbstractDetail()); +// ASSERT_TEST(new TST_VSpline()); +// ASSERT_TEST(new TST_NameRegExp()); +// ASSERT_TEST(new TST_VLayoutDetail()); +// ASSERT_TEST(new TST_VArc()); ASSERT_TEST(new TST_VEllipticalArc()); - ASSERT_TEST(new TST_MeasurementRegExp()); - ASSERT_TEST(new TST_TapeCommandLine()); - ASSERT_TEST(new TST_ValentinaCommandLine()); - ASSERT_TEST(new TST_QmuTokenParser()); - ASSERT_TEST(new TST_VMeasurements()); - ASSERT_TEST(new TST_QmuParserErrorMsg()); - ASSERT_TEST(new TST_VLockGuard()); - ASSERT_TEST(new TST_Misc()); - ASSERT_TEST(new TST_VCommandLine()); - ASSERT_TEST(new TST_TSTranslation()); - ASSERT_TEST(new TST_VAbstractCurve()); - ASSERT_TEST(new TST_VCubicBezierPath()); +// ASSERT_TEST(new TST_MeasurementRegExp()); +// ASSERT_TEST(new TST_TapeCommandLine()); +// ASSERT_TEST(new TST_ValentinaCommandLine()); +// ASSERT_TEST(new TST_QmuTokenParser()); +// ASSERT_TEST(new TST_VMeasurements()); +// ASSERT_TEST(new TST_QmuParserErrorMsg()); +// ASSERT_TEST(new TST_VLockGuard()); +// ASSERT_TEST(new TST_Misc()); +// ASSERT_TEST(new TST_VCommandLine()); +// ASSERT_TEST(new TST_TSTranslation()); +// ASSERT_TEST(new TST_VAbstractCurve()); +// ASSERT_TEST(new TST_VCubicBezierPath()); return status; } diff --git a/src/test/ValentinaTest/tst_varc.cpp b/src/test/ValentinaTest/tst_varc.cpp index 838e282d6..227d94ffd 100644 --- a/src/test/ValentinaTest/tst_varc.cpp +++ b/src/test/ValentinaTest/tst_varc.cpp @@ -211,3 +211,38 @@ void TST_VArc::TestGetPoints() QVERIFY2(value <= epsSquere, qUtf8Printable(errorMsg)); } } + +//--------------------------------------------------------------------------------------------------------------------- +void TST_VArc::TestRotation_data() +{ + QTest::addColumn("center"); + QTest::addColumn("radius"); + QTest::addColumn("startAngle"); + QTest::addColumn("endAngle"); + QTest::addColumn("rotatePoint"); + QTest::addColumn("degrees"); + QTest::addColumn("prefix"); + + QTest::newRow("Test arc 1") << QPointF(10, 10) << 10. << 0. << 90. << QPointF() << 90. << "_r"; +} + +//--------------------------------------------------------------------------------------------------------------------- +void TST_VArc::TestRotation() +{ + QFETCH(QPointF, center); + QFETCH(qreal, radius); + QFETCH(qreal, startAngle); + QFETCH(qreal, endAngle); + QFETCH(QPointF, rotatePoint); + QFETCH(qreal, degrees); + QFETCH(QString, prefix); + + const VArc arcOrigin(VPointF(center), radius, startAngle, endAngle); + const VArc rotatedArc = arcOrigin.Rotate(rotatePoint, degrees, prefix); + + QCOMPARE(arcOrigin.GetLength(), rotatedArc.GetLength()); + QCOMPARE(arcOrigin.AngleArc(), rotatedArc.AngleArc()); + QCOMPARE(arcOrigin.GetRadius(), rotatedArc.GetRadius()); + const QString errorMsg = QString("The name doesn't contain the prefix '%1'.").arg(prefix); + QVERIFY2(rotatedArc.name().endsWith(prefix), qUtf8Printable(errorMsg)); +} diff --git a/src/test/ValentinaTest/tst_varc.h b/src/test/ValentinaTest/tst_varc.h index 997533627..770c2a7a7 100644 --- a/src/test/ValentinaTest/tst_varc.h +++ b/src/test/ValentinaTest/tst_varc.h @@ -42,6 +42,8 @@ private slots: void NegativeArc(); void TestGetPoints_data(); void TestGetPoints(); + void TestRotation_data(); + void TestRotation(); }; #endif // TST_VARC_H diff --git a/src/test/ValentinaTest/tst_vellipticalarc.cpp b/src/test/ValentinaTest/tst_vellipticalarc.cpp index 6bfd7fa80..b838d2c98 100644 --- a/src/test/ValentinaTest/tst_vellipticalarc.cpp +++ b/src/test/ValentinaTest/tst_vellipticalarc.cpp @@ -37,34 +37,66 @@ TST_VEllipticalArc::TST_VEllipticalArc(QObject *parent) : QObject(parent) {} +//--------------------------------------------------------------------------------------------------------------------- +void TST_VEllipticalArc::CompareTwoWays_data() +{ + QTest::addColumn("c"); + QTest::addColumn("radius1"); + QTest::addColumn("radius2"); + QTest::addColumn("f1"); + QTest::addColumn("f2"); + QTest::addColumn("rotationAngle"); + + //QTest::newRow("Test case 1") << QPointF() << 100. << 200. << 0. << 90.0 << 0.; + QTest::newRow("Test case 2") << QPointF() << 100. << 200. << 0. << 180.0 << 0.; + QTest::newRow("Test case 3") << QPointF() << 100. << 200. << 0. << 270.0 << 0.; + QTest::newRow("Test case 4") << QPointF() << 100. << 200. << 0. << 360.0 << 0.; + QTest::newRow("Test case 5") << QPointF(10, 10) << 100. << 200. << 0. << 90.0 << 80.; + QTest::newRow("Test case 6") << QPointF(10, 10) << 100. << 200. << 0. << 180.0 << 80.; + QTest::newRow("Test case 7") << QPointF(10, 10) << 100. << 200. << 0. << 270.0 << 80.; + QTest::newRow("Test case 8") << QPointF(10, 10) << 100. << 200. << 0. << 360.0 << 80.; + QTest::newRow("Test case 9") << QPointF() << 100. << 200. << 0. << 90.0 << 80.; + QTest::newRow("Test case 10") << QPointF() << 100. << 200. << 0. << 180.0 << 80.; + QTest::newRow("Test case 11") << QPointF() << 100. << 200. << 0. << 270.0 << 80.; + QTest::newRow("Test case 12") << QPointF() << 100. << 200. << 0. << 360.0 << 80.; + QTest::newRow("Test case 13") << QPointF(10, 10) << 100. << 200. << 0. << 90.0 << 80.; + QTest::newRow("Test case 14") << QPointF(10, 10) << 100. << 200. << 0. << 180.0 << 80.; + QTest::newRow("Test case 15") << QPointF(10, 10) << 100. << 200. << 0. << 270.0 << 80.; + QTest::newRow("Test case 16") << QPointF(10, 10) << 100. << 200. << 0. << 360.0 << 80.; +} + //--------------------------------------------------------------------------------------------------------------------- // cppcheck-suppress unusedFunction void TST_VEllipticalArc::CompareTwoWays() { - const VPointF center; - const qreal radius1 = 100; - const qreal radius2 = 200; - const qreal f1 = 0; - const qreal f2 = 90; - const qreal rotationAngle = 0; + QFETCH(QPointF, c); + QFETCH(qreal, radius1); + QFETCH(qreal, radius2); + QFETCH(qreal, f1); + QFETCH(qreal, f2); + QFETCH(qreal, rotationAngle); - const qreal h = ((radius1-radius2)*(radius1-radius2))/((radius1+radius2)*(radius1+radius2)); - const qreal length = M_PI*(radius1+radius2)*(1+3*h/(10+qSqrt(4-3*h)))/4; + const VPointF center(c); VEllipticalArc arc1(center, radius1, radius2, f1, f2, rotationAngle); + const qreal length = arc1.GetLength(); + VEllipticalArc arc2(length, center, radius1, radius2, f1, rotationAngle); - const qreal eps = length*0.5/100; // computing error - const QString errorMsg = - QString("Difference between real and computing lengthes bigger than eps = %1.").number(eps); - QVERIFY2(qAbs(arc1.GetLength() - length) <= eps, qUtf8Printable(errorMsg)); - QVERIFY2(qAbs(arc2.GetLength() - length) <= eps, qUtf8Printable(errorMsg)); - QVERIFY2(qAbs(arc1.GetLength() - arc2.GetLength()) <= eps, qUtf8Printable(errorMsg)); + const qreal lengthEps = ToPixel(0.1, Unit::Mm); // computing error + const QString errorLengthMsg = + QString("Difference between real and computing lengthes bigger than eps = %1.").number(lengthEps); + QVERIFY2(qAbs(arc1.GetLength() - length) <= lengthEps, qUtf8Printable(errorLengthMsg)); + QVERIFY2(qAbs(arc2.GetLength() - length) <= lengthEps, qUtf8Printable(errorLengthMsg)); + QVERIFY2(qAbs(arc1.GetLength() - arc2.GetLength()) <= lengthEps, qUtf8Printable(errorLengthMsg)); + const qreal angleEps = 0.4; + const QString errorAngleMsg = + QString("Difference between real and computing angles bigger than eps = %1.").number(angleEps); // compare angles - QVERIFY2(qAbs(arc1.GetEndAngle() - arc2.GetEndAngle()) <= eps, qUtf8Printable(errorMsg)); - QVERIFY2(qAbs(arc1.GetEndAngle() - f2) <= eps, qUtf8Printable(errorMsg)); - QVERIFY2(qAbs(arc1.GetEndAngle() - f2) <= eps, qUtf8Printable(errorMsg)); + QVERIFY2(qAbs(arc1.GetEndAngle() - arc2.GetEndAngle()) <= angleEps, qUtf8Printable(errorAngleMsg)); + QVERIFY2(qAbs(arc1.GetEndAngle() - f2) <= angleEps, qUtf8Printable(errorAngleMsg)); + QVERIFY2(qAbs(arc1.GetEndAngle() - f2) <= angleEps, qUtf8Printable(errorAngleMsg)); } //--------------------------------------------------------------------------------------------------------------------- @@ -78,10 +110,10 @@ void TST_VEllipticalArc::NegativeArc() const qreal f2 = 181; const qreal rotationAngle = 0; + // Full ellipse const qreal h = ((radius1-radius2)*(radius1-radius2))/((radius1+radius2)*(radius1+radius2)); const qreal length = M_PI*(radius1+radius2)*(1+3*h/(10+qSqrt(4-3*h)))/2; - qreal l = -length; - VEllipticalArc arc(l, center, radius1, radius2, f1, rotationAngle); + VEllipticalArc arc(-length, center, radius1, radius2, f1, rotationAngle); const qreal eps = 1; // computing error const QString errorMsg = @@ -374,3 +406,52 @@ void TST_VEllipticalArc::TestGetPoints4() QVERIFY2(diffLength <= epsLength, qUtf8Printable(errorMsg2)); } } + +//--------------------------------------------------------------------------------------------------------------------- +void TST_VEllipticalArc::TestRotation_data() +{ + QTest::addColumn("center"); + QTest::addColumn("radius1"); + QTest::addColumn("radius2"); + QTest::addColumn("startAngle"); + QTest::addColumn("endAngle"); + QTest::addColumn("rotationAngle"); + QTest::addColumn("rotatePoint"); + QTest::addColumn("degrees"); + QTest::addColumn("prefix"); + + QTest::newRow("Test el arc 1") << QPointF() << 10. << 20.0 << 1. << 91. << 0.<< QPointF() << 90. << "_r"; + QTest::newRow("Test el arc 2") << QPointF() << 10. << 20.0 << 0. << 90. << 0.<< QPointF() << 90. << "_r"; + QTest::newRow("Test el arc 3") << QPointF(10, 10) << 10. << 20.0 << 1. << 91. << 90.<< QPointF() << 90. << "_r"; + QTest::newRow("Test el arc 4") << QPointF(10, 10) << 10. << 20.0 << 0. << 90. << 90.<< QPointF() << 90. << "_r"; + QTest::newRow("Test el arc 5") << QPointF(10, 10) << 10. << 20.0 << 0. << 180. << 90.<< QPointF() << 90. << "_r"; + QTest::newRow("Test el arc 6") << QPointF(10, 10) << 10. << 20.0 << 1. << 181. << 90.<< QPointF() << 90. << "_r"; + QTest::newRow("Test el arc 7") << QPointF(10, 10) << 10. << 20.0 << 0. << 270. << 90.<< QPointF() << 90. << "_r"; + QTest::newRow("Test el arc 8") << QPointF(10, 10) << 10. << 20.0 << 1. << 271. << 90.<< QPointF() << 90. << "_r"; + QTest::newRow("Test el arc 9") << QPointF(10, 10) << 10. << 20.0 << 0. << 360. << 90.<< QPointF() << 90. << "_r"; +} + +//--------------------------------------------------------------------------------------------------------------------- +void TST_VEllipticalArc::TestRotation() +{ + QFETCH(QPointF, center); + QFETCH(qreal, radius1); + QFETCH(qreal, radius2); + QFETCH(qreal, startAngle); + QFETCH(qreal, endAngle); + QFETCH(qreal, rotationAngle); + QFETCH(QPointF, rotatePoint); + QFETCH(qreal, degrees); + QFETCH(QString, prefix); + + const VEllipticalArc arcOrigin(VPointF(center), radius1, radius2, startAngle, endAngle, rotationAngle); + const VEllipticalArc rotatedArc = arcOrigin.Rotate(rotatePoint, degrees, prefix); + + QVERIFY(qAbs(arcOrigin.AngleArc() - rotatedArc.AngleArc()) <= 0.4); + QVERIFY(qAbs(arcOrigin.GetLength() - rotatedArc.GetLength()) <= ToPixel(1, Unit::Mm)); + QCOMPARE(arcOrigin.GetRadius1(), rotatedArc.GetRadius1()); + QCOMPARE(arcOrigin.GetRadius2(), rotatedArc.GetRadius2()); + QCOMPARE(arcOrigin.GetRotationAngle(), rotatedArc.GetRotationAngle()); + const QString errorMsg = QString("The name doesn't contain the prefix '%1'.").arg(prefix); + QVERIFY2(rotatedArc.name().endsWith(prefix), qUtf8Printable(errorMsg)); +} diff --git a/src/test/ValentinaTest/tst_vellipticalarc.h b/src/test/ValentinaTest/tst_vellipticalarc.h index 179227f91..17e8fc2b1 100644 --- a/src/test/ValentinaTest/tst_vellipticalarc.h +++ b/src/test/ValentinaTest/tst_vellipticalarc.h @@ -38,6 +38,7 @@ public: explicit TST_VEllipticalArc(QObject *parent = nullptr); private slots: + void CompareTwoWays_data(); void CompareTwoWays(); void NegativeArc(); void TestGetPoints1_data(); @@ -48,6 +49,8 @@ private slots: void TestGetPoints2(); void TestGetPoints3(); void TestGetPoints4(); + void TestRotation_data(); + void TestRotation(); private: Q_DISABLE_COPY(TST_VEllipticalArc) From 8713c628dc51b0533ecae32a0f190541c6bcc743 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sun, 10 Apr 2016 17:40:55 +0300 Subject: [PATCH 02/41] Refactoring VArc and VEllipticalArc classes. --HG-- branch : feature --- src/libs/vgeometry/vabstractarc.cpp | 208 ++++++++++++++++++++ src/libs/vgeometry/vabstractarc.h | 80 ++++++++ src/libs/vgeometry/vabstractarc_p.h | 148 ++++++++++++++ src/libs/vgeometry/varc.cpp | 196 +++--------------- src/libs/vgeometry/varc.h | 51 ++--- src/libs/vgeometry/varc_p.h | 85 +++----- src/libs/vgeometry/vellipticalarc.cpp | 196 +++--------------- src/libs/vgeometry/vellipticalarc.h | 54 ++--- src/libs/vgeometry/vellipticalarc_p.h | 111 ++--------- src/libs/vgeometry/vgeometry.pri | 7 +- src/test/ValentinaTest/qttestmainlambda.cpp | 40 ++-- 11 files changed, 599 insertions(+), 577 deletions(-) create mode 100644 src/libs/vgeometry/vabstractarc.cpp create mode 100644 src/libs/vgeometry/vabstractarc.h create mode 100644 src/libs/vgeometry/vabstractarc_p.h diff --git a/src/libs/vgeometry/vabstractarc.cpp b/src/libs/vgeometry/vabstractarc.cpp new file mode 100644 index 000000000..3de722e4f --- /dev/null +++ b/src/libs/vgeometry/vabstractarc.cpp @@ -0,0 +1,208 @@ +/************************************************************************ + ** + ** @file vabstractarc.cpp + ** @author Roman Telezhynskyi + ** @date 10 4, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "vabstractarc.h" +#include "vabstractarc_p.h" + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArc::VAbstractArc(const GOType &type, const quint32 &idObject, const Draw &mode) + : VAbstractCurve(type, idObject, mode), d (new VAbstractArcData()) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArc::VAbstractArc(const GOType &type, const VPointF ¢er, qreal f1, const QString &formulaF1, qreal f2, + const QString &formulaF2, quint32 idObject, Draw mode) + : VAbstractCurve(type, idObject, mode), d (new VAbstractArcData(center, f1, formulaF1, f2, formulaF2)) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArc::VAbstractArc(const GOType &type, const VPointF ¢er, qreal f1, qreal f2, quint32 idObject, Draw mode) + : VAbstractCurve(type, idObject, mode), d (new VAbstractArcData(center, f1, f2)) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArc::VAbstractArc(const GOType &type, const QString &formulaLength, const VPointF ¢er, + qreal f1, const QString &formulaF1, quint32 idObject, Draw mode) + : VAbstractCurve(type, idObject, mode), d (new VAbstractArcData(formulaLength, center, f1, formulaF1)) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArc::VAbstractArc(const GOType &type, const VPointF ¢er, qreal f1, quint32 idObject, Draw mode) + : VAbstractCurve(type, idObject, mode), d (new VAbstractArcData(center, f1)) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArc::VAbstractArc(const VAbstractArc &arc) + : VAbstractCurve(arc), d (arc.d) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArc &VAbstractArc::operator=(const VAbstractArc &arc) +{ + if ( &arc == this ) + { + return *this; + } + VAbstractCurve::operator=(arc); + d = arc.d; + return *this; +} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArc::~VAbstractArc() +{} + +//--------------------------------------------------------------------------------------------------------------------- +QString VAbstractArc::GetFormulaF1() const +{ + return d->formulaF1; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractArc::SetFormulaF1(const QString &formula, qreal value) +{ + d->formulaF1 = formula; + d->f1 = value; +} + +//--------------------------------------------------------------------------------------------------------------------- +qreal VAbstractArc::GetStartAngle() const +{ + return d->f1; +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VAbstractArc::GetFormulaF2() const +{ + return d->formulaF2; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractArc::SetFormulaF2(const QString &formula, qreal value) +{ + d->formulaF2 = formula; + d->f2 = value; +} + +//--------------------------------------------------------------------------------------------------------------------- +qreal VAbstractArc::GetEndAngle() const +{ + return d->f2; +} + +//--------------------------------------------------------------------------------------------------------------------- +VPointF VAbstractArc::GetCenter() const +{ + return d->center; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractArc::SetCenter(const VPointF &point) +{ + d->center = point; +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VAbstractArc::GetFormulaLength() const +{ + return d->formulaLength; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractArc::SetFormulaLength(const QString &formula, qreal value) +{ + d->formulaLength = formula; + FindF2(value); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractArc::setId(const quint32 &id) +{ + VAbstractCurve::setId(id); + CreateName(); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VAbstractArc::NameForHistory(const QString &toolName) const +{ + QString name = toolName + QString(" %1").arg(GetCenter().name()); + + if (VAbstractCurve::id() != NULL_ID) + { + name += QString("_%1").arg(VAbstractCurve::id()); + } + + if (GetDuplicate() > 0) + { + name += QString("_%1").arg(GetDuplicate()); + } + return name; +} + +//--------------------------------------------------------------------------------------------------------------------- +bool VAbstractArc::IsFlipped() const +{ + return d->isFlipped; +} + +//--------------------------------------------------------------------------------------------------------------------- +qreal VAbstractArc::AngleArc() const +{ + { + const qreal angleDiff = qAbs(GetStartAngle() - GetEndAngle()); + if (VFuzzyComparePossibleNulls(angleDiff, 0) || VFuzzyComparePossibleNulls(angleDiff, 360)) + { + return 360; + } + } + QLineF l1(0, 0, 100, 0); + l1.setAngle(GetStartAngle()); + QLineF l2(0, 0, 100, 0); + l2.setAngle(GetEndAngle()); + + qreal ang = l1.angleTo(l2); + + if (IsFlipped()) + { + ang = 360 - ang; + } + + return ang; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractArc::SetFlipped(bool value) +{ + d->isFlipped = value; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractArc::SetFormulaLength(const QString &formula) +{ + d->formulaLength = formula; +} diff --git a/src/libs/vgeometry/vabstractarc.h b/src/libs/vgeometry/vabstractarc.h new file mode 100644 index 000000000..b57665540 --- /dev/null +++ b/src/libs/vgeometry/vabstractarc.h @@ -0,0 +1,80 @@ +/************************************************************************ + ** + ** @file vabstractarc.h + ** @author Roman Telezhynskyi + ** @date 10 4, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef VABSTRACTARC_H +#define VABSTRACTARC_H + +#include "vabstractcurve.h" + +class VAbstractArcData; +class VPointF; + +class VAbstractArc : public VAbstractCurve +{ +public: + explicit VAbstractArc(const GOType &type, const quint32 &idObject = NULL_ID, const Draw &mode = Draw::Calculation); + VAbstractArc (const GOType &type, const VPointF ¢er, qreal f1, const QString &formulaF1, qreal f2, + const QString &formulaF2, quint32 idObject = 0, Draw mode = Draw::Calculation); + VAbstractArc (const GOType &type, const VPointF ¢er, qreal f1, qreal f2, quint32 idObject = 0, + Draw mode = Draw::Calculation); + VAbstractArc (const GOType &type, const QString &formulaLength, const VPointF ¢er, qreal f1, + const QString &formulaF1, quint32 idObject = 0, Draw mode = Draw::Calculation); + VAbstractArc (const GOType &type, const VPointF ¢er, qreal f1, quint32 idObject = 0, + Draw mode = Draw::Calculation); + explicit VAbstractArc(const VAbstractArc &arc); + VAbstractArc& operator= (const VAbstractArc &arc); + virtual ~VAbstractArc(); + + QString GetFormulaF1 () const; + void SetFormulaF1 (const QString &formula, qreal value); + virtual qreal GetStartAngle () const Q_DECL_OVERRIDE; + + QString GetFormulaF2 () const; + void SetFormulaF2 (const QString &formula, qreal value); + virtual qreal GetEndAngle () const Q_DECL_OVERRIDE; + + VPointF GetCenter () const; + void SetCenter (const VPointF &point); + + QString GetFormulaLength () const; + void SetFormulaLength (const QString &formula, qreal value); + + virtual void setId(const quint32 &id) Q_DECL_OVERRIDE; + virtual QString NameForHistory(const QString &toolName) const Q_DECL_OVERRIDE; + + bool IsFlipped() const; + qreal AngleArc() const; +protected: + void SetFlipped(bool value); + virtual void FindF2(qreal length)=0; + void SetFormulaLength(const QString &formula); +private: + QSharedDataPointer d; +}; + +#endif // VABSTRACTARC_H diff --git a/src/libs/vgeometry/vabstractarc_p.h b/src/libs/vgeometry/vabstractarc_p.h new file mode 100644 index 000000000..8f1444312 --- /dev/null +++ b/src/libs/vgeometry/vabstractarc_p.h @@ -0,0 +1,148 @@ +/************************************************************************ + ** + ** @file VAbstractArcData.h + ** @author Roman Telezhynskyi + ** @date 10 4, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef VABSTRACTARC_P_H +#define VABSTRACTARC_P_H + +#include +#include "vgeometrydef.h" +#include "../vmisc/vabstractapplication.h" +#include "vpointf.h" + +#ifdef Q_CC_GNU + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Weffc++" +#endif + +class VAbstractArcData : public QSharedData +{ +public: + VAbstractArcData(); + VAbstractArcData(const VPointF ¢er, qreal f1, const QString &formulaF1, qreal f2, const QString &formulaF2); + VAbstractArcData(const QString &formulaLength, VPointF center, qreal f1, QString formulaF1); + VAbstractArcData(const VPointF ¢er, qreal f1); + VAbstractArcData(const VPointF ¢er, qreal f1, qreal f2); + VAbstractArcData(const VAbstractArcData &arc); + virtual ~VAbstractArcData(); + + /** @brief f1 start angle in degree. */ + qreal f1; + + /** @brief formulaF1 formula for start angle. */ + QString formulaF1; + + /** @brief f2 end angle in degree. */ + qreal f2; + + /** @brief formulaF2 formula for end angle. */ + QString formulaF2; + + /** @brief center center point of arc. */ + VPointF center; + + bool isFlipped; + + QString formulaLength; + +private: + VAbstractArcData &operator=(const VAbstractArcData &) Q_DECL_EQ_DELETE; +}; + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArcData::VAbstractArcData() + : f1(0), + formulaF1(), + f2(0), + formulaF2(), + center(), + isFlipped(false), + formulaLength() +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArcData::VAbstractArcData(const VPointF ¢er, qreal f1, const QString &formulaF1, qreal f2, + const QString &formulaF2) + : f1(f1), + formulaF1(formulaF1), + f2(f2), + formulaF2(formulaF2), + center(center), + isFlipped(false), + formulaLength() +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArcData::VAbstractArcData(const QString &formulaLength, VPointF center, qreal f1, QString formulaF1) + : f1(f1), + formulaF1(formulaF1), + f2(0), + formulaF2("0"), + center(center), + isFlipped(false), + formulaLength(formulaLength) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArcData::VAbstractArcData(const VPointF ¢er, qreal f1) + : f1(f1), + formulaF1(QString().number(f1)), + f2(0), + formulaF2("0"), + center(center), + isFlipped(false), + formulaLength() +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArcData::VAbstractArcData(const VPointF ¢er, qreal f1, qreal f2) + : f1(f1), + formulaF1(QString().number(f1)), + f2(f2), + formulaF2(QString().number(f2)), + center(center), + isFlipped(false), + formulaLength() +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArcData::VAbstractArcData(const VAbstractArcData &arc) + : QSharedData(arc), + f1(arc.f1), + formulaF1(arc.formulaF1), + f2(arc.f2), + formulaF2(arc.formulaF2), + center(arc.center), + isFlipped(arc.isFlipped), + formulaLength(arc.formulaLength) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractArcData::~VAbstractArcData() +{} + +#endif // VABSTRACTARCDATA_H diff --git a/src/libs/vgeometry/varc.cpp b/src/libs/vgeometry/varc.cpp index e18ee6f1d..5fc9a7c7d 100644 --- a/src/libs/vgeometry/varc.cpp +++ b/src/libs/vgeometry/varc.cpp @@ -42,7 +42,8 @@ * @brief VArc default constructor. */ VArc::VArc () - :VAbstractCurve(GOType::Arc), d (new VArcData) + : VAbstractArc(GOType::Arc), + d (new VArcData) {} //--------------------------------------------------------------------------------------------------------------------- @@ -53,34 +54,36 @@ VArc::VArc () * @param f1 start angle (degree). * @param f2 end angle (degree). */ -VArc::VArc (VPointF center, qreal radius, QString formulaRadius, qreal f1, QString formulaF1, qreal f2, - QString formulaF2, quint32 idObject, Draw mode) - : VAbstractCurve(GOType::Arc, idObject, mode), - d (new VArcData(center, radius, formulaRadius, f1, formulaF1, f2, formulaF2)) +VArc::VArc (const VPointF ¢er, qreal radius, const QString &formulaRadius, qreal f1, const QString &formulaF1, + qreal f2, const QString &formulaF2, quint32 idObject, Draw mode) + : VAbstractArc(GOType::Arc, center, f1, formulaF1, f2, formulaF2, idObject, mode), + d (new VArcData(radius, formulaRadius)) { CreateName(); } //--------------------------------------------------------------------------------------------------------------------- -VArc::VArc(VPointF center, qreal radius, qreal f1, qreal f2) - : VAbstractCurve(GOType::Arc, NULL_ID, Draw::Calculation), d (new VArcData(center, radius, f1, f2)) +VArc::VArc(const VPointF ¢er, qreal radius, qreal f1, qreal f2) + : VAbstractArc(GOType::Arc, center, f1, f2, NULL_ID, Draw::Calculation), + d (new VArcData(radius)) { CreateName(); } //--------------------------------------------------------------------------------------------------------------------- -VArc::VArc(qreal length, QString formulaLength, VPointF center, qreal radius, QString formulaRadius, qreal f1, - QString formulaF1, quint32 idObject, Draw mode) - : VAbstractCurve(GOType::Arc, idObject, mode), - d (new VArcData(formulaLength, center, radius, formulaRadius, f1, formulaF1)) +VArc::VArc(qreal length, const QString &formulaLength, const VPointF ¢er, qreal radius, + const QString &formulaRadius, qreal f1, const QString &formulaF1, quint32 idObject, Draw mode) + : VAbstractArc(GOType::Arc, formulaLength, center, f1, formulaF1, idObject, mode), + d (new VArcData(radius, formulaRadius)) { CreateName(); FindF2(length); } //--------------------------------------------------------------------------------------------------------------------- -VArc::VArc(qreal length, VPointF center, qreal radius, qreal f1) - : VAbstractCurve(GOType::Arc, NULL_ID, Draw::Calculation), d (new VArcData(center, radius, f1)) +VArc::VArc(qreal length, const VPointF ¢er, qreal radius, qreal f1) + : VAbstractArc(GOType::Arc, center, f1, NULL_ID, Draw::Calculation), + d (new VArcData(radius)) { CreateName(); FindF2(length); @@ -92,7 +95,7 @@ VArc::VArc(qreal length, VPointF center, qreal radius, qreal f1) * @param arc arc */ VArc::VArc(const VArc &arc) - : VAbstractCurve(arc), d (arc.d) + : VAbstractArc(arc), d (arc.d) {} //--------------------------------------------------------------------------------------------------------------------- @@ -107,7 +110,7 @@ VArc &VArc::operator =(const VArc &arc) { return *this; } - VAbstractCurve::operator=(arc); + VAbstractArc::operator=(arc); d = arc.d; return *this; } @@ -137,7 +140,7 @@ VArc::~VArc() qreal VArc::GetLength() const { qreal length = (M_PI * d->radius)/180 * AngleArc(); - if (d->isFlipped) + if (IsFlipped()) { length *= -1; } @@ -154,7 +157,7 @@ QPointF VArc::GetP1() const { QPointF p1 ( GetCenter().x () + d->radius, GetCenter().y () ); QLineF centerP1(GetCenter().toQPointF(), p1); - centerP1.setAngle(d->f1); + centerP1.setAngle(GetStartAngle()); return centerP1.p2(); } @@ -167,39 +170,10 @@ QPointF VArc::GetP2 () const { QPointF p2 ( GetCenter().x () + d->radius, GetCenter().y () ); QLineF centerP2(GetCenter().toQPointF(), p2); - centerP2.setAngle(d->f2); + centerP2.setAngle(GetEndAngle()); return centerP2.p2(); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief AngleArc calculate arc angle. - * @return angle in degree. - */ -qreal VArc::AngleArc() const -{ - { - const qreal angleDiff = qAbs(d->f1 - d->f2); - if (VFuzzyComparePossibleNulls(angleDiff, 0) || VFuzzyComparePossibleNulls(angleDiff, 360)) - { - return 360; - } - } - QLineF l1(0, 0, 100, 0); - l1.setAngle(d->f1); - QLineF l2(0, 0, 100, 0); - l2.setAngle(d->f2); - - qreal ang = l1.angleTo(l2); - - if (d->isFlipped) - { - ang = 360 - ang; - } - - return ang; -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetPoints return list of points needed for drawing arc. @@ -211,7 +185,7 @@ QVector VArc::GetPoints() const QVector sectionAngle; QPointF pStart; - d->isFlipped ? pStart = GetP2() : pStart = GetP1(); + IsFlipped() ? pStart = GetP2() : pStart = GetP1(); { qreal angle = AngleArc(); @@ -314,11 +288,11 @@ QPointF VArc::CutArc(const qreal &length, VArc &arc1, VArc &arc2) const QLineF line(GetCenter().toQPointF(), GetP1()); line.setAngle(line.angle()+n); - arc1 = VArc (d->center, d->radius, d->formulaRadius, d->f1, d->formulaF1, line.angle(), + arc1 = VArc (GetCenter(), d->radius, d->formulaRadius, GetStartAngle(), GetFormulaF1(), line.angle(), QString().setNum(line.angle()), getIdObject(), getMode()); - arc2 = VArc (d->center, d->radius, d->formulaRadius, line.angle(), QString().setNum(line.angle()), d->f2, - d->formulaF2, getIdObject(), getMode()); + arc2 = VArc (GetCenter(), d->radius, d->formulaRadius, line.angle(), QString().setNum(line.angle()), GetEndAngle(), + GetFormulaF2(), getIdObject(), getMode()); return line.p2(); } @@ -331,34 +305,6 @@ QPointF VArc::CutArc(const qreal &length) const return this->CutArc(length, arc1, arc2); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief setId keep id arc in data. - * @param id id arc in data. - */ -void VArc::setId(const quint32 &id) -{ - VAbstractCurve::setId(id); - CreateName(); -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VArc::NameForHistory(const QString &toolName) const -{ - QString name = toolName + QString(" %1").arg(this->GetCenter().name()); - - if (VAbstractCurve::id() != NULL_ID) - { - name += QString("_%1").arg(VAbstractCurve::id()); - } - - if (GetDuplicate() > 0) - { - name += QString("_%1").arg(GetDuplicate()); - } - return name; -} - //--------------------------------------------------------------------------------------------------------------------- void VArc::CreateName() { @@ -380,7 +326,7 @@ void VArc::CreateName() //--------------------------------------------------------------------------------------------------------------------- void VArc::FindF2(qreal length) { - length < 0 ? d->isFlipped = true : d->isFlipped = false; + SetFlipped(length < 0); if (length >= MaxLength()) { @@ -389,16 +335,15 @@ void VArc::FindF2(qreal length) qreal arcAngle = (qAbs(length)*180)/(M_PI*d->radius); - if (d->isFlipped) + if (IsFlipped()) { arcAngle = arcAngle * -1; } QLineF startAngle(0, 0, 100, 0); - startAngle.setAngle(d->f1 + arcAngle);// We use QLineF just because it is easy way correct angle value + startAngle.setAngle(GetStartAngle() + arcAngle);// We use QLineF just because it is easy way correct angle value - d->f2 = startAngle.angle(); - d->formulaF2 = QString().number(d->f2); + SetFormulaF2(QString().number(startAngle.angle()), startAngle.angle()); } //--------------------------------------------------------------------------------------------------------------------- @@ -407,60 +352,6 @@ qreal VArc::MaxLength() const return M_2PI*d->radius; } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetF1 return start angle. - * @return angle in degree. - */ -QString VArc::GetFormulaF1() const -{ - return d->formulaF1; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VArc::SetFormulaF1(const QString &formula, qreal value) -{ - d->formulaF1 = formula; - d->f1 = value; -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetF1 return formula for start angle. - * @return string with formula. - */ -qreal VArc::GetStartAngle() const -{ - return d->f1; -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetF2 return end angle. - * @return angle in degree. - */ -QString VArc::GetFormulaF2() const -{ - return d->formulaF2; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VArc::SetFormulaF2(const QString &formula, qreal value) -{ - d->formulaF2 = formula; - d->f2 = value; -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetF2 return formula for end angle. - * @return string with formula. - */ -qreal VArc::GetEndAngle() const -{ - return d->f2; -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetRadius return arc radius. @@ -487,32 +378,3 @@ qreal VArc::GetRadius() const { return d->radius; } - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetCenter return center point. - * @return center point. - */ -VPointF VArc::GetCenter() const -{ - return d->center; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VArc::SetCenter(const VPointF &value) -{ - d->center = value; -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VArc::GetFormulaLength() const -{ - return d->formulaLength; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VArc::SetFormulaLength(const QString &formula, qreal value) -{ - d->formulaLength = formula; - FindF2(value); -} diff --git a/src/libs/vgeometry/varc.h b/src/libs/vgeometry/varc.h index f8f85aa1b..c022d7303 100644 --- a/src/libs/vgeometry/varc.h +++ b/src/libs/vgeometry/varc.h @@ -29,7 +29,7 @@ #ifndef VARC_H #define VARC_H -#include "vabstractcurve.h" +#include "vabstractarc.h" #include "vpointf.h" #include @@ -39,56 +39,41 @@ class VArcData; /** * @brief VArc class for anticlockwise arc. */ -class VArc: public VAbstractCurve +class VArc: public VAbstractArc { Q_DECLARE_TR_FUNCTIONS(VArc) public: VArc (); - VArc (VPointF center, qreal radius, QString formulaRadius, qreal f1, QString formulaF1, qreal f2, - QString formulaF2, quint32 idObject = 0, Draw mode = Draw::Calculation); - VArc (VPointF center, qreal radius, qreal f1, qreal f2); - VArc (qreal length, QString formulaLength, VPointF center, qreal radius, QString formulaRadius, qreal f1, - QString formulaF1, quint32 idObject = 0, Draw mode = Draw::Calculation); - VArc (qreal length, VPointF center, qreal radius, qreal f1); + VArc (const VPointF ¢er, qreal radius, const QString &formulaRadius, qreal f1, const QString &formulaF1, + qreal f2, const QString &formulaF2, quint32 idObject = 0, Draw mode = Draw::Calculation); + VArc (const VPointF ¢er, qreal radius, qreal f1, qreal f2); + VArc (qreal length, const QString &formulaLength, const VPointF ¢er, qreal radius, const QString &formulaRadius, + qreal f1, const QString &formulaF1, quint32 idObject = 0, Draw mode = Draw::Calculation); + VArc (qreal length, const VPointF ¢er, qreal radius, qreal f1); VArc(const VArc &arc); VArc& operator= (const VArc &arc); VArc Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix = QString()) const; virtual ~VArc() Q_DECL_OVERRIDE; - QString GetFormulaF1 () const; - void SetFormulaF1 (const QString &formula, qreal value); - virtual qreal GetStartAngle () const Q_DECL_OVERRIDE; + QString GetFormulaRadius () const; + void SetFormulaRadius (const QString &formula, qreal value); + qreal GetRadius () const; - QString GetFormulaF2 () const; - void SetFormulaF2 (const QString &formula, qreal value); - virtual qreal GetEndAngle () const Q_DECL_OVERRIDE; + qreal GetLength () const; - QString GetFormulaRadius () const; - void SetFormulaRadius (const QString &formula, qreal value); - qreal GetRadius () const; + QPointF GetP1() const; + QPointF GetP2 () const; - VPointF GetCenter () const; - void SetCenter (const VPointF &value); + QVector GetPoints () const; - QString GetFormulaLength () const; - void SetFormulaLength (const QString &formula, qreal value); - qreal GetLength () const; - - QPointF GetP1() const; - QPointF GetP2 () const; - qreal AngleArc() const; - QVector GetPoints () const; - QPointF CutArc (const qreal &length, VArc &arc1, VArc &arc2) const; - QPointF CutArc (const qreal &length) const; - virtual void setId(const quint32 &id) Q_DECL_OVERRIDE; - virtual QString NameForHistory(const QString &toolName) const Q_DECL_OVERRIDE; + QPointF CutArc (const qreal &length, VArc &arc1, VArc &arc2) const; + QPointF CutArc (const qreal &length) const; protected: virtual void CreateName() Q_DECL_OVERRIDE; + virtual void FindF2(qreal length) Q_DECL_OVERRIDE; private: QSharedDataPointer d; - void FindF2(qreal length); - qreal MaxLength() const; }; diff --git a/src/libs/vgeometry/varc_p.h b/src/libs/vgeometry/varc_p.h index 70c3b6393..f6aac25b7 100644 --- a/src/libs/vgeometry/varc_p.h +++ b/src/libs/vgeometry/varc_p.h @@ -32,7 +32,6 @@ #include #include "vgeometrydef.h" #include "../vmisc/vabstractapplication.h" -#include "vpointf.h" #ifdef Q_CC_GNU #pragma GCC diagnostic push @@ -42,72 +41,48 @@ class VArcData : public QSharedData { public: - - VArcData () - : f1(0), formulaF1(QString()), f2(0), formulaF2(QString()), radius(0), formulaRadius(QString()), - center(VPointF()), isFlipped(false), formulaLength() - {} - - VArcData (VPointF center, qreal radius, QString formulaRadius, qreal f1, QString formulaF1, qreal f2, - QString formulaF2) - : f1(f1), formulaF1(formulaF1), f2(f2), formulaF2(formulaF2), radius(radius), formulaRadius(formulaRadius), - center(center), isFlipped(false), formulaLength() - {} - - VArcData(VPointF center, qreal radius, qreal f1, qreal f2) - : f1(f1), formulaF1(QString().number(f1)), - f2(f2), formulaF2(QString().number(f2)), - radius(radius), formulaRadius(QString().number(qApp->fromPixel(radius))), - center(center), isFlipped(false), formulaLength() - {} - - VArcData (QString formulaLength, VPointF center, qreal radius, QString formulaRadius, qreal f1, QString formulaF1) - : f1(f1), formulaF1(formulaF1), f2(0), formulaF2("0"), radius(radius), formulaRadius(formulaRadius), - center(center), isFlipped(false), formulaLength(formulaLength) - {} - - VArcData(VPointF center, qreal radius, qreal f1) - : f1(f1), formulaF1(QString().number(f1)), f2(0), formulaF2("0"), radius(radius), - formulaRadius(QString().number(qApp->fromPixel(radius))), center(center), isFlipped(false), formulaLength() - {} - - VArcData(const VArcData &arc) - : QSharedData(arc), f1(arc.f1), formulaF1(arc.formulaF1), f2(arc.f2), formulaF2(arc.formulaF2), - radius(arc.radius), formulaRadius(arc.formulaRadius), center(arc.center), isFlipped(arc.isFlipped), - formulaLength(arc.formulaLength) - {} - + VArcData(); + VArcData(qreal radius, QString formulaRadius); + VArcData(qreal radius); + VArcData(const VArcData &arc); virtual ~VArcData(); - /** @brief f1 start angle in degree. */ - qreal f1; - - /** @brief formulaF1 formula for start angle. */ - QString formulaF1; - - /** @brief f2 end angle in degree. */ - qreal f2; - - /** @brief formulaF2 formula for end angle. */ - QString formulaF2; - /** @brief radius arc radius. */ qreal radius; /** @brief formulaRadius formula for arc radius. */ QString formulaRadius; - /** @brief center center point of arc. */ - VPointF center; - - bool isFlipped; - - QString formulaLength; - private: VArcData &operator=(const VArcData &) Q_DECL_EQ_DELETE; }; +//--------------------------------------------------------------------------------------------------------------------- +VArcData::VArcData() + : radius(0), + formulaRadius(QString()) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VArcData::VArcData(qreal radius, QString formulaRadius) + : radius(radius), + formulaRadius(formulaRadius) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VArcData::VArcData(qreal radius) + : radius(radius), + formulaRadius(QString().number(qApp->fromPixel(radius))) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VArcData::VArcData(const VArcData &arc) + : QSharedData(arc), + radius(arc.radius), + formulaRadius(arc.formulaRadius) +{} + +//--------------------------------------------------------------------------------------------------------------------- VArcData::~VArcData() {} diff --git a/src/libs/vgeometry/vellipticalarc.cpp b/src/libs/vgeometry/vellipticalarc.cpp index 956dc061e..923669e5f 100644 --- a/src/libs/vgeometry/vellipticalarc.cpp +++ b/src/libs/vgeometry/vellipticalarc.cpp @@ -39,7 +39,7 @@ * @brief VEllipticalArc default constructor. */ VEllipticalArc::VEllipticalArc() - : VAbstractCurve(GOType::EllipticalArc), d (new VEllipticalArcData) + : VAbstractArc(GOType::EllipticalArc), d (new VEllipticalArcData) {} //--------------------------------------------------------------------------------------------------------------------- @@ -54,9 +54,8 @@ VEllipticalArc::VEllipticalArc() VEllipticalArc::VEllipticalArc (const VPointF ¢er, qreal radius1, qreal radius2, const QString &formulaRadius1, const QString &formulaRadius2, qreal f1, const QString &formulaF1, qreal f2, const QString &formulaF2, qreal rotationAngle, quint32 idObject, Draw mode) - : VAbstractCurve(GOType::EllipticalArc, idObject, mode), - d (new VEllipticalArcData(center, radius1, radius2, formulaRadius1, formulaRadius2, f1, formulaF1, f2, formulaF2, - rotationAngle)) + : VAbstractArc(GOType::EllipticalArc, center, f1, formulaF1, f2, formulaF2, idObject, mode), + d (new VEllipticalArcData(radius1, radius2, formulaRadius1, formulaRadius2, rotationAngle)) { CreateName(); } @@ -64,8 +63,8 @@ VEllipticalArc::VEllipticalArc (const VPointF ¢er, qreal radius1, qreal radi //--------------------------------------------------------------------------------------------------------------------- VEllipticalArc::VEllipticalArc(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal f2, qreal rotationAngle) - : VAbstractCurve(GOType::EllipticalArc, NULL_ID, Draw::Calculation), - d (new VEllipticalArcData(center, radius1, radius2, f1, f2, rotationAngle)) + : VAbstractArc(GOType::EllipticalArc, center, f1, f2, NULL_ID, Draw::Calculation), + d (new VEllipticalArcData(radius1, radius2, rotationAngle)) { CreateName(); } @@ -74,9 +73,8 @@ VEllipticalArc::VEllipticalArc(const VPointF ¢er, qreal radius1, qreal radiu VEllipticalArc::VEllipticalArc(qreal length, const QString &formulaLength, const VPointF ¢er, qreal radius1, qreal radius2, const QString &formulaRadius1, const QString &formulaRadius2, qreal f1, const QString &formulaF1, qreal rotationAngle, quint32 idObject, Draw mode) - : VAbstractCurve(GOType::EllipticalArc, idObject, mode), - d (new VEllipticalArcData(formulaLength, center, radius1, radius2, formulaRadius1, formulaRadius2, f1, formulaF1, - rotationAngle)) + : VAbstractArc(GOType::EllipticalArc, formulaLength, center, f1, formulaF1, idObject, mode), + d (new VEllipticalArcData(radius1, radius2, formulaRadius1, formulaRadius2, rotationAngle)) { CreateName(); FindF2(length); @@ -85,8 +83,8 @@ VEllipticalArc::VEllipticalArc(qreal length, const QString &formulaLength, const //--------------------------------------------------------------------------------------------------------------------- VEllipticalArc::VEllipticalArc(qreal length, const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal rotationAngle) - : VAbstractCurve(GOType::EllipticalArc, NULL_ID, Draw::Calculation), - d (new VEllipticalArcData(center, radius1, radius2, f1, rotationAngle)) + : VAbstractArc(GOType::EllipticalArc, center, f1, NULL_ID, Draw::Calculation), + d (new VEllipticalArcData(radius1, radius2, rotationAngle)) { CreateName(); FindF2(length); @@ -98,7 +96,7 @@ VEllipticalArc::VEllipticalArc(qreal length, const VPointF ¢er, qreal radius * @param arc arc */ VEllipticalArc::VEllipticalArc(const VEllipticalArc &arc) - : VAbstractCurve(arc), d (arc.d) + : VAbstractArc(arc), d (arc.d) {} //--------------------------------------------------------------------------------------------------------------------- @@ -113,7 +111,7 @@ VEllipticalArc &VEllipticalArc::operator =(const VEllipticalArc &arc) { return *this; } - VAbstractCurve::operator=(arc); + VAbstractArc::operator=(arc); d = arc.d; return *this; } @@ -144,7 +142,7 @@ qreal VEllipticalArc::GetLength() const { qreal length = PathLength(GetPoints()); - if (d->isFlipped) + if (IsFlipped()) { length = length * -1; } @@ -159,7 +157,7 @@ qreal VEllipticalArc::GetLength() const */ QPointF VEllipticalArc::GetP1() const { - return GetPoint(d->f1); + return GetPoint(GetStartAngle()); } //--------------------------------------------------------------------------------------------------------------------- @@ -169,7 +167,7 @@ QPointF VEllipticalArc::GetP1() const */ QPointF VEllipticalArc::GetP2 () const { - return GetPoint(d->f2); + return GetPoint(GetEndAngle()); } //--------------------------------------------------------------------------------------------------------------------- @@ -296,36 +294,6 @@ int VEllipticalArc::GetQuadransRad(qreal &rad) return n; } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief AngleArc calculate arc angle. - * @return angle in degree. - */ -qreal VEllipticalArc::AngleArc() const -{ - { - const qreal angleDiff = qAbs(d->f1 - d->f2); - if (VFuzzyComparePossibleNulls(angleDiff, 0) || VFuzzyComparePossibleNulls(angleDiff, 360)) - { - return 360; - } - } - - QLineF l1(0, 0, 100, 0); - l1.setAngle(d->f1); - QLineF l2(0, 0, 100, 0); - l2.setAngle(d->f2); - - qreal ang = l1.angleTo(l2); - - if (d->isFlipped) - { - ang = 360 - ang; - } - - return ang; -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetAngles return list of angles needed for drawing arc. @@ -338,7 +306,7 @@ QVector VEllipticalArc::GetAngles() const if (qFuzzyIsNull(angle)) {// Return the array that includes one angle - sectionAngle.append(d->f1); + sectionAngle.append(GetStartAngle()); return sectionAngle; } @@ -375,7 +343,7 @@ QVector VEllipticalArc::GetPoints() const QVector sectionAngle = GetAngles(); qreal currentAngle; - d->isFlipped ? currentAngle = GetEndAngle() : currentAngle = GetStartAngle(); + IsFlipped() ? currentAngle = GetEndAngle() : currentAngle = GetStartAngle(); for (int i = 0; i < sectionAngle.size(); ++i) { QPointF startPoint = GetPoint(currentAngle); @@ -439,13 +407,13 @@ QPointF VEllipticalArc::CutArc(const qreal &length, VEllipticalArc &arc1, VEllip } // the first arc has given length and startAngle just like in the origin arc - arc1 = VEllipticalArc (len, QString().setNum(length), d->center, d->radius1, d->radius2, - d->formulaRadius1, d->formulaRadius2, d->f1, d->formulaF1, d->rotationAngle, + arc1 = VEllipticalArc (len, QString().setNum(length), GetCenter(), d->radius1, d->radius2, + d->formulaRadius1, d->formulaRadius2, GetStartAngle(), GetFormulaF1(), d->rotationAngle, getIdObject(), getMode()); // the second arc has startAngle just like endAngle of the first arc // and it has endAngle just like endAngle of the origin arc - arc2 = VEllipticalArc (d->center, d->radius1, d->radius2, d->formulaRadius1, d->formulaRadius2, - arc1.GetEndAngle(), arc1.GetFormulaF2(), d->f2, d->formulaF2, d->rotationAngle, + arc2 = VEllipticalArc (GetCenter(), d->radius1, d->radius2, d->formulaRadius1, d->formulaRadius2, + arc1.GetEndAngle(), arc1.GetFormulaF2(), GetEndAngle(), GetFormulaF2(), d->rotationAngle, getIdObject(), getMode()); return arc1.GetP1(); } @@ -459,34 +427,6 @@ QPointF VEllipticalArc::CutArc(const qreal &length) const return this->CutArc(length, arc1, arc2); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief setId keep id arc in data. - * @param id id arc in data. - */ -void VEllipticalArc::setId(const quint32 &id) -{ - VAbstractCurve::setId(id); - CreateName(); -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VEllipticalArc::NameForHistory(const QString &toolName) const -{ - QString name = toolName + QString(" %1").arg(this->GetCenter().name()); - - if (VAbstractCurve::id() != NULL_ID) - { - name += QString("_%1").arg(VAbstractCurve::id()); - } - - if (GetDuplicate() > 0) - { - name += QString("_%1").arg(GetDuplicate()); - } - return name; -} - //--------------------------------------------------------------------------------------------------------------------- void VEllipticalArc::CreateName() { @@ -511,7 +451,7 @@ void VEllipticalArc::FindF2(qreal length) qreal gap = 180; if (length < 0) { - d->isFlipped = true; + SetFlipped(true); gap = -gap; } while (length > MaxLength()) @@ -523,7 +463,9 @@ void VEllipticalArc::FindF2(qreal length) // first approximation of angle between start and end angles qreal endAngle = GetStartAngle() + gap; - d->f2 = endAngle; // we need to set the end anngle, because we want to use GetLength() + + // we need to set the end angle, because we want to use GetLength() + SetFormulaF2(QString::number(endAngle), endAngle); qreal lenBez = GetLength(); // first approximation of length @@ -534,7 +476,6 @@ void VEllipticalArc::FindF2(qreal length) gap = gap/2; if (gap < 0.0001) { - d->f2 = endAngle; break; } if (lenBez > length) @@ -546,11 +487,11 @@ void VEllipticalArc::FindF2(qreal length) endAngle = endAngle + qAbs(gap); } // we need to set d->f2, because we use it when we calculate GetLength - d->f2 = endAngle; + SetFormulaF2(QString::number(endAngle), endAngle); lenBez = GetLength(); } - d->formulaF2 = QString().number(d->f2); - d->formulaLength = QString().number(qApp->fromPixel(lenBez)); + SetFormulaF2(QString::number(endAngle), endAngle); + SetFormulaLength(QString::number(qApp->fromPixel(lenBez))); } //--------------------------------------------------------------------------------------------------------------------- @@ -561,60 +502,6 @@ qreal VEllipticalArc::MaxLength() const return ellipseLength; } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetF1 return start angle. - * @return angle in degree. - */ -QString VEllipticalArc::GetFormulaF1() const -{ - return d->formulaF1; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VEllipticalArc::SetFormulaF1(const QString &formula, qreal value) -{ - d->formulaF1 = formula; - d->f1 = value; -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetF1 return formula for start angle. - * @return string with formula. - */ -qreal VEllipticalArc::GetStartAngle() const -{ - return d->f1; -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetF2 return end angle. - * @return angle in degree. - */ -QString VEllipticalArc::GetFormulaF2() const -{ - return d->formulaF2; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VEllipticalArc::SetFormulaF2(const QString &formula, qreal value) -{ - d->formulaF2 = formula; - d->f2 = value; -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetF2 return formula for end angle. - * @return string with formula. - */ -qreal VEllipticalArc::GetEndAngle() const -{ - return d->f2; -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetRadius return arc major radius. @@ -678,32 +565,3 @@ qreal VEllipticalArc::GetRadius2() const { return d->radius2; } - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetCenter return center point. - * @return center point. - */ -VPointF VEllipticalArc::GetCenter() const -{ - return d->center; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VEllipticalArc::SetCenter(const VPointF &value) -{ - d->center = value; -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VEllipticalArc::GetFormulaLength() const -{ - return d->formulaLength; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VEllipticalArc::SetFormulaLength(const QString &formula, qreal value) -{ - d->formulaLength = formula; - FindF2(value); -} diff --git a/src/libs/vgeometry/vellipticalarc.h b/src/libs/vgeometry/vellipticalarc.h index 49dbec73e..58633c60d 100644 --- a/src/libs/vgeometry/vellipticalarc.h +++ b/src/libs/vgeometry/vellipticalarc.h @@ -29,13 +29,13 @@ #ifndef VELLIPTICALARC_H #define VELLIPTICALARC_H -#include "vabstractcurve.h" +#include "vabstractarc.h" #include "vpointf.h" #include class VEllipticalArcData; -class VEllipticalArc : public VAbstractCurve +class VEllipticalArc : public VAbstractArc { Q_DECLARE_TR_FUNCTIONS(VEllipticalArc) public: @@ -56,49 +56,35 @@ public: virtual ~VEllipticalArc() Q_DECL_OVERRIDE; - QString GetFormulaF1 () const; - void SetFormulaF1 (const QString &formula, qreal value); - virtual qreal GetStartAngle () const Q_DECL_OVERRIDE; + qreal GetRotationAngle() const; - QString GetFormulaF2 () const; - void SetFormulaF2 (const QString &formula, qreal value); - virtual qreal GetEndAngle () const Q_DECL_OVERRIDE; + QString GetFormulaRadius1 () const; + void SetFormulaRadius1 (const QString &formula, qreal value); + qreal GetRadius1 () const; - qreal GetRotationAngle() const; + QString GetFormulaRadius2 () const; + void SetFormulaRadius2 (const QString &formula, qreal value); + qreal GetRadius2 () const; - QString GetFormulaRadius1 () const; - void SetFormulaRadius1 (const QString &formula, qreal value); - qreal GetRadius1 () const; + qreal GetLength () const; - QString GetFormulaRadius2 () const; - void SetFormulaRadius2 (const QString &formula, qreal value); - qreal GetRadius2 () const; + QPointF GetP1() const; + QPointF GetP2() const; - VPointF GetCenter () const; - void SetCenter (const VPointF &value); + QVector GetPoints () const; - QString GetFormulaLength () const; - void SetFormulaLength (const QString &formula, qreal value); - qreal GetLength () const; - - QPointF GetP1() const; - QPointF GetP2 () const; - - qreal AngleArc() const; - QVector GetAngles () const; - QVector GetPoints () const; - QPointF CutArc (const qreal &length, VEllipticalArc &arc1, VEllipticalArc &arc2) const; - QPointF CutArc (const qreal &length) const; - virtual void setId(const quint32 &id) Q_DECL_OVERRIDE; - virtual QString NameForHistory(const QString &toolName) const Q_DECL_OVERRIDE; + QPointF CutArc (const qreal &length, VEllipticalArc &arc1, VEllipticalArc &arc2) const; + QPointF CutArc (const qreal &length) const; protected: virtual void CreateName() Q_DECL_OVERRIDE; + virtual void FindF2(qreal length) Q_DECL_OVERRIDE; private: QSharedDataPointer d; - void FindF2(qreal length); - qreal MaxLength() const; - QPointF GetPoint (qreal angle) const; + QVector GetAngles () const; + qreal MaxLength() const; + QPointF GetPoint (qreal angle) const; + static int GetQuadransRad(qreal &rad); }; diff --git a/src/libs/vgeometry/vellipticalarc_p.h b/src/libs/vgeometry/vellipticalarc_p.h index 8b2b0198c..aa3c04194 100644 --- a/src/libs/vgeometry/vellipticalarc_p.h +++ b/src/libs/vgeometry/vellipticalarc_p.h @@ -14,40 +14,23 @@ class VEllipticalArcData : public QSharedData { public: VEllipticalArcData (); - VEllipticalArcData (const VPointF ¢er, qreal radius1, qreal radius2, const QString &formulaRadius1, - const QString &formulaRadius2, qreal f1, const QString &formulaF1, qreal f2, - const QString &formulaF2, qreal rotationAngle); - VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal f2, qreal rotationAngle); - VEllipticalArcData (const QString &formulaLength, const VPointF ¢er, qreal radius1, qreal radius2, - const QString &formulaRadius1, const QString &formulaRadius2, qreal f1, - const QString &formulaF1, qreal rotationAngle); - VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal rotationAngle); + VEllipticalArcData (qreal radius1, qreal radius2, const QString &formulaRadius1, const QString &formulaRadius2, + qreal rotationAngle); + VEllipticalArcData(qreal radius1, qreal radius2, qreal rotationAngle); VEllipticalArcData(const VEllipticalArcData &arc); virtual ~VEllipticalArcData(); - /** @brief f1 start angle in degree. */ - qreal f1; - /** @brief f2 end angle in degree. */ - qreal f2; - /** @brief formulaF1 formula for start angle. */ - QString formulaF1; - /** @brief formulaF2 formula for end angle. */ - QString formulaF2; /** @brief radius1 elliptical arc major radius. */ - qreal radius1; + qreal radius1; /** @brief radius2 elliptical arc minor radius. */ - qreal radius2; + qreal radius2; /** @brief formulaRadius1 formula for elliptical arc major radius. */ - QString formulaRadius1; + QString formulaRadius1; /** @brief formulaRadius2 formula for elliptical arc minor radius. */ - QString formulaRadius2; - /** @brief center center point of arc. */ - VPointF center; - bool isFlipped; - QString formulaLength; + QString formulaRadius2; /** @brief rotationAngle in degree. */ - qreal rotationAngle; + qreal rotationAngle; private: VEllipticalArcData &operator=(const VEllipticalArcData &) Q_DECL_EQ_DELETE; @@ -55,105 +38,39 @@ private: //--------------------------------------------------------------------------------------------------------------------- VEllipticalArcData::VEllipticalArcData() - : f1(0), - f2(0), - formulaF1(), - formulaF2(), - radius1(0), + : radius1(0), radius2(0), formulaRadius1(), formulaRadius2(), - center(), - isFlipped(false), - formulaLength(), rotationAngle(0) {} //--------------------------------------------------------------------------------------------------------------------- -VEllipticalArcData::VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, - const QString &formulaRadius1, const QString &formulaRadius2, qreal f1, - const QString &formulaF1, qreal f2, const QString &formulaF2, - qreal rotationAngle) - : f1(f1), - f2(f2), - formulaF1(formulaF1), - formulaF2(formulaF2), - radius1(radius1), +VEllipticalArcData::VEllipticalArcData(qreal radius1, qreal radius2, const QString &formulaRadius1, + const QString &formulaRadius2, qreal rotationAngle) + : radius1(radius1), radius2(radius2), formulaRadius1(formulaRadius1), formulaRadius2(formulaRadius2), - center(center), - isFlipped(false), - formulaLength(), rotationAngle(rotationAngle) {} //--------------------------------------------------------------------------------------------------------------------- -VEllipticalArcData::VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, qreal f2, - qreal rotationAngle) - : f1(f1), - f2(f2), - formulaF1(QString().number(f1)), - formulaF2(QString().number(f2)), - radius1(radius1), +VEllipticalArcData::VEllipticalArcData(qreal radius1, qreal radius2, qreal rotationAngle) + : radius1(radius1), radius2(radius2), formulaRadius1(QString().number(qApp->fromPixel(radius1))), formulaRadius2(QString().number(qApp->fromPixel(radius2))), - center(center), - isFlipped(false), - formulaLength(), - rotationAngle(rotationAngle) -{} - -//--------------------------------------------------------------------------------------------------------------------- -VEllipticalArcData::VEllipticalArcData(const QString &formulaLength, const VPointF ¢er, qreal radius1, - qreal radius2, const QString &formulaRadius1, const QString &formulaRadius2, - qreal f1, const QString &formulaF1, qreal rotationAngle) - : f1(f1), - f2(0), - formulaF1(formulaF1), - formulaF2("0"), - radius1(radius1), - radius2(radius2), - formulaRadius1(formulaRadius1), - formulaRadius2(formulaRadius2), - center(center), - isFlipped(false), - formulaLength(formulaLength), - rotationAngle(rotationAngle) -{} - -//--------------------------------------------------------------------------------------------------------------------- -VEllipticalArcData::VEllipticalArcData(const VPointF ¢er, qreal radius1, qreal radius2, qreal f1, - qreal rotationAngle) - : f1(f1), - f2(0), - formulaF1(QString().number(f1)), - formulaF2("0"), - radius1(radius1), - radius2(radius2), - formulaRadius1(QString().number(qApp->fromPixel(radius1))), - formulaRadius2(QString().number(qApp->fromPixel(radius2))), - center(center), - isFlipped(false), - formulaLength(), rotationAngle(rotationAngle) {} //--------------------------------------------------------------------------------------------------------------------- VEllipticalArcData::VEllipticalArcData(const VEllipticalArcData &arc) : QSharedData(arc), - f1(arc.f1), - f2(arc.f2), - formulaF1(arc.formulaF1), - formulaF2(arc.formulaF2), radius1(arc.radius1), radius2(arc.radius2), formulaRadius1(arc.formulaRadius1), formulaRadius2(arc.formulaRadius2), - center(arc.center), - isFlipped(arc.isFlipped), - formulaLength(arc.formulaLength), rotationAngle(arc.rotationAngle) {} diff --git a/src/libs/vgeometry/vgeometry.pri b/src/libs/vgeometry/vgeometry.pri index 60586d110..2b05f9b20 100644 --- a/src/libs/vgeometry/vgeometry.pri +++ b/src/libs/vgeometry/vgeometry.pri @@ -13,7 +13,8 @@ SOURCES += \ $$PWD/vcubicbezier.cpp \ $$PWD/vabstractcubicbezier.cpp \ $$PWD/vabstractcubicbezierpath.cpp \ - $$PWD/vcubicbezierpath.cpp + $$PWD/vcubicbezierpath.cpp \ + $$PWD/vabstractarc.cpp win32-msvc*:SOURCES += $$PWD/stable.cpp @@ -41,4 +42,6 @@ HEADERS += \ $$PWD/vabstractcubicbezier.h \ $$PWD/vabstractcubicbezierpath.h \ $$PWD/vcubicbezierpath.h \ - $$PWD/vcubicbezierpath_p.h + $$PWD/vcubicbezierpath_p.h \ + $$PWD/vabstractarc.h \ + $$PWD/vabstractarc_p.h diff --git a/src/test/ValentinaTest/qttestmainlambda.cpp b/src/test/ValentinaTest/qttestmainlambda.cpp index 3fe23f569..a7d7c15e9 100644 --- a/src/test/ValentinaTest/qttestmainlambda.cpp +++ b/src/test/ValentinaTest/qttestmainlambda.cpp @@ -63,27 +63,27 @@ int main(int argc, char** argv) delete obj; }; -// ASSERT_TEST(new TST_FindPoint()); -// ASSERT_TEST(new TST_VDetail()); -// ASSERT_TEST(new TST_VPoster()); -// ASSERT_TEST(new TST_VAbstractDetail()); -// ASSERT_TEST(new TST_VSpline()); -// ASSERT_TEST(new TST_NameRegExp()); -// ASSERT_TEST(new TST_VLayoutDetail()); -// ASSERT_TEST(new TST_VArc()); + ASSERT_TEST(new TST_FindPoint()); + ASSERT_TEST(new TST_VDetail()); + ASSERT_TEST(new TST_VPoster()); + ASSERT_TEST(new TST_VAbstractDetail()); + ASSERT_TEST(new TST_VSpline()); + ASSERT_TEST(new TST_NameRegExp()); + ASSERT_TEST(new TST_VLayoutDetail()); + ASSERT_TEST(new TST_VArc()); ASSERT_TEST(new TST_VEllipticalArc()); -// ASSERT_TEST(new TST_MeasurementRegExp()); -// ASSERT_TEST(new TST_TapeCommandLine()); -// ASSERT_TEST(new TST_ValentinaCommandLine()); -// ASSERT_TEST(new TST_QmuTokenParser()); -// ASSERT_TEST(new TST_VMeasurements()); -// ASSERT_TEST(new TST_QmuParserErrorMsg()); -// ASSERT_TEST(new TST_VLockGuard()); -// ASSERT_TEST(new TST_Misc()); -// ASSERT_TEST(new TST_VCommandLine()); -// ASSERT_TEST(new TST_TSTranslation()); -// ASSERT_TEST(new TST_VAbstractCurve()); -// ASSERT_TEST(new TST_VCubicBezierPath()); + ASSERT_TEST(new TST_MeasurementRegExp()); + ASSERT_TEST(new TST_TapeCommandLine()); + ASSERT_TEST(new TST_ValentinaCommandLine()); + ASSERT_TEST(new TST_QmuTokenParser()); + ASSERT_TEST(new TST_VMeasurements()); + ASSERT_TEST(new TST_QmuParserErrorMsg()); + ASSERT_TEST(new TST_VLockGuard()); + ASSERT_TEST(new TST_Misc()); + ASSERT_TEST(new TST_VCommandLine()); + ASSERT_TEST(new TST_TSTranslation()); + ASSERT_TEST(new TST_VAbstractCurve()); + ASSERT_TEST(new TST_VCubicBezierPath()); return status; } From 2717382d71ec1b5e946638614dd69d9cff4656c8 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sun, 10 Apr 2016 18:03:15 +0300 Subject: [PATCH 03/41] Rotation VSpline and VSplinePath classes. --HG-- branch : feature --- src/libs/vgeometry/vspline.cpp | 16 ++++++++++++++- src/libs/vgeometry/vspline.h | 1 + src/libs/vgeometry/vsplinepath.cpp | 31 ++++++++++++++++++++++++------ src/libs/vgeometry/vsplinepath.h | 1 + 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/libs/vgeometry/vspline.cpp b/src/libs/vgeometry/vspline.cpp index 9fb3eef30..894b389d6 100644 --- a/src/libs/vgeometry/vspline.cpp +++ b/src/libs/vgeometry/vspline.cpp @@ -103,12 +103,26 @@ VSpline::VSpline(VPointF p1, VPointF p4, qreal angle1, const QString &angle1Form const QString &angle2Formula, qreal c1Length, const QString &c1LengthFormula, qreal c2Length, const QString &c2LengthFormula, quint32 idObject, Draw mode) : VAbstractCubicBezier(GOType::Spline, idObject, mode), - d(new VSplineData(p1, p4, angle1, angle1Formula, angle2,angle2Formula, c1Length, c1LengthFormula, c2Length, + d(new VSplineData(p1, p4, angle1, angle1Formula, angle2, angle2Formula, c1Length, c1LengthFormula, c2Length, c2LengthFormula)) { CreateName(); } +//--------------------------------------------------------------------------------------------------------------------- +VSpline VSpline::Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix) const +{ + const VPointF p1 = GetP1().Rotate(originPoint, degrees); + const VPointF p4 = GetP4().Rotate(originPoint, degrees); + + const QPointF p2 = VPointF::RotatePF(originPoint, GetP2(), degrees); + const QPointF p3 = VPointF::RotatePF(originPoint, GetP3(), degrees); + + VSpline spl(p1, p2, p3, p4); + spl.setName(name() + prefix); + return spl; +} + //--------------------------------------------------------------------------------------------------------------------- VSpline::~VSpline() {} diff --git a/src/libs/vgeometry/vspline.h b/src/libs/vgeometry/vspline.h index c92e4f907..5b0de7ac7 100644 --- a/src/libs/vgeometry/vspline.h +++ b/src/libs/vgeometry/vspline.h @@ -52,6 +52,7 @@ public: VSpline (VPointF p1, VPointF p4, qreal angle1, const QString &angle1Formula, qreal angle2, const QString &angle2Formula, qreal c1Length, const QString &c1LengthFormula, qreal c2Length, const QString &c2LengthFormula, quint32 idObject = 0, Draw mode = Draw::Calculation); + VSpline Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix = QString()) const; virtual ~VSpline(); VSpline &operator=(const VSpline &spl); diff --git a/src/libs/vgeometry/vsplinepath.cpp b/src/libs/vgeometry/vsplinepath.cpp index 64a2a5590..bd4ad9879 100644 --- a/src/libs/vgeometry/vsplinepath.cpp +++ b/src/libs/vgeometry/vsplinepath.cpp @@ -57,12 +57,7 @@ VSplinePath::VSplinePath(const QVector &points, qreal kCurve, qui return; } - QVector newPoints; - for (int i=0; i < points.size(); ++i) - { - newPoints.append(VSplinePoint()); - } - + QVector newPoints(points.size()); for (qint32 i = 1; i <= points.size()-1; ++i) { const VFSplinePoint &p1 = points.at(i-1); @@ -106,6 +101,30 @@ VSplinePath::VSplinePath(const VSplinePath &splPath) d(splPath.d) {} +//--------------------------------------------------------------------------------------------------------------------- +VSplinePath VSplinePath::Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix) const +{ + QVector newPoints(CountPoints()); + for (qint32 i = 1; i <= CountSubSpl(); ++i) + { + const VSplinePoint &p1 = d->path.at(i-1); + const VSplinePoint &p2 = d->path.at(i); + VSpline spl = GetSpline(i).Rotate(originPoint, degrees); + + newPoints[i-1].SetP(p1.P()); + newPoints[i-1].SetAngle2(p1.Angle2(), spl.GetStartAngleFormula()); + newPoints[i-1].SetLength2(spl.GetC1Length(), spl.GetC1LengthFormula()); + + newPoints[i].SetP(p2.P()); + newPoints[i].SetAngle1(p2.Angle1(), spl.GetEndAngleFormula()); + newPoints[i].SetLength1(spl.GetC2Length(), spl.GetC2LengthFormula()); + } + + VSplinePath splPath(newPoints); + splPath.setName(name() + prefix); + return splPath; +} + //--------------------------------------------------------------------------------------------------------------------- VSplinePath::~VSplinePath() {} diff --git a/src/libs/vgeometry/vsplinepath.h b/src/libs/vgeometry/vsplinepath.h index a683065c1..2b0b7608b 100644 --- a/src/libs/vgeometry/vsplinepath.h +++ b/src/libs/vgeometry/vsplinepath.h @@ -50,6 +50,7 @@ public: Draw mode = Draw::Calculation); VSplinePath(const QVector &points, quint32 idObject = 0, Draw mode = Draw::Calculation); VSplinePath(const VSplinePath& splPath); + VSplinePath Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix = QString()) const; virtual ~VSplinePath() Q_DECL_OVERRIDE; VSplinePath &operator=(const VSplinePath &path); From 910c40a5b37214540d137e392074a273f8eb0914 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 12 May 2016 22:11:21 +0300 Subject: [PATCH 04/41] Commit successful build. --HG-- branch : feature --- .../core/vtooloptionspropertybrowser.cpp | 33 +- .../core/vtooloptionspropertybrowser.h | 3 + src/app/valentina/dialogs/dialoghistory.cpp | 3 +- src/app/valentina/mainwindow.cpp | 49 +- src/app/valentina/mainwindow.h | 2 + src/app/valentina/mainwindow.ui | 26 + src/app/valentina/share/resources/cursor.qrc | 2 + .../resources/cursor/rotation_cursor.png | Bin 0 -> 836 bytes .../resources/cursor/rotation_cursor@2x.png | Bin 0 -> 1757 bytes .../valentina/share/resources/toolicon.qrc | 2 + .../resources/toolicon/32x32/rotation.png | Bin 0 -> 1349 bytes .../resources/toolicon/32x32/rotation@2x.png | Bin 0 -> 2719 bytes .../share/resources/toolicon/svg/rotation.svg | 82 ++ src/app/valentina/xml/vpattern.cpp | 11 +- src/libs/ifc/exception/vexception.cpp | 2 +- src/libs/ifc/ifcdef.cpp | 2 + src/libs/ifc/ifcdef.h | 2 + src/libs/ifc/xml/vabstractpattern.h | 2 +- src/libs/vgeometry/vgeometrydef.h | 2 - src/libs/vmisc/def.h | 5 +- src/libs/vtools/dialogs/dialogs.pri | 9 +- src/libs/vtools/dialogs/tooldialogs.h | 1 + .../vtools/dialogs/tools/dialogrotation.cpp | 323 ++++++ .../vtools/dialogs/tools/dialogrotation.h | 101 ++ .../vtools/dialogs/tools/dialogrotation.ui | 275 ++++++ src/libs/vtools/tools/drawTools/drawtools.h | 1 + .../drawTools/operation/vtoolrotation.cpp | 934 ++++++++++++++++++ .../tools/drawTools/operation/vtoolrotation.h | 175 ++++ .../tools/nodeDetails/vabstractnode.cpp | 1 - .../vtools/tools/nodeDetails/vabstractnode.h | 1 - src/libs/vtools/tools/tools.pri | 6 +- .../visualization/line/vistoolrotation.cpp | 258 +++++ .../visualization/line/vistoolrotation.h | 71 ++ .../vtools/visualization/visualization.pri | 6 +- src/libs/vwidgets/vabstractsimple.cpp | 43 +- src/libs/vwidgets/vabstractsimple.h | 51 +- src/libs/vwidgets/vsimplecurve.cpp | 133 +++ src/libs/vwidgets/vsimplecurve.h | 78 ++ src/libs/vwidgets/vsimplepoint.cpp | 39 +- src/libs/vwidgets/vsimplepoint.h | 17 +- src/libs/vwidgets/vwidgets.pri | 6 +- 41 files changed, 2681 insertions(+), 76 deletions(-) create mode 100644 src/app/valentina/share/resources/cursor/rotation_cursor.png create mode 100644 src/app/valentina/share/resources/cursor/rotation_cursor@2x.png create mode 100644 src/app/valentina/share/resources/toolicon/32x32/rotation.png create mode 100644 src/app/valentina/share/resources/toolicon/32x32/rotation@2x.png create mode 100644 src/app/valentina/share/resources/toolicon/svg/rotation.svg create mode 100644 src/libs/vtools/dialogs/tools/dialogrotation.cpp create mode 100644 src/libs/vtools/dialogs/tools/dialogrotation.h create mode 100644 src/libs/vtools/dialogs/tools/dialogrotation.ui create mode 100644 src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp create mode 100644 src/libs/vtools/tools/drawTools/operation/vtoolrotation.h create mode 100644 src/libs/vtools/visualization/line/vistoolrotation.cpp create mode 100644 src/libs/vtools/visualization/line/vistoolrotation.h create mode 100644 src/libs/vwidgets/vsimplecurve.cpp create mode 100644 src/libs/vwidgets/vsimplecurve.h diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp index 117787659..43c25233c 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp +++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp @@ -74,7 +74,7 @@ void VToolOptionsPropertyBrowser::ClearPropertyBrowser() void VToolOptionsPropertyBrowser::ShowItemOptions(QGraphicsItem *item) { // This check helps to find missed tools in the switch - Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 42, "Not all tools was used in switch."); + Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43, "Not all tools was used in switch."); switch (item->type()) { @@ -177,6 +177,9 @@ void VToolOptionsPropertyBrowser::ShowItemOptions(QGraphicsItem *item) case VToolTrueDarts::Type: ShowOptionsToolTrueDarts(item); break; + case VToolRotation::Type: + ShowOptionsToolRotation(item); + break; default: break; } @@ -191,7 +194,7 @@ void VToolOptionsPropertyBrowser::UpdateOptions() } // This check helps to find missed tools in the switch - Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 42, "Not all tools was used in switch."); + Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43, "Not all tools was used in switch."); switch (currentItem->type()) { @@ -288,6 +291,9 @@ void VToolOptionsPropertyBrowser::UpdateOptions() case VToolTrueDarts::Type: UpdateOptionsToolTrueDarts(); break; + case VToolRotation::Type: + UpdateOptionsToolRotation(); + break; default: break; } @@ -323,7 +329,7 @@ void VToolOptionsPropertyBrowser::userChangedData(VProperty *property) } // This check helps to find missed tools in the switch - Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 42, "Not all tools was used in switch."); + Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43, "Not all tools was used in switch."); switch (currentItem->type()) { @@ -414,6 +420,9 @@ void VToolOptionsPropertyBrowser::userChangedData(VProperty *property) case VToolTrueDarts::Type: ChangeDataToolTrueDarts(prop); break; + case VToolRotation::Type: + ChangeDataToolRotation(prop); + break; default: break; } @@ -1525,6 +1534,12 @@ void VToolOptionsPropertyBrowser::ChangeDataToolCurveIntersectAxis(VProperty *pr } } +//--------------------------------------------------------------------------------------------------------------------- +void VToolOptionsPropertyBrowser::ChangeDataToolRotation(VProperty *property) +{ + SCASSERT(property != nullptr) +} + //--------------------------------------------------------------------------------------------------------------------- void VToolOptionsPropertyBrowser::ShowOptionsToolSinglePoint(QGraphicsItem *item) { @@ -1907,6 +1922,12 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolCurveIntersectAxis(QGraphicsIte AddPropertyFormula(tr("Angle"), i->GetFormulaAngle(), AttrAngle); } +//--------------------------------------------------------------------------------------------------------------------- +void VToolOptionsPropertyBrowser::ShowOptionsToolRotation(QGraphicsItem *item) +{ + +} + //--------------------------------------------------------------------------------------------------------------------- void VToolOptionsPropertyBrowser::UpdateOptionsToolSinglePoint() { @@ -2365,6 +2386,12 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolCurveIntersectAxis() idToProperty[AttrAngle]->setValue(valueAngle); } +//--------------------------------------------------------------------------------------------------------------------- +void VToolOptionsPropertyBrowser::UpdateOptionsToolRotation() +{ + +} + //--------------------------------------------------------------------------------------------------------------------- QStringList VToolOptionsPropertyBrowser::PropertiesList() const { diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.h b/src/app/valentina/core/vtooloptionspropertybrowser.h index 6ffd7a12b..a0e44fef0 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.h +++ b/src/app/valentina/core/vtooloptionspropertybrowser.h @@ -144,6 +144,7 @@ private: void ChangeDataToolTriangle(VPE::VProperty *property); void ChangeDataToolLineIntersectAxis(VPE::VProperty *property); void ChangeDataToolCurveIntersectAxis(VPE::VProperty *property); + void ChangeDataToolRotation(VPE::VProperty *property); void ShowOptionsToolSinglePoint(QGraphicsItem *item); void ShowOptionsToolEndLine(QGraphicsItem *item); @@ -174,6 +175,7 @@ private: void ShowOptionsToolTriangle(QGraphicsItem *item); void ShowOptionsToolLineIntersectAxis(QGraphicsItem *item); void ShowOptionsToolCurveIntersectAxis(QGraphicsItem *item); + void ShowOptionsToolRotation(QGraphicsItem *item); void UpdateOptionsToolSinglePoint(); void UpdateOptionsToolEndLine(); @@ -204,6 +206,7 @@ private: void UpdateOptionsToolTriangle(); void UpdateOptionsToolLineIntersectAxis(); void UpdateOptionsToolCurveIntersectAxis(); + void UpdateOptionsToolRotation(); }; #endif // VTOOLOPTIONSPROPERTYBROWSER_H diff --git a/src/app/valentina/dialogs/dialoghistory.cpp b/src/app/valentina/dialogs/dialoghistory.cpp index bddd259f3..c6e4fbfeb 100644 --- a/src/app/valentina/dialogs/dialoghistory.cpp +++ b/src/app/valentina/dialogs/dialoghistory.cpp @@ -208,7 +208,7 @@ void DialogHistory::FillTable() QString DialogHistory::Record(const VToolRecord &tool) { // This check helps to find missed tools in the switch - Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 42, "Not all tools was used in history."); + Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43, "Not all tools was used in history."); const QDomElement domElem = doc->elementById(tool.getId()); if (domElem.isElement() == false) @@ -384,6 +384,7 @@ QString DialogHistory::Record(const VToolRecord &tool) case Tool::NodeSpline: case Tool::NodeSplinePath: case Tool::Group: + case Tool::Rotation: return QString(); } } diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 4125aed5d..b6ddbf233 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -613,6 +613,7 @@ void MainWindow::SetToolButtonWithApply(bool checked, Tool t, const QString &cur SCASSERT(scene != nullptr); connect(scene, &VMainGraphicsScene::ChoosedObject, dialogTool, &DialogTool::ChosenObject); + connect(scene, &VMainGraphicsScene::SelectedObject, dialogTool, &DialogTool::SelectedObject); connect(dialogTool, &DialogTool::DialogClosed, this, closeDialogSlot); connect(dialogTool, &DialogTool::DialogApplied, this, applyDialogSlot); connect(dialogTool, &DialogTool::ToolTip, this, &MainWindow::ShowToolTip); @@ -1004,12 +1005,22 @@ void MainWindow::ClosedDialogUnionDetails(int result) void MainWindow::ToolGroup(bool checked) { ToolSelectGroupObjects(); - currentScene->clearSelection(); SetToolButton(checked, Tool::Group, ":/cursor/group_plus_cursor.png", tr("Select one or more objects, Enter - finish creation"), &MainWindow::ClosedDialogGroup); } +//--------------------------------------------------------------------------------------------------------------------- +void MainWindow::ToolRotation(bool checked) +{ + ToolSelectGroupObjects(); + SetToolButtonWithApply(checked, Tool::Rotation, + ":/cursor/rotation_cursor.png", + tr("Select one or more objects, Enter - confirm selection"), + &MainWindow::ClosedDialogWithApply, + &MainWindow::ApplyDialog); +} + //--------------------------------------------------------------------------------------------------------------------- void MainWindow::ClosedDialogGroup(int result) { @@ -1740,6 +1751,7 @@ void MainWindow::InitToolButtons() connect(ui->toolButtonArcWithLength, &QToolButton::clicked, this, &MainWindow::ToolArcWithLength); connect(ui->toolButtonTrueDarts, &QToolButton::clicked, this, &MainWindow::ToolTrueDarts); connect(ui->toolButtonGroup, &QToolButton::clicked, this, &MainWindow::ToolGroup); + connect(ui->toolButtonRotation, &QToolButton::clicked, this, &MainWindow::ToolRotation); } //--------------------------------------------------------------------------------------------------------------------- @@ -1780,12 +1792,16 @@ void MainWindow::mouseMove(const QPointF &scenePos) void MainWindow::CancelTool() { // This check helps to find missed tools in the switch - Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 42, "Not all tools was handled."); + Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43, "Not all tools was handled."); qCDebug(vMainWindow, "Canceling tool."); delete dialogTool; dialogTool = nullptr; qCDebug(vMainWindow, "Dialog closed."); + + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + switch ( currentTool ) { case Tool::Arrow: @@ -1907,9 +1923,10 @@ void MainWindow::CancelTool() case Tool::Group: ui->toolButtonGroup->setChecked(false); break; + case Tool::Rotation: + ui->toolButtonRotation->setChecked(false); + break; } - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); // Crash: using CRTL+Z while using line tool. // related bug report: @@ -3110,6 +3127,7 @@ void MainWindow::SetEnableTool(bool enable) ui->toolButtonArcWithLength->setEnabled(drawTools); ui->toolButtonTrueDarts->setEnabled(drawTools); ui->toolButtonGroup->setEnabled(drawTools); + ui->toolButtonRotation->setEnabled(drawTools); ui->actionLast_tool->setEnabled(drawTools); @@ -3380,7 +3398,7 @@ void MainWindow::CreateMenus() void MainWindow::LastUsedTool() { // This check helps to find missed tools in the switch - Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 42, "Not all tools was handled."); + Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43, "Not all tools was handled."); if (currentTool == lastUsedTool) { @@ -3531,6 +3549,10 @@ void MainWindow::LastUsedTool() ui->toolButtonGroup->setChecked(true); ToolGroup(true); break; + case Tool::Rotation: + ui->toolButtonRotation->setChecked(true); + ToolRotation(true); + break; } } @@ -4715,12 +4737,12 @@ void MainWindow::ToolSelectAllDrawObjects() const } //--------------------------------------------------------------------------------------------------------------------- -void MainWindow::ToolSelectGroupObjects() const +void MainWindow::ToolSelectOperationObjects() const { // Only true for rubber band selection emit EnableLabelSelection(true); emit EnablePointSelection(true); - emit EnableLineSelection(true); + emit EnableLineSelection(false); emit EnableArcSelection(true); emit EnableSplineSelection(true); emit EnableSplinePathSelection(true); @@ -4728,7 +4750,7 @@ void MainWindow::ToolSelectGroupObjects() const // Hovering emit EnableLabelHover(true); emit EnablePointHover(true); - emit EnableLineHover(true); + emit EnableLineHover(false); emit EnableArcHover(true); emit EnableSplineHover(true); emit EnableSplinePathHover(true); @@ -4738,6 +4760,17 @@ void MainWindow::ToolSelectGroupObjects() const ui->view->AllowRubberBand(true); } +//--------------------------------------------------------------------------------------------------------------------- +void MainWindow::ToolSelectGroupObjects() const +{ + ToolSelectOperationObjects(); + // Only true for rubber band selection + emit EnableLineSelection(true); + + // Hovering + emit EnableLineHover(true); +} + //--------------------------------------------------------------------------------------------------------------------- void MainWindow::ToolSelectDetail() const { diff --git a/src/app/valentina/mainwindow.h b/src/app/valentina/mainwindow.h index 98b383942..6708c07dd 100644 --- a/src/app/valentina/mainwindow.h +++ b/src/app/valentina/mainwindow.h @@ -122,6 +122,7 @@ public slots: void ToolPointOfIntersection(bool checked); void ToolUnionDetails(bool checked); void ToolGroup(bool checked); + void ToolRotation(bool checked); void ToolCutArc(bool checked); void ToolLineIntersectAxis(bool checked); void ToolCurveIntersectAxis(bool checked); @@ -372,6 +373,7 @@ private: void ToolSelectPointArc() const; void ToolSelectCurve() const; void ToolSelectAllDrawObjects() const; + void ToolSelectOperationObjects() const; void ToolSelectGroupObjects() const; void ToolSelectDetail() const; }; diff --git a/src/app/valentina/mainwindow.ui b/src/app/valentina/mainwindow.ui index 51eb11f32..92a31bb71 100644 --- a/src/app/valentina/mainwindow.ui +++ b/src/app/valentina/mainwindow.ui @@ -983,6 +983,32 @@ + + + + false + + + Rotate objects + + + ... + + + + :/toolicon/32x32/rotation.png:/toolicon/32x32/rotation.png + + + + 32 + 32 + + + + true + + + diff --git a/src/app/valentina/share/resources/cursor.qrc b/src/app/valentina/share/resources/cursor.qrc index 1063918f4..cfd41aa80 100644 --- a/src/app/valentina/share/resources/cursor.qrc +++ b/src/app/valentina/share/resources/cursor.qrc @@ -66,5 +66,7 @@ cursor/cubic_bezier_path_cursor@2x.png cursor/group_plus_cursor.png cursor/group_plus_cursor@2x.png + cursor/rotation_cursor.png + cursor/rotation_cursor@2x.png diff --git a/src/app/valentina/share/resources/cursor/rotation_cursor.png b/src/app/valentina/share/resources/cursor/rotation_cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..3a769ac46a296a570ded4c314ee7fc9a9d864345 GIT binary patch literal 836 zcmV-K1H1f*P)Mc{K~z|U?bT06(_tLP@%Q)VW+OHuq{GsRs6$kj67o{85Q3On z?l7=F5P=9mkPse<4qbxkB1upXgmsFnpr%WOXb|Kjp@=R;g+>1I5JAeE`}2G|Y|Aw? zr)}=i2Y&G5c^;nc>v^6Z&kz1*E?xXEdEihjk7|pGG(c%CiG7fA6YE)@{pDgb8`-ANw+y<@>3_R{C z^>QgW9#5i0Rc_48%pUjqgO@BzpLxCBlx^FMs&tBQ26*jqtvU~X-h^d~-yaMES4HrW z{YT6I^&(=7;TELN4h|0fs2Bhs7z}z;wMCU?5pk*V!I<<&G#Y(ZIPMqE3x4y>ce|nh O00001P)|h~lpsK5oMu$30RpDY6?7|3%8xRPg-Ee`*huDP&N&OLJ1+fg3ps*pv#`tK` zjjyI@vNmgDud!pl4;RNFPB>}o#7S(Yf9YJD_q^|O-sk7{JkNU`AGo7Cx}!T<2cRY)R2o3dLAXif0n`+P8>|n2nt`yM0BQolJFG8&s)sPm z`U9wH2pa{UY9U-_;{a48gllXpfU1MA833vZ!rN>PfU1Eo#pVI13J9AGVACN?mN3D( zfgmnzSAo{`zHy1V2z(kCUwR=N4sT1PQmqXQ4ZG*&%v~Vcj4`tf4R$J*%S{|Sc<@Rj z5-}^?pxObz5(wdN*iNT257@RmrmCI5e!#}@MRESz9aE*>80%*bKKSvsZU@2*zyz?n z(q61lBS1%2S7^Uw<-ZODf#wp%O#$(2RwC!mpZm942R8s$fcLL@s+CtxL@so71roql zMQAI!roc6jDbP8f5!earVzF;ys+>$FV=pc>UP%B6;0ri4#fr)A_j|T)zdItLPXnGp z^DW??D5!<$>W@cuxKA*2KolftvZM#ENP5}=Ujk%`EiDWXCEVl0kU>p`vE=A7* zr*Xb6S(AEtK6?mqG&ME79*st4ySsy565;#6HUL#FiC9lGHF<}k(de@G^ZWgcJ9g|i zp(;-UA1*Xs1#={kNc?HOpBsS7l%9SJ@D<>DCH7xYJw3f&1br6dbyf3G=+B0JH?dlQ^mA7iCPQB#D>_TpuO%fjk-tg?5!| zGairsQB}W%AaQJ}Rz*sDH6=(hc0_unIR=`hzBRD0qb(7!k&jD{PY0d))5$$bmZhSHx zkG~Bt7V2pA8hswo&jX#R`nVzg^Gkuwy>7Neba>%R_d@9az73qf`G9I&6^TUhAoBoJ zgi9j&cq+9s9FND(7pFdx)6al@q-eMZvM-Mwb+c`ZOyFcLRHX$LHVMlq3p@dwU8O&( zk%Imim;gQN@p!)5*Vi}c(oayk5z+rk<*K^f&9I1A^S`f%8gK_NzXDRgqrku_oLG}A ziyvmQ)^me{{r_b7M^Y^{FB{<|$ld>IRNfWa`mNgl5k9Euta=f-4(^Y@OE{7KFq_~! zI00*Lu>T*dkdf|54!@!B6i!gi0DrM9>&(3mTzJ`~yQuQX`4d&S1nxV*n$uXQqcxKg zUyG6PeaQ>1LAtA}YoBF#UIE?*7-Q%j7>Et76a#8P`}>9`aW-em$+9fZlQ_-;yeX0& zfwgUgH&jQD9&KoEZ}+ZdY;SMxeZXUdQzIhrWHR{<)Cho{o}Q1{w)dB9ZF_za3Wdt4 zR!JZb*qhJmk69@4412xycPPY{s*eGWJQ8a4dh^2~+=H_(cvXa_4jee}yW5qzPM$pJ zy?lA%b0YFJ(2oL$FqzL=M+OG^U!Ct)^#J^Szo(_;u5SWoSV-GxpdX~)>$P6=csw&x zQ&Yz0^I6l=(@o9I&7UwvPk|hvP)88qhN>J-B+ex$$}Uw80GtZ&>}>W7=xNnO#hN_M z*8CzcBf@)B*@qMCiUa(ARQYl;85>|pYOM(X1zEvh@LpBEp-K>FSZRPNH-HyJ%rnc? z5o!ql0PXGV-nO>3hrvDudIi|hFo5+9n~CwVui!u zrc5UD0abmkh%^B+b92_smKN`LG#b5CijDsQO`USa$V@3c00000NkvXXu0mjfSAZd} literal 0 HcmV?d00001 diff --git a/src/app/valentina/share/resources/toolicon.qrc b/src/app/valentina/share/resources/toolicon.qrc index 8b5d0bec5..89e67fe78 100644 --- a/src/app/valentina/share/resources/toolicon.qrc +++ b/src/app/valentina/share/resources/toolicon.qrc @@ -64,5 +64,7 @@ toolicon/32x32/cubic_bezier_path@2x.png toolicon/32x32/group_plus.png toolicon/32x32/group_plus@2x.png + toolicon/32x32/rotation.png + toolicon/32x32/rotation@2x.png diff --git a/src/app/valentina/share/resources/toolicon/32x32/rotation.png b/src/app/valentina/share/resources/toolicon/32x32/rotation.png new file mode 100644 index 0000000000000000000000000000000000000000..f1fa601333bbaac24797be6acc3dee2af16899dc GIT binary patch literal 1349 zcmV-L1-kl)P)0005>0kZ=LkpKVy8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11j0!~K~z|Uy_a8X6jc<)e`j{-Zp&JmD26}L5)6L=L^O>F0g(lj z(C*F@NH!{JOo$XggD470#0Sv_eK66ejfjT$V$3#(yE~OaqC{d8OrufLv{W0xKv591 zl+5gMWSqxDWEF4+;L8h1fqW0z0?xifB5~$FF%SxcW{G%S1J(kbar(`w zvOkmY?rv#0&^=KDVw&~4RP{x`KThF%^oZzF@pycHNd`>QtN_`sN~B0g2gnH#{Zo}J zaHA@VMVMbuNZ9N5`?f@*(X5;I77DJZX_%yXt_i5k8|oF2cN{0P*S77hLb>5^cs3Z1 z1Dk-!L%b>t$z=az;1NKFjhUvoJe~Ic)Y1~Yc(sW20k9#j_7{$m+0fkFe5#OeKGv*R zGc%LXeW3Tac@g%+JE{`2?az(@NGN3O7UAV$MO5`Y+m3I>HEktAOw(#oWu1#_FE95kj7FnbLqtZK z(qu)2|JiF02T;G?_bAZr;^y`B^*;z;IF9}{N^*HB)gQGiYwk4|AR3MKs^n6m4Dhy*? zfp`FN-_KtzD&QS-qHU@I(51@LwjGNVD*_;Bg%)WeGIrB4+?EZ1Y&LsbMAvtBPn|cG zIDmtGt59fW9FQN2<<-{K`hXi;)P<4`ByOCv?n7Nu zQm`A22LrxK>n5eDUKNogih5L~HPt_Phs2BT6OKc@xE@(Vk5708N<~dg!=!1`&b0%x za#UJGXBeX;{g;?N{g2HqaX>za$Kx0N7Xzkg-jX}kxsYvyA}1n%NF?G(Ci}OmlC|yF z8%(exMk0~&WU~KLV2X>5B@&5mpvVa~7!3Li!`lQrDZ;8bbLP%nwCJ{$wzjr(DdLu8 zT{ke0jR8ws^xuX-T}Ma9Wf-w3Tty&o{Yt=cQ4b`O{jGI%*6Q(!heFm0$KeNHrHgh% zbWljo`xew4*g!#;5dr`LrZgD8D!Uj zEC;HAs=-mc2yzNIqROEwS9*?>dW@eCB9TZS7z|GIzmb0d*2>_uc{aHF00000NkvXX Hu0mjf>!yKA literal 0 HcmV?d00001 diff --git a/src/app/valentina/share/resources/toolicon/32x32/rotation@2x.png b/src/app/valentina/share/resources/toolicon/32x32/rotation@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3a73372532088aecae5e63226a972e03604a6518 GIT binary patch literal 2719 zcmV;Q3Sjk#P)(edq2b8;D`bqi7>q6%r9_k>EIr&a5_u z*=GWJ6|l8Z&~~a$t)&&M?L@1nZDiVo&JmSubv;hF*^#(5!0)7B)0OtW1ZBVu!z%BrL=qWQomIL7T z`|AM_1~AjAjuFDsJw2x`G1?_81;FR?O(#-f04A9f)d7ABpshr_8Nk1#l%H2sReh1k zWTceNu|zzch$j-^QUJ{Wz7If{w6me6ruyoRj*hR&5lsic=bJl~D7Oi~1QTMr06byk z^A!jL#sj#4nQjGeh6&L(oleEGe*OBsQY2FW@Ob8(t|V0;;oX$KDU98M&TOVUo`mxQB>-Z@|AuE|_qbtbkZM{ece(k98ULsn(xIwx>=nF zY}~kUKuTpkfKrp635O4-Zq6?d06@gWM*osvMo(QGDzYxG1Y)uE2_jlribF(8^IL%c z0A~Kcia{crmrA8WZEbDewIV+fXllCPNoH&>K^dP)rLG-*7-|8+QUCye89rT?djf&h z`;YElCj#y5?UEV4D#c+I3x@w6Y61ACO}j2;zAKqbedO~6?od^=%BDVBh{eL20c1iCoFe?BFIW94SyNl zZfP0)UU2p)m2{xLzduS;a)7=9$eZ2y{lQOQZi!n6Ix{ct?LFC@6ncn2 zmw-VeB%~yQKtixsIz`*^mQ7#a_XnQ=a9xq=zDOiI-ZA{dj0BOb0K6k5-4u(3UoS^Y zw9fu1a`Xp)#{*0tfSEu9fKkuLZA=7aubrZG-A*JqTtpnGY1jnFF8{QS_3-LAQlM z;bW2tMzBkD*HS9$G&`aZbCp!Yxd7g!FK{b2y(N>H}upEy0K0uTrU zegx2>QXC<0MC-71OwQ|Vy+~1{Q`5AqcJx#NUT^F9io#o%QFP@Q8|HV>bE6Tt8&Ri~gSD}ic*^)wNY;1TA!1*O8W0~>e#>R8|7A{<{GaiqR z$e{^URh6^Pp1h2R)&MBCqx7Ye%AC$ltzc5cR0|;DzZjs6V&*5dZ+~lt-{0moqu&U8 zzP6@hG93r7oEgqiTq0zNSdGQj7ftw@9RtYc3qDDN#U^Ar0s7;tSr@!$=Kxh85SRwg zGG;7?0UTt;--)oBi1$lL!+8OP2xkE_ zm566BW4Z+&b3}BrriE4-A={b=`Tece1H2N)?}kV@^fA-?Xf*V)Q2|?1;YcL(w4zW` znKL=Z1HFnclW3D^{4%*y4sZ+I^%C!r%9xl`R-ApTsN&-x6bq= ztfIHZJf3-{I~@A&n6U&SztGZ&u$o!kYv+RHh};|W`C2a{lD`JXgUYAfQp|W3$UPd3 zM&GroY(#I427|$gQsO!QDu4@Ny?Zc#SBdC(UC;cvlKU6O?e6g4sWH*Q%x(Y;L}*|x zxNVgKZ~(wwBKn7vyiHNCIUEij7zw{l#O3L)p{lB)>-xA%CNq4%@=$MY{a02mLH-{W Z@E;y0-CWiwh1&oC002ovPDHLkV1i@|>9PO- literal 0 HcmV?d00001 diff --git a/src/app/valentina/share/resources/toolicon/svg/rotation.svg b/src/app/valentina/share/resources/toolicon/svg/rotation.svg new file mode 100644 index 000000000..5da456343 --- /dev/null +++ b/src/app/valentina/share/resources/toolicon/svg/rotation.svg @@ -0,0 +1,82 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index 31c89cbf0..73bba92ac 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -840,7 +840,7 @@ void VPattern::ParseLineElement(VMainGraphicsScene *scene, const QDomElement &do void VPattern::SplinesCommonAttributes(const QDomElement &domElement, quint32 &id, quint32 &idObject, quint32 &idTool) { ToolsCommonAttributes(domElement, id); - idObject = GetParametrUInt(domElement, VAbstractNode::AttrIdObject, NULL_ID_STR); + idObject = GetParametrUInt(domElement, AttrIdObject, NULL_ID_STR); idTool = GetParametrUInt(domElement, VAbstractNode::AttrIdTool, NULL_ID_STR); } @@ -1279,7 +1279,7 @@ void VPattern::ParseNodePoint(const QDomElement &domElement, const Document &par qreal my = 0; PointsCommonAttributes(domElement, id, mx, my); - const quint32 idObject = GetParametrUInt(domElement, VAbstractNode::AttrIdObject, NULL_ID_STR); + const quint32 idObject = GetParametrUInt(domElement, AttrIdObject, NULL_ID_STR); const quint32 idTool = GetParametrUInt(domElement, VAbstractNode::AttrIdTool, NULL_ID_STR); QSharedPointer point; try @@ -2330,7 +2330,7 @@ void VPattern::ParseNodeArc(const QDomElement &domElement, const Document &parse quint32 id = 0; ToolsCommonAttributes(domElement, id); - const quint32 idObject = GetParametrUInt(domElement, VAbstractNode::AttrIdObject, NULL_ID_STR); + const quint32 idObject = GetParametrUInt(domElement, AttrIdObject, NULL_ID_STR); const quint32 idTool = GetParametrUInt(domElement, VAbstractNode::AttrIdTool, NULL_ID_STR); VArc *arc = nullptr; try @@ -3130,7 +3130,7 @@ void VPattern::ToolsCommonAttributes(const QDomElement &domElement, quint32 &id) QRectF VPattern::ActiveDrawBoundingRect() const { // This check helps to find missed tools in the switch - Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 42, "Not all tools was used."); + Q_STATIC_ASSERT_X(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43, "Not all tools was used."); QRectF rec; @@ -3237,6 +3237,9 @@ QRectF VPattern::ActiveDrawBoundingRect() const case Tool::TrueDarts: rec = ToolBoundingRect(rec, tool.getId()); break; + case Tool::Rotation: + rec = ToolBoundingRect(rec, tool.getId()); + break; //These tools are not accesseble in Draw mode, but still 'history' contains them. case Tool::Detail: case Tool::UnionDetails: diff --git a/src/libs/ifc/exception/vexception.cpp b/src/libs/ifc/exception/vexception.cpp index 46413173b..f449591b2 100644 --- a/src/libs/ifc/exception/vexception.cpp +++ b/src/libs/ifc/exception/vexception.cpp @@ -170,7 +170,7 @@ VExceptionToolWasDeleted &VExceptionToolWasDeleted::operator=(const VExceptionTo * @brief raise method raise for exception */ // cppcheck-suppress unusedFunction -Q_NORETURN void VExceptionToolWasDeleted::VExceptionToolWasDeleted::raise() const +Q_NORETURN void VExceptionToolWasDeleted::raise() const { throw *this; } diff --git a/src/libs/ifc/ifcdef.cpp b/src/libs/ifc/ifcdef.cpp index dcbd260be..65d74d3ff 100644 --- a/src/libs/ifc/ifcdef.cpp +++ b/src/libs/ifc/ifcdef.cpp @@ -128,6 +128,8 @@ const QString AttrCCenter = QStringLiteral("cCenter"); const QString AttrTangent = QStringLiteral("tangent"); const QString AttrCRadius = QStringLiteral("cRadius"); const QString AttrArc = QStringLiteral("arc"); +const QString AttrSuffix = QStringLiteral("suffix"); +const QString AttrIdObject = QStringLiteral("idObject"); const QString TypeLineNone = QStringLiteral("none"); const QString TypeLineLine = QStringLiteral("hair"); diff --git a/src/libs/ifc/ifcdef.h b/src/libs/ifc/ifcdef.h index a88c39d3f..39d65b2f9 100644 --- a/src/libs/ifc/ifcdef.h +++ b/src/libs/ifc/ifcdef.h @@ -130,6 +130,8 @@ extern const QString AttrCCenter; extern const QString AttrTangent; extern const QString AttrCRadius; extern const QString AttrArc; +extern const QString AttrSuffix; +extern const QString AttrIdObject; extern const QString TypeLineNone; extern const QString TypeLineLine; diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index 8524b4f9f..e50e98cd5 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -210,7 +210,7 @@ public: signals: /** - * @brief ChangedActivDraw change active pattern peace. + * @brief ChangedActivPP change active pattern peace. * @param newName new pattern peace name. */ void ChangedActivPP(const QString &newName); diff --git a/src/libs/vgeometry/vgeometrydef.h b/src/libs/vgeometry/vgeometrydef.h index f083d1353..ae9d200a5 100644 --- a/src/libs/vgeometry/vgeometrydef.h +++ b/src/libs/vgeometry/vgeometrydef.h @@ -29,8 +29,6 @@ #ifndef VGEOMETRYDEF_H #define VGEOMETRYDEF_H -#include - enum class Draw : char { Calculation, Modeling, Layout }; enum class GOType : char { Point, Arc, EllipticalArc, Spline, SplinePath, CubicBezier, CubicBezierPath, Unknown }; enum class SplinePointPosition : char { FirstPoint, LastPoint }; diff --git a/src/libs/vmisc/def.h b/src/libs/vmisc/def.h index 9aa894976..5b6ba2ca9 100644 --- a/src/libs/vmisc/def.h +++ b/src/libs/vmisc/def.h @@ -102,6 +102,7 @@ enum class Tool : ToolVisHolderType TrueDarts, UnionDetails, Group, + Rotation, LAST_ONE_DO_NOT_USE //add new stuffs above this, this constant must be last and never used }; @@ -110,6 +111,7 @@ enum class Vis : ToolVisHolderType ControlPointSpline = static_cast(Tool::LAST_ONE_DO_NOT_USE), GraphicsSimpleTextItem, SimplePoint, + SimpleCurve, Line, Path, ToolAlongLine, @@ -139,7 +141,8 @@ enum class Vis : ToolVisHolderType ToolCutSplinePath, ToolLineIntersectAxis, ToolCurveIntersectAxis, - ToolTrueDarts + ToolTrueDarts, + ToolRotation }; enum class VarType : char { Measurement, Increment, LineLength, CurveLength, LineAngle, CurveAngle, ArcRadius, diff --git a/src/libs/vtools/dialogs/dialogs.pri b/src/libs/vtools/dialogs/dialogs.pri index 26bcfaad6..1a358d539 100644 --- a/src/libs/vtools/dialogs/dialogs.pri +++ b/src/libs/vtools/dialogs/dialogs.pri @@ -37,7 +37,8 @@ HEADERS += \ $$PWD/tools/dialogpointofintersectioncurves.h \ $$PWD/tools/dialogcubicbezier.h \ $$PWD/tools/dialogcubicbezierpath.h \ - $$PWD/tools/dialoggroup.h + $$PWD/tools/dialoggroup.h \ + $$PWD/tools/dialogrotation.h SOURCES += \ $$PWD/tools/dialogalongline.cpp \ @@ -74,7 +75,8 @@ SOURCES += \ $$PWD/tools/dialogpointofintersectioncurves.cpp \ $$PWD/tools/dialogcubicbezier.cpp \ $$PWD/tools/dialogcubicbezierpath.cpp \ - $$PWD/tools/dialoggroup.cpp + $$PWD/tools/dialoggroup.cpp \ + $$PWD/tools/dialogrotation.cpp FORMS += \ $$PWD/tools/dialogalongline.ui \ @@ -110,4 +112,5 @@ FORMS += \ $$PWD/tools/dialogpointofintersectioncurves.ui \ $$PWD/tools/dialogcubicbezier.ui \ $$PWD/tools/dialogcubicbezierpath.ui \ - $$PWD/tools/dialoggroup.ui + $$PWD/tools/dialoggroup.ui \ + $$PWD/tools/dialogrotation.ui diff --git a/src/libs/vtools/dialogs/tooldialogs.h b/src/libs/vtools/dialogs/tooldialogs.h index b9ac6d496..8383ebd91 100644 --- a/src/libs/vtools/dialogs/tooldialogs.h +++ b/src/libs/vtools/dialogs/tooldialogs.h @@ -61,6 +61,7 @@ #include "dialogs/tools/dialogpointfromarcandtangent.h" #include "dialogs/tools/dialogtruedarts.h" #include "dialogs/tools/dialoggroup.h" +#include "dialogs/tools/dialogrotation.h" #include "dialogs/support/dialogeditwrongformula.h" #include "dialogs/support/dialogundo.h" diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp new file mode 100644 index 000000000..b8d25e219 --- /dev/null +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -0,0 +1,323 @@ +/************************************************************************ + ** + ** @file dialogrotation.cpp + ** @author Roman Telezhynskyi + ** @date 10 4, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "dialogrotation.h" +#include "ui_dialogrotation.h" + +#include + +#include "../vgeometry/vpointf.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" +#include "../ifc/xml/vdomdocument.h" +#include "../../visualization/line/vistoolrotation.h" +#include "../support/dialogeditwrongformula.h" + +//--------------------------------------------------------------------------------------------------------------------- +DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogRotation), + flagAngle(false), + timerAngle(nullptr), + formulaAngle(), + formulaBaseHeightAngle(0), + objects(), + stage1(true) +{ + ui->setupUi(this); + + this->formulaBaseHeightAngle = ui->plainTextEditFormula->height(); + ui->plainTextEditFormula->installEventFilter(this); + +// ui->lineEditSuffix->setText(/*qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)*/); + + timerAngle = new QTimer(this); + connect(timerAngle, &QTimer::timeout, this, &DialogRotation::EvalAngle); + + InitOkCancelApply(ui); + + FillComboBoxPoints(ui->comboBoxOriginPoint); + +// flagName = true; + CheckState(); + + connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogRotation::SuffixChanged); + connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogRotation::FXAngle); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogRotation::AngleChanged); + connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogRotation::DeployAngleTextEdit); + + vis = new VisToolRotation(data); +} + +//--------------------------------------------------------------------------------------------------------------------- +DialogRotation::~DialogRotation() +{ + delete ui; +} + +//--------------------------------------------------------------------------------------------------------------------- +quint32 DialogRotation::GetOrigPointId() const +{ + return getCurrentObjectId(ui->comboBoxOriginPoint); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::SetOrigPointId(const quint32 &value) +{ + ChangeCurrentData(ui->comboBoxOriginPoint, value); + VisToolRotation *operation = qobject_cast(vis); + SCASSERT(operation != nullptr); + operation->SetOriginPointId(value); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString DialogRotation::GetAngle() const +{ + return qApp->TrVars()->TryFormulaFromUser(formulaAngle, qApp->Settings()->GetOsSeparator()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::SetAngle(const QString &value) +{ + formulaAngle = qApp->TrVars()->FormulaToUser(value); + // increase height if needed. + if (formulaAngle.length() > 80) + { + this->DeployAngleTextEdit(); + } + ui->plainTextEditFormula->setPlainText(formulaAngle); + + VisToolRotation *operation = qobject_cast(vis); + SCASSERT(operation != nullptr); + operation->SetAngle(formulaAngle); + + MoveCursorToEnd(ui->plainTextEditFormula); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString DialogRotation::GetSuffix() const +{ + return ui->lineEditSuffix->text(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::SetSuffix(const QString &value) +{ + ui->lineEditSuffix->setText(value); +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector DialogRotation::GetObjects() const +{ + return objects.toVector(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::ShowDialog(bool click) +{ + if (stage1 && not click) + { + if (objects.isEmpty()) + { + return; + } + + stage1 = false; + + auto scene = qApp->getCurrentScene(); + SCASSERT(scene != nullptr); + scene->clearSelection(); + + VisToolRotation *operation = qobject_cast(vis); + SCASSERT(operation != nullptr); + operation->SetObjects(objects.toVector()); + operation->VisualMode(); + + emit ToolTip("Select origin point"); + } + else if (not stage1 && prepare && click) + { + /*We will ignore click if pointer is in point circle*/ + VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); + SCASSERT(scene != nullptr); + const QSharedPointer point = data->GeometricObject(GetOrigPointId()); + const QLineF line = QLineF(point->toQPointF(), scene->getScenePos()); + + //Radius of point circle, but little bigger. Need handle with hover sizes. + const qreal radius = ToPixel(DefPointRadius/*mm*/, Unit::Mm)*1.5; + if (line.length() <= radius) + { + return; + } + + VisToolRotation *operation = qobject_cast(vis); + SCASSERT(operation != nullptr); + + SetAngle(operation->Angle());//Show in dialog angle that a user choose + setModal(true); + emit ToolTip(""); + timerAngle->start(); + show(); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::ChosenObject(quint32 id, const SceneObject &type) +{ + if (not stage1 && not prepare)// After first choose we ignore all objects + { + if (type == SceneObject::Point) + { + if (SetObject(id, ui->comboBoxOriginPoint, "")) + { + VisToolRotation *operation = qobject_cast(vis); + SCASSERT(operation != nullptr); + + connect(operation, &Visualization::ToolTip, this, &DialogTool::ShowVisToolTip); + + operation->SetOriginPointId(id); + operation->RefreshGeometry(); + + prepare = true; + } + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::SelectedObject(bool selected, quint32 object, quint32 tool) +{ + if (stage1) + { + if (selected) + { + if (not objects.contains(object)) + { + objects.append(object); + } + } + else + { + objects.removeOne(object); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::DeployAngleTextEdit() +{ + DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeightAngle); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::AngleChanged() +{ + labelEditFormula = ui->labelEditAngle; + labelResultCalculation = ui->labelResultAngle; + ValFormulaChanged(flagAngle, ui->plainTextEditFormula, timerAngle, degreeSymbol); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::FXAngle() +{ + DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + dialog->setWindowTitle(tr("Edit angle")); + dialog->SetFormula(GetAngle()); + dialog->setPostfix(VDomDocument::UnitsToStr(qApp->patternUnit(), true)); + if (dialog->exec() == QDialog::Accepted) + { + SetAngle(dialog->GetFormula()); + } + delete dialog; +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::SuffixChanged() +{ + QLineEdit* edit = qobject_cast(sender()); + if (edit) + { + const QString name = edit->text(); +// QRegularExpression rx(NameRegExp()); + if (name.isEmpty()/* || (pointName != name && not data->IsUnique(name)) || not rx.match(name).hasMatch()*/) + { + flagName = false; + ChangeColor(ui->labelSuffix, Qt::red); + } + else + { + flagName = true; + ChangeColor(ui->labelSuffix, okColor); + } + } + CheckState(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::CheckState() +{ + SCASSERT(bOk != nullptr); + bOk->setEnabled(flagAngle && flagName); + SCASSERT(bApply != nullptr); + bApply->setEnabled(bOk->isEnabled()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::ShowVisualization() +{ + AddVisualization(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::SaveData() +{ + formulaAngle = ui->plainTextEditFormula->toPlainText(); + formulaAngle.replace("\n", " "); + + VisToolRotation *operation = qobject_cast(vis); + SCASSERT(operation != nullptr); + + operation->SetObjects(objects.toVector()); + operation->SetOriginPointId(GetOrigPointId()); + operation->SetAngle(formulaAngle); + operation->RefreshGeometry(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::closeEvent(QCloseEvent *event) +{ + ui->plainTextEditFormula->blockSignals(true); + DialogTool::closeEvent(event); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::EvalAngle() +{ + labelEditFormula = ui->labelEditAngle; + Eval(ui->plainTextEditFormula->toPlainText(), flagAngle, ui->labelResultAngle, degreeSymbol, false); +} diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.h b/src/libs/vtools/dialogs/tools/dialogrotation.h new file mode 100644 index 000000000..2f30ccfc4 --- /dev/null +++ b/src/libs/vtools/dialogs/tools/dialogrotation.h @@ -0,0 +1,101 @@ +/************************************************************************ + ** + ** @file dialogrotation.h + ** @author Roman Telezhynskyi + ** @date 10 4, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef DIALOGROTATION_H +#define DIALOGROTATION_H + +#include "dialogtool.h" + +namespace Ui +{ + class DialogRotation; +} + +class DialogRotation : public DialogTool +{ + Q_OBJECT +public: + explicit DialogRotation(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + virtual ~DialogRotation(); + + quint32 GetOrigPointId() const; + void SetOrigPointId(const quint32 &value); + + QString GetAngle() const; + void SetAngle(const QString &value); + + QString GetSuffix() const; + void SetSuffix(const QString &value); + + QVector GetObjects() const; + + virtual void ShowDialog(bool click) Q_DECL_OVERRIDE; + +public slots: + virtual void ChosenObject(quint32 id, const SceneObject &type) Q_DECL_OVERRIDE; + virtual void SelectedObject(bool selected, quint32 object, quint32 tool) Q_DECL_OVERRIDE; + +private slots: + /** @brief DeployAngleTextEdit grow or shrink formula input */ + void DeployAngleTextEdit(); + void AngleChanged(); + void FXAngle(); + void SuffixChanged(); + +protected: + virtual void CheckState() Q_DECL_OVERRIDE; + virtual void ShowVisualization() Q_DECL_OVERRIDE; + + /** @brief SaveData Put dialog data in local variables */ + virtual void SaveData() Q_DECL_OVERRIDE; + virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; + +private: + Q_DISABLE_COPY(DialogRotation) + Ui::DialogRotation *ui; + + /** @brief flagAngle true if value of angle is correct */ + bool flagAngle; + + /** @brief timerAngle timer of check formula of angle */ + QTimer *timerAngle; + + /** @brief angle formula of angle */ + QString formulaAngle; + + /** @brief formulaBaseHeightAngle base height defined by dialogui */ + int formulaBaseHeightAngle; + + QList objects; + + bool stage1; + + void EvalAngle(); +}; + +#endif // DIALOGROTATION_H diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.ui b/src/libs/vtools/dialogs/tools/dialogrotation.ui new file mode 100644 index 000000000..a8bc2fbb0 --- /dev/null +++ b/src/libs/vtools/dialogs/tools/dialogrotation.ui @@ -0,0 +1,275 @@ + + + DialogRotation + + + + 0 + 0 + 309 + 189 + + + + Rotation + + + + :/icon/64x64/icon64x64.png:/icon/64x64/icon64x64.png + + + + + + + + + 0 + 0 + + + + + 16777215 + 28 + + + + Calulation + + + true + + + + + + + + 18 + 18 + + + + + 0 + 0 + + + + <html><head/><body><p>Show full calculation in message box</p></body></html> + + + + + + + + + + + + 16 + 16 + + + + true + + + + + + + + + + + + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + + + Angle: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Formula wizard + + + ... + + + + :/icon/24x24/fx.png:/icon/24x24/fx.png + + + + 24 + 24 + + + + + + + + + + + :/icon/24x24/equal.png + + + + + + + + 0 + 0 + + + + + 87 + 0 + + + + Value + + + _ + + + + + + + + + + + Origin Point: + + + + + + + + + + Suffix: + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + DialogRotation + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogRotation + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/libs/vtools/tools/drawTools/drawtools.h b/src/libs/vtools/tools/drawTools/drawtools.h index 5b0bee7ff..f52094158 100644 --- a/src/libs/vtools/tools/drawTools/drawtools.h +++ b/src/libs/vtools/tools/drawTools/drawtools.h @@ -58,5 +58,6 @@ #include "toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.h" #include "toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h" #include "toolpoint/tooldoublepoint/vtooltruedarts.h" +#include "operation/vtoolrotation.h" #endif // DRAWTOOLS_H diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp new file mode 100644 index 000000000..8372e1b0b --- /dev/null +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -0,0 +1,934 @@ +/************************************************************************ + ** + ** @file vtoolrotation.cpp + ** @author Roman Telezhynskyi + ** @date 12 4, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "vtoolrotation.h" +#include "../../../dialogs/tools/dialogrotation.h" +#include "../vgeometry/vpointf.h" +#include "../vgeometry/varc.h" +#include "../vgeometry/vellipticalarc.h" +#include "../vgeometry/vspline.h" +#include "../vgeometry/vsplinepath.h" +#include "../vgeometry/vcubicbezier.h" +#include "../vgeometry/vcubicbezierpath.h" +#include "../../../visualization/line/vistoolrotation.h" +#include "../vwidgets/vsimplepoint.h" +#include "../vwidgets/vsimplecurve.h" + +const QString VToolRotation::TagName = QStringLiteral("operation"); +const QString VToolRotation::TagItem = QStringLiteral("item"); +const QString VToolRotation::TagSource = QStringLiteral("source"); +const QString VToolRotation::TagDestination = QStringLiteral("destination"); + +//--------------------------------------------------------------------------------------------------------------------- +VToolRotation::VToolRotation(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 origPointId, + const QString &angle, const QString &suffix, const QVector &source, + const QVector &destination, const Source &typeCreation, + QGraphicsItem *parent) + : VDrawTool(doc, data, id), + QGraphicsItem(parent), + origPointId(origPointId), + angle(angle), + suffix(suffix), + source(source), + destination(destination), + rObjects() +{ + for (int i = 0; i < destination.size(); ++i) + { + const DestinationItem object = destination.at(i); + const QSharedPointer obj = data->GetGObject(object.id); + + // This check helps to find missed objects in the switch + Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects were handled."); + + switch(static_cast(obj->getType())) + { + case GOType::Point: + { + VSimplePoint *point = new VSimplePoint(object.id, QColor(baseColor), *data->GetPatternUnit(), &factor); + point->setParentItem(this); + point->SetType(GOType::Point); + connect(point, &VSimplePoint::Choosed, [this](quint32 id) + { + emit ChoosedTool(id, SceneObject::Point); + }); + connect(point, &VSimplePoint::Selected, this, &VToolRotation::ObjectSelected); + connect(point, &VSimplePoint::ShowContextMenu, this, &VToolRotation::contextMenuEvent); + connect(point, &VSimplePoint::Delete, this, &VToolRotation::DeleteFromLabel); + connect(point, &VSimplePoint::NameChangedPosition, this, &VToolRotation::LabelChangePosition); + point->RefreshGeometry(*VAbstractTool::data.GeometricObject(object.id)); + rObjects.insert(object.id, point); + break; + } + case GOType::Arc: + case GOType::EllipticalArc: + { + VSimpleCurve *curve = InitCurve(object.id, data, GOType::Arc); + connect(curve, &VSimpleCurve::Choosed, [this](quint32 id) + { + emit ChoosedTool(id, SceneObject::Arc); + }); + break; + } + case GOType::Spline: + case GOType::CubicBezier: + { + VSimpleCurve *curve = InitCurve(object.id, data, GOType::Spline); + connect(curve, &VSimpleCurve::Choosed, [this](quint32 id) + { + emit ChoosedTool(id, SceneObject::Spline); + }); + break; + } + case GOType::SplinePath: + case GOType::CubicBezierPath: + { + VSimpleCurve *curve = InitCurve(object.id, data, GOType::SplinePath); + connect(curve, &VSimpleCurve::Choosed, [this](quint32 id) + { + emit ChoosedTool(id, SceneObject::SplinePath); + }); + break; + } + case GOType::Unknown: + break; + } + } + + ToolCreation(typeCreation); +} + +//--------------------------------------------------------------------------------------------------------------------- +VToolRotation::~VToolRotation() +{} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::setDialog() +{ + SCASSERT(dialog != nullptr); + DialogRotation *dialogTool = qobject_cast(dialog); + SCASSERT(dialogTool != nullptr); + dialogTool->SetOrigPointId(origPointId); + dialogTool->SetAngle(angle); + dialogTool->SetSuffix(suffix); +} + +//--------------------------------------------------------------------------------------------------------------------- +VToolRotation *VToolRotation::Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, + VContainer *data) +{ + SCASSERT(dialog != nullptr); + DialogRotation *dialogTool = qobject_cast(dialog); + SCASSERT(dialogTool != nullptr); + const quint32 originPointId = dialogTool->GetOrigPointId(); + QString angle = dialogTool->GetAngle(); + const QString suffix = dialogTool->GetSuffix(); + const QVector source = dialogTool->GetObjects(); + VToolRotation* operation = Create(0, originPointId, angle, suffix, source, QVector(), + scene, doc, data, Document::FullParse, Source::FromGui); + if (operation != nullptr) + { + operation->dialog = dialogTool; + } + return operation; +} + +//--------------------------------------------------------------------------------------------------------------------- +VToolRotation *VToolRotation::Create(const quint32 _id, const quint32 &origin, QString &angle, const QString &suffix, + const QVector &source, + const QVector &destination, + VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, + const Document &parse, const Source &typeCreation) +{ + qreal calcAngle = 0; + + calcAngle = CheckFormula(_id, angle, data); + + const auto originPoint = *data->GeometricObject(origin); + const QPointF oPoint = originPoint.toQPointF(); + + QVector dest = destination; + + quint32 id = _id; + if (typeCreation == Source::FromGui) + { + dest.clear();// Try to avoid mistake, value must be empty + + id = data->getNextId();//Just reserve id for tool + + for (int i = 0; i < source.size(); ++i) + { + const quint32 idObject = source.at(i); + const QSharedPointer obj = data->GetGObject(idObject); + + // This check helps to find missed objects in the switch + Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects were handled."); + + switch(static_cast(obj->getType())) + { + case GOType::Point: + dest.append(CreatePoint(id, idObject, oPoint, calcAngle, suffix, data)); + break; + case GOType::Arc: + dest.append(CreateArc(id, idObject, oPoint, calcAngle, suffix, data)); + break; + case GOType::EllipticalArc: + //dest.append(CreateItem(id, idObject, oPoint, angle, suffix)); + break; + case GOType::Spline: + dest.append(CreateCurve(id, idObject, oPoint, calcAngle, suffix, data)); + break; + case GOType::SplinePath: + dest.append(CreateCurveWithSegments(id, idObject, oPoint, calcAngle, suffix, data)); + break; + case GOType::CubicBezier: + dest.append(CreateCurve(id, idObject, oPoint, calcAngle, suffix, data)); + break; + case GOType::CubicBezierPath: + dest.append(CreateCurveWithSegments(id, idObject, oPoint, calcAngle, suffix, + data)); + break; + case GOType::Unknown: + break; + } + } + } + else + { + for (int i = 0; i < source.size(); ++i) + { + const quint32 idObject = source.at(i); + const QSharedPointer obj = data->GetGObject(idObject); + + // This check helps to find missed objects in the switch + Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects were handled."); + + switch(static_cast(obj->getType())) + { + case GOType::Point: + UpdatePoint(id, idObject, oPoint, calcAngle, suffix, data, dest.at(i).id, dest.at(i).mx, + dest.at(i).my); + break; + case GOType::Arc: + UpdateArc(id, idObject, oPoint, calcAngle, suffix, data, dest.at(i).id); + break; + case GOType::EllipticalArc: + //dest.append(UpdateItem(id, idObject, oPoint, angle, suffix, data)); + break; + case GOType::Spline: + UpdateCurve(id, idObject, oPoint, calcAngle, suffix, data, dest.at(i).id); + break; + case GOType::SplinePath: + UpdateCurveWithSegments(id, idObject, oPoint, calcAngle, suffix, data, dest.at(i).id); + break; + case GOType::CubicBezier: + UpdateCurve(id, idObject, oPoint, calcAngle, suffix, data, dest.at(i).id); + break; + case GOType::CubicBezierPath: + UpdateCurveWithSegments(id, idObject, oPoint, calcAngle, suffix, data, + dest.at(i).id); + break; + case GOType::Unknown: + break; + } + } + if (parse != Document::FullParse) + { + doc->UpdateToolData(id, data); + } + } + + VDrawTool::AddRecord(id, Tool::Rotation, doc); + if (parse == Document::FullParse) + { + VToolRotation *tool = new VToolRotation(doc, data, id, origin, angle, suffix, source, dest, typeCreation); + scene->addItem(tool); + InitRotationToolConnections(scene, tool); + doc->AddTool(id, tool); + doc->IncrementReferens(originPoint.getIdTool()); + for (int i = 0; i < source.size(); ++i) + { + doc->IncrementReferens(data->GetGObject(source.at(i))->getIdTool()); + } + + for (int i = 0; i < dest.size(); ++i) + { + doc->IncrementReferens(data->GetGObject(dest.at(i).id)->getIdTool()); + } + return tool; + } + return nullptr; +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VToolRotation::getTagName() const +{ + return VToolRotation::TagName; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::setEnabled(bool enabled) +{ + this->setEnabled(enabled); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VToolRotation::Suffix() const +{ + return suffix; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::GroupVisibility(quint32 object, bool visible) +{ + if (rObjects.contains(object)) + { + VAbstractSimple *obj = rObjects.value(object); + if (obj->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(obj); + SCASSERT(item != nullptr); + item->setVisible(visible); + } + else + { + VSimpleCurve *item = qobject_cast(obj); + SCASSERT(item != nullptr); + item->setVisible(visible); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::ShowVisualization(bool show) +{ + ShowToolVisualization(show); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::FullUpdateFromFile() +{ + ReadAttributes(); + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->RefreshGeometry(*VAbstractTool::data.GeometricObject(i.key())); + } + else + { + VSimpleCurve *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->RefreshGeometry(VAbstractTool::data.GeometricObject(i.key())); + } + } + SetVisualization(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowHover(bool enabled) +{ + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->setAcceptHoverEvents(enabled); + } + else + { + VSimpleCurve *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->setAcceptHoverEvents(enabled); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowSelecting(bool enabled) +{ + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->setFlag(QGraphicsItem::ItemIsSelectable, enabled); + } + else + { + VSimpleCurve *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->setFlag(QGraphicsItem::ItemIsSelectable, enabled); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowPointHover(bool enabled) +{ + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->setAcceptHoverEvents(enabled); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowPointSelecting(bool enabled) +{ + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->setFlag(QGraphicsItem::ItemIsSelectable, enabled); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowPointLabelHover(bool enabled) +{ + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->AllowLabelHover(enabled); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowPointLabelSelecting(bool enabled) +{ + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->AllowLabelSelecting(enabled); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowSplineHover(bool enabled) +{ + AllowCurveHover(enabled, GOType::Spline); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowSplineSelecting(bool enabled) +{ + AllowCurveSelecting(enabled, GOType::Spline); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowSplinePathHover(bool enabled) +{ + AllowCurveHover(enabled, GOType::SplinePath); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowSplinePathSelecting(bool enabled) +{ + AllowCurveSelecting(enabled, GOType::SplinePath); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowArcHover(bool enabled) +{ + AllowCurveHover(enabled, GOType::Arc); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowArcSelecting(bool enabled) +{ + AllowCurveSelecting(enabled, GOType::Arc); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AddToFile() +{ + QDomElement domElement = doc->createElement(getTagName()); + QSharedPointer obj = VAbstractTool::data.GetFakeGObject(id); + SaveOptions(domElement, obj); + AddToCalculation(domElement); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::RefreshDataInFile() +{ + QDomElement domElement = doc->elementById(id); + if (domElement.isElement()) + { + QSharedPointer obj = VAbstractTool::data.GetFakeGObject(id); + SaveOptions(domElement, obj); + } + else + { + qCDebug(vTool, "Can't find tool with id = %u", id); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::SetVisualization() +{ + if (vis != nullptr) + { + VisToolRotation *visual = qobject_cast(vis); + SCASSERT(visual != nullptr); + + visual->SetObjects(source); + visual->SetOriginPointId(origPointId); + visual->SetAngle(angle); + visual->RefreshGeometry(); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +QRectF VToolRotation::boundingRect() const +{ + QRectF recTool; + const QList items = childItems(); + foreach (QGraphicsItem *item, items) + { + recTool = recTool.united(item->boundingRect()); + recTool = recTool.united(item->childrenBoundingRect()); + } + + return recTool; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + Q_UNUSED(painter); + Q_UNUSED(option); + Q_UNUSED(widget); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::Disable(bool disable, const QString &namePP) +{ + enabled = !CorrectDisable(disable, namePP); + setEnabled(enabled); + + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + i.value()->SetEnabled(enabled); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::ObjectSelected(bool selected, quint32 objId) +{ + emit ChangedToolSelection(selected, objId, id); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::DeleteFromLabel() +{ + try + { + DeleteTool(); + } + catch(const VExceptionToolWasDeleted &e) + { + Q_UNUSED(e); + return;//Leave this method immediately!!! + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::LabelChangePosition(const QPointF &pos, quint32 labelId) +{ + if (rObjects.contains(labelId)) + { + VAbstractSimple *obj = rObjects.value(labelId); + if (obj->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(obj); + SCASSERT(item != nullptr); + ChangePosition(item, labelId, pos); + } + else + { + VSimpleCurve *item = qobject_cast(obj); + SCASSERT(item != nullptr); + ChangePosition(item, labelId, pos); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::SaveDialog(QDomElement &domElement) +{ + SCASSERT(dialog != nullptr); + DialogRotation *dialogTool = qobject_cast(dialog); + SCASSERT(dialogTool != nullptr); + + doc->SetAttribute(domElement, AttrCenter, QString().setNum(dialogTool->GetOrigPointId())); + doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle()); + doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::ReadToolAttributes(const QDomElement &domElement) +{ + origPointId = doc->GetParametrUInt(domElement, AttrCenter, NULL_ID_STR); + angle = doc->GetParametrString(domElement, AttrAngle, "0"); + suffix = doc->GetParametrString(domElement, AttrSuffix); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::SaveOptions(QDomElement &tag, QSharedPointer &obj) +{ + VDrawTool::SaveOptions(tag, obj); + + doc->SetAttribute(tag, AttrCenter, QString().setNum(origPointId)); + doc->SetAttribute(tag, AttrAngle, angle); + doc->SetAttribute(tag, AttrSuffix, suffix); + + QDomElement tagObjects = doc->createElement(TagSource); + for (int i = 0; i < source.size(); ++i) + { + QDomElement item = doc->createElement(TagItem); + doc->SetAttribute(item, AttrIdObject, source.at(i)); + tagObjects.appendChild(item); + } + tag.appendChild(tagObjects); + + tagObjects = doc->createElement(TagDestination); + for (int i = 0; i < destination.size(); ++i) + { + QDomElement item = doc->createElement(TagItem); + doc->SetAttribute(item, AttrIdObject, destination.at(i).id); + doc->SetAttribute(item, AttrMx, qApp->fromPixel(destination.at(i).mx)); + doc->SetAttribute(item, AttrMy, qApp->fromPixel(destination.at(i).my)); + tagObjects.appendChild(item); + } + tag.appendChild(tagObjects); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) +{ + try + { + ContextMenu(this, event); + } + catch(const VExceptionToolWasDeleted &e) + { + Q_UNUSED(e); + return;//Leave this method immediately!!! + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::DoChangePosition(quint32 id, qreal mx, qreal my) +{ + if (rObjects.contains(id)) + { + VPointF *point = new VPointF(*VAbstractTool::data.GeometricObject(id)); + point->setMx(mx); + point->setMy(my); + VAbstractTool::data.UpdateGObject(id, point); + + VSimplePoint *item = qobject_cast(rObjects.value(id)); + SCASSERT(item != nullptr); + + item->blockSignals(true); + item->setPos(QPointF(mx, my)); + item->blockSignals(false); + item->RefreshLine(); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::UpdateNamePosition(quint32 id) +{ + const QSharedPointer point = VAbstractTool::data.GeometricObject(id); +// auto moveLabel = new MoveLabel(doc, point->mx(), point->my(), id, scene()); +// connect(moveLabel, &MoveLabel::ChangePosition, this, &VToolSinglePoint::DoChangePosition); +// qApp->getUndoStack()->push(moveLabel); +} + +//--------------------------------------------------------------------------------------------------------------------- +DestinationItem VToolRotation::CreatePoint(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data) +{ + const QSharedPointer point = data->GeometricObject(idItem); + VPointF rotated = point->Rotate(origin, angle, suffix); + rotated.setIdObject(idTool); + + DestinationItem item; + item.mx = rotated.mx(); + item.my = rotated.my(); + item.id = data->AddGObject(new VPointF(rotated)); + return item; +} + +//--------------------------------------------------------------------------------------------------------------------- +template +DestinationItem VToolRotation::CreateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data) +{ + const QSharedPointer i = data->GeometricObject(idItem); + Item rotated = i->Rotate(origin, angle, suffix); + rotated.setIdObject(idTool); + + DestinationItem item; + item.mx = INT_MAX; + item.my = INT_MAX; + item.id = data->AddGObject(new Item(rotated)); + return item; +} + +//--------------------------------------------------------------------------------------------------------------------- +DestinationItem VToolRotation::CreateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data) +{ + const DestinationItem item = CreateItem(idTool, idItem, origin, angle, suffix, data); + data->AddArc(data->GeometricObject(item.id), item.id); + return item; +} + +//--------------------------------------------------------------------------------------------------------------------- +template +DestinationItem VToolRotation::CreateCurve(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data) +{ + const DestinationItem item = CreateItem(idTool, idItem, origin, angle, suffix, data); + data->AddCurve(data->GeometricObject(item.id), item.id); + return item; +} + +//--------------------------------------------------------------------------------------------------------------------- +template +DestinationItem VToolRotation::CreateCurveWithSegments(quint32 idTool, quint32 idItem, const QPointF &origin, + qreal angle, const QString &suffix, VContainer *data) +{ + const DestinationItem item = CreateItem(idTool, idItem, origin, angle, suffix, data); + data->AddCurveWithSegments(data->GeometricObject(item.id), item.id); + return item; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::UpdatePoint(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id, qreal mx, qreal my) +{ + const QSharedPointer point = data->GeometricObject(idItem); + VPointF rotated = point->Rotate(origin, angle, suffix); + rotated.setIdObject(idTool); + rotated.setMx(mx); + rotated.setMy(my); + data->UpdateGObject(id, new VPointF(rotated)); +} + +//--------------------------------------------------------------------------------------------------------------------- +template +void VToolRotation::UpdateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id) +{ + const QSharedPointer i = data->GeometricObject(idItem); + Item rotated = i->Rotate(origin, angle, suffix); + rotated.setIdObject(idTool); + data->UpdateGObject(id, new Item(rotated)); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::UpdateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id) +{ + UpdateItem(idTool, idItem, origin, angle, suffix, data, id); + data->AddArc(data->GeometricObject(id), id); +} + +//--------------------------------------------------------------------------------------------------------------------- +template +void VToolRotation::UpdateCurve(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id) +{ + UpdateItem(idTool, idItem, origin, angle, suffix, data, id); + data->AddCurve(data->GeometricObject(id), id); +} + +//--------------------------------------------------------------------------------------------------------------------- +template +void VToolRotation::UpdateCurveWithSegments(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id) +{ + UpdateItem(idTool, idItem, origin, angle, suffix, data, id); + data->AddCurveWithSegments(data->GeometricObject(id), id); +} + +//--------------------------------------------------------------------------------------------------------------------- +template +void VToolRotation::ShowToolVisualization(bool show) +{ + if (show) + { + if (vis == nullptr) + { + AddVisualization(); + SetVisualization(); + } + else + { + if (T *visual = qobject_cast(vis)) + { + visual->show(); + } + } + } + else + { + delete vis; + vis = nullptr; + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::ChangePosition(QGraphicsItem *item, quint32 id, const QPointF &pos) +{ + const QPointF p = pos - item->pos(); + DoChangePosition(id, p.x(), p.y()); + UpdateNamePosition(id); +} + +//--------------------------------------------------------------------------------------------------------------------- +VSimpleCurve *VToolRotation::InitCurve(quint32 id, VContainer *data, GOType curveType) +{ + VSimpleCurve *curve = new VSimpleCurve(id, QColor(baseColor), *data->GetPatternUnit(), &factor); + curve->setParentItem(this); + curve->SetType(curveType); + connect(curve, &VSimpleCurve::Selected, this, &VToolRotation::ObjectSelected); + connect(curve, &VSimpleCurve::ShowContextMenu, this, &VToolRotation::contextMenuEvent); + curve->RefreshGeometry(VAbstractTool::data.GeometricObject(id)); + rObjects.insert(id, curve); + return curve; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowCurveHover(bool enabled, GOType type) +{ + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() != GOType::Point) + { + VSimpleCurve *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + if (item->GetType() == type) + { + item->setAcceptHoverEvents(enabled); + } + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AllowCurveSelecting(bool enabled, GOType type) +{ + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() != GOType::Point) + { + VSimpleCurve *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + if (item->GetType() == type) + { + item->setFlag(QGraphicsItem::ItemIsSelectable, enabled); + } + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::AddSourceObject(VAbstractPattern *doc, QDomElement &domElement, quint32 objId) +{ + QDomElement obj = doc->createElement(TagItem); + doc->SetAttribute(obj, AttrIdObject, objId); + domElement.appendChild(obj); +} + +//--------------------------------------------------------------------------------------------------------------------- +template +void VToolRotation::InitRotationToolConnections(VMainGraphicsScene *scene, T *tool) +{ + SCASSERT(scene != nullptr); + SCASSERT(tool != nullptr); + + InitDrawToolConnections(scene, tool); + + QObject::connect(scene, &VMainGraphicsScene::EnablePointItemHover, tool, &T::AllowPointHover); + QObject::connect(scene, &VMainGraphicsScene::EnablePointItemSelection, tool, &T::AllowPointSelecting); + QObject::connect(scene, &VMainGraphicsScene::EnableLabelItemHover, tool, &T::AllowPointLabelHover); + QObject::connect(scene, &VMainGraphicsScene::EnableLabelItemSelection, tool, &T::AllowPointLabelSelecting); + + QObject::connect(scene, &VMainGraphicsScene::EnableSplineItemHover, tool, &T::AllowSplineHover); + QObject::connect(scene, &VMainGraphicsScene::EnableSplineItemSelection, tool, &T::AllowSplineSelecting); + + QObject::connect(scene, &VMainGraphicsScene::EnableSplinePathItemHover, tool, &T::AllowSplinePathHover); + QObject::connect(scene, &VMainGraphicsScene::EnableSplinePathItemSelection, tool, &T::AllowSplinePathSelecting); + + QObject::connect(scene, &VMainGraphicsScene::EnableArcItemHover, tool, &T::AllowArcHover); + QObject::connect(scene, &VMainGraphicsScene::EnableArcItemSelection, tool, &T::AllowArcSelecting); +} diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h new file mode 100644 index 000000000..34c78b9c9 --- /dev/null +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h @@ -0,0 +1,175 @@ +/************************************************************************ + ** + ** @file vtoolrotation.h + ** @author Roman Telezhynskyi + ** @date 12 4, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef VTOOLROTATION_H +#define VTOOLROTATION_H + +#include "../vdrawtool.h" + +struct DestinationItem +{ + quint32 id; + qreal mx; + qreal my; +}; + +class VAbstractSimple; +class VSimpleCurve; + +class VToolRotation : public VDrawTool, public QGraphicsItem +{ + Q_OBJECT +public: + VToolRotation(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 origPointId, + const QString &angle, const QString &suffix, const QVector &source, + const QVector &destination, const Source &typeCreation, + QGraphicsItem *parent = nullptr); + virtual ~VToolRotation(); + virtual void setDialog() Q_DECL_OVERRIDE; + static VToolRotation* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, + VContainer *data); + static VToolRotation* Create(const quint32 _id, const quint32 &origin, QString &angle, const QString &suffix, + const QVector &source, const QVector &destination, + VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, + const Document &parse, const Source &typeCreation); + // cppcheck-suppress duplInheritedMember + static const QString TagName; + static const QString TagItem; + static const QString TagSource; + static const QString TagDestination; + virtual int type() const Q_DECL_OVERRIDE {return Type;} + enum { Type = UserType + static_cast(Tool::Rotation)}; + virtual QString getTagName() const Q_DECL_OVERRIDE; + + void setEnabled(bool enabled); + + QString Suffix() const; + + virtual void GroupVisibility(quint32 object, bool visible) Q_DECL_OVERRIDE; + virtual void ShowVisualization(bool show) Q_DECL_OVERRIDE; + + virtual QRectF boundingRect() const Q_DECL_OVERRIDE; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) Q_DECL_OVERRIDE; + +public slots: + virtual void FullUpdateFromFile() Q_DECL_OVERRIDE; + + virtual void AllowHover(bool enabled) Q_DECL_OVERRIDE; + virtual void AllowSelecting(bool enabled) Q_DECL_OVERRIDE; + + void AllowPointHover(bool enabled); + void AllowPointSelecting(bool enabled); + + void AllowPointLabelHover(bool enabled); + void AllowPointLabelSelecting(bool enabled); + + void AllowSplineHover(bool enabled); + void AllowSplineSelecting(bool enabled); + + void AllowSplinePathHover(bool enabled); + void AllowSplinePathSelecting(bool enabled); + + void AllowArcHover(bool enabled); + void AllowArcSelecting(bool enabled); + + virtual void Disable(bool disable, const QString &namePP) Q_DECL_OVERRIDE; + void ObjectSelected(bool selected, quint32 objId); + void DeleteFromLabel(); + void LabelChangePosition(const QPointF &pos, quint32 labelId); + +protected: + virtual void AddToFile() Q_DECL_OVERRIDE; + virtual void RefreshDataInFile() Q_DECL_OVERRIDE; + virtual void SetVisualization() Q_DECL_OVERRIDE; + virtual void SaveDialog(QDomElement &domElement) Q_DECL_OVERRIDE; + virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; + virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) Q_DECL_OVERRIDE; + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) Q_DECL_OVERRIDE; + +private slots: + void DoChangePosition(quint32 id, qreal mx, qreal my); + +private: + Q_DISABLE_COPY(VToolRotation) + quint32 origPointId; + QString angle; + QString suffix; + + QVector source; + QVector destination; + + QMap rObjects; + + void UpdateNamePosition(quint32 id); + + static DestinationItem CreatePoint(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data); + + template + static DestinationItem CreateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data); + static DestinationItem CreateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data); + template + static DestinationItem CreateCurve(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data); + template + static DestinationItem CreateCurveWithSegments(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data); + + static void UpdatePoint(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id, qreal mx, qreal my); + template + static void UpdateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id); + static void UpdateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id); + template + static void UpdateCurve(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id); + template + static void UpdateCurveWithSegments(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + const QString &suffix, VContainer *data, quint32 id); + + template + void ShowToolVisualization(bool show); + + void ChangePosition(QGraphicsItem *item, quint32 id, const QPointF &pos); + + VSimpleCurve *InitCurve(quint32 id, VContainer *data, GOType curveType); + + template + static void InitRotationToolConnections(VMainGraphicsScene *scene, T *tool); + + void AllowCurveHover(bool enabled, GOType type); + void AllowCurveSelecting(bool enabled, GOType type); + + static void AddSourceObject(VAbstractPattern *doc, QDomElement &domElement, quint32 objId); +}; + +#endif // VTOOLROTATION_H diff --git a/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp b/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp index fc7662e9b..88199a6ec 100644 --- a/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp +++ b/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp @@ -31,7 +31,6 @@ #include -const QString VAbstractNode::AttrIdObject = QStringLiteral("idObject"); const QString VAbstractNode::AttrIdTool = QStringLiteral("idTool"); //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/nodeDetails/vabstractnode.h b/src/libs/vtools/tools/nodeDetails/vabstractnode.h index 9ebc987ce..270faad67 100644 --- a/src/libs/vtools/tools/nodeDetails/vabstractnode.h +++ b/src/libs/vtools/tools/nodeDetails/vabstractnode.h @@ -45,7 +45,6 @@ public: VAbstractNode(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &idNode, const quint32 &idTool, QObject *parent = nullptr); virtual ~VAbstractNode() Q_DECL_OVERRIDE {} - static const QString AttrIdObject; static const QString AttrIdTool; virtual void ShowVisualization(bool show) Q_DECL_OVERRIDE; virtual void incrementReferens() Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/tools/tools.pri b/src/libs/vtools/tools/tools.pri index a8ed05c2e..36b6f986c 100644 --- a/src/libs/vtools/tools/tools.pri +++ b/src/libs/vtools/tools/tools.pri @@ -49,7 +49,8 @@ HEADERS += \ $$PWD/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.h \ $$PWD/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h \ $$PWD/drawTools/toolcurve/vtoolcubicbezier.h \ - $$PWD/drawTools/toolcurve/vtoolcubicbezierpath.h + $$PWD/drawTools/toolcurve/vtoolcubicbezierpath.h \ + $$PWD/drawTools/operation/vtoolrotation.h SOURCES += \ $$PWD/vtooldetail.cpp \ @@ -96,4 +97,5 @@ SOURCES += \ $$PWD/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.cpp \ $$PWD/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp \ $$PWD/drawTools/toolcurve/vtoolcubicbezier.cpp \ - $$PWD/drawTools/toolcurve/vtoolcubicbezierpath.cpp + $$PWD/drawTools/toolcurve/vtoolcubicbezierpath.cpp \ + $$PWD/drawTools/operation/vtoolrotation.cpp diff --git a/src/libs/vtools/visualization/line/vistoolrotation.cpp b/src/libs/vtools/visualization/line/vistoolrotation.cpp new file mode 100644 index 000000000..fd0aed0f3 --- /dev/null +++ b/src/libs/vtools/visualization/line/vistoolrotation.cpp @@ -0,0 +1,258 @@ +/************************************************************************ + ** + ** @file vistoolrotation.cpp + ** @author Roman Telezhynskyi + ** @date 11 4, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "vistoolrotation.h" +#include "../vgeometry/vpointf.h" +#include "../vgeometry/varc.h" +#include "../vgeometry/vellipticalarc.h" +#include "../vgeometry/vspline.h" +#include "../vgeometry/vsplinepath.h" +#include "../vgeometry/vcubicbezier.h" +#include "../vgeometry/vcubicbezierpath.h" +#include "../vpatterndb/vcontainer.h" + +#include + +//--------------------------------------------------------------------------------------------------------------------- +VisToolRotation::VisToolRotation(const VContainer *data, QGraphicsItem *parent) + : VisLine(data, parent), + angle(INT_MIN), + objects(), + point(nullptr), + xAxis(nullptr), + supportColor2(Qt::darkGreen), + points(), + curves() +{ + point = InitPoint(supportColor2, this); + xAxis = InitItem(supportColor2, this); +} + +//--------------------------------------------------------------------------------------------------------------------- +VisToolRotation::~VisToolRotation() +{ + qDeleteAll(points); + qDeleteAll(curves); +} + +//--------------------------------------------------------------------------------------------------------------------- +#if defined(Q_CC_GNU) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wswitch-default" +#endif + +void VisToolRotation::RefreshGeometry() +{ + if (objects.isEmpty()) + { + return; + } + + if (object1Id != NULL_ID) + { + const QPointF origin = Visualization::data->GeometricObject(object1Id)->toQPointF(); + DrawPoint(point, origin, supportColor2); + + QLineF rLine; + if (VFuzzyComparePossibleNulls(angle, INT_MIN)) + { + rLine = QLineF(origin, Visualization::scenePos); + + if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) + { + rLine.setAngle(CorrectAngle(rLine.angle())); + } + + rLine.setP2(Ray(origin, rLine.angle())); + } + else + { + rLine = QLineF(origin, Ray(origin, angle)); + } + + if (mode == Mode::Creation) + { + DrawLine(this, rLine, supportColor2, Qt::DashLine); + DrawLine(xAxis, QLineF(origin, Ray(origin, 0)), supportColor2, Qt::DashLine); + } + + Visualization::toolTip = tr("Rotating angle = %1°, Shift - sticking angle, " + "Mouse click - finish creation").arg(rLine.angle()); + + int iPoint = -1; + int iCurve = -1; + for (int i = 0; i < objects.size(); ++i) + { + const quint32 id = objects.at(i); + const QSharedPointer obj = Visualization::data->GetGObject(id); + + // This check helps to find missed objects in the switch + Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects was handled."); + + switch(static_cast(obj->getType())) + { + case GOType::Point: + { + const QSharedPointer p = Visualization::data->GeometricObject(id); + + ++iPoint; + QGraphicsEllipseItem *point = GetPoint(iPoint); + DrawPoint(point, p->toQPointF(), supportColor); + + ++iPoint; + point = GetPoint(iPoint); + DrawPoint(point, p->Rotate(origin, angle).toQPointF(), supportColor); + break; + } + case GOType::Arc: + { + iCurve = AddCurve(origin, id, iCurve); + break; + } + case GOType::EllipticalArc: + { + iCurve = AddCurve(origin, id, iCurve); + break; + } + case GOType::Spline: + { + iCurve = AddCurve(origin, id, iCurve); + break; + } + case GOType::SplinePath: + { + iCurve = AddCurve(origin, id, iCurve); + break; + } + case GOType::CubicBezier: + { + iCurve = AddCurve(origin, id, iCurve); + break; + } + case GOType::CubicBezierPath: + { + iCurve = AddCurve(origin, id, iCurve); + break; + } + case GOType::Unknown: + break; + } + } + } +} + +#if defined(Q_CC_GNU) + #pragma GCC diagnostic pop +#endif + +//--------------------------------------------------------------------------------------------------------------------- +void VisToolRotation::SetObjects(QVector objects) +{ + this->objects = objects; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VisToolRotation::SetOriginPointId(quint32 value) +{ + object1Id = value; +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VisToolRotation::Angle() const +{ + return QString::number(line().angle()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VisToolRotation::SetAngle(const QString &expression) +{ + angle = FindVal(expression, Visualization::data->PlainVariables()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VisToolRotation::VisualMode(const quint32 &pointId) +{ + Q_UNUSED(pointId); + VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); + SCASSERT(scene != nullptr); + + Visualization::scenePos = scene->getScenePos(); + RefreshGeometry(); + + AddOnScene(); +} + +//--------------------------------------------------------------------------------------------------------------------- +QGraphicsEllipseItem *VisToolRotation::GetPoint(quint32 i) +{ + if (not points.isEmpty() && static_cast(points.size() - 1) >= i) + { + return points.at(static_cast(i)); + } + else + { + auto point = InitPoint(supportColor, this); + points.append(point); + return point; + } + return nullptr; +} + +//--------------------------------------------------------------------------------------------------------------------- +QGraphicsPathItem *VisToolRotation::GetCurve(quint32 i) +{ + if (not curves.isEmpty() && static_cast(curves.size() - 1) >= i) + { + return curves.at(static_cast(i)); + } + else + { + auto curve = InitItem(supportColor, this); + curves.append(curve); + return curve; + } + return nullptr; +} + +//--------------------------------------------------------------------------------------------------------------------- +template +int VisToolRotation::AddCurve(const QPointF &origin, quint32 id, int i) +{ + const QSharedPointer curve = Visualization::data->GeometricObject(id); + + ++i; + QGraphicsPathItem *path = GetCurve(i); + DrawPath(path, curve->GetPath(PathDirection::Hide), mainColor, Qt::SolidLine, Qt::RoundCap); + + ++i; + path = GetCurve(i); + const Item rotated = curve->Rotate(origin, angle); + DrawPath(path, rotated.GetPath(PathDirection::Hide), mainColor, Qt::SolidLine, Qt::RoundCap); + + return i; +} diff --git a/src/libs/vtools/visualization/line/vistoolrotation.h b/src/libs/vtools/visualization/line/vistoolrotation.h new file mode 100644 index 000000000..00f36202a --- /dev/null +++ b/src/libs/vtools/visualization/line/vistoolrotation.h @@ -0,0 +1,71 @@ +/************************************************************************ + ** + ** @file vistoolrotation.h + ** @author Roman Telezhynskyi + ** @date 11 4, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef VISTOOLROTATION_H +#define VISTOOLROTATION_H + +#include "visline.h" + +class VisToolRotation : public VisLine +{ + Q_OBJECT +public: + explicit VisToolRotation(const VContainer *data, QGraphicsItem *parent = nullptr); + virtual ~VisToolRotation(); + + virtual void RefreshGeometry() Q_DECL_OVERRIDE; + + void SetObjects(QVector objects); + void SetOriginPointId(quint32 value); + + QString Angle() const; + void SetAngle(const QString &expression); + + virtual void VisualMode(const quint32 &pointId = NULL_ID) Q_DECL_OVERRIDE; + + virtual int type() const Q_DECL_OVERRIDE {return Type;} + enum { Type = UserType + static_cast(Vis::ToolRotation)}; +private: + Q_DISABLE_COPY(VisToolRotation) + qreal angle; + QVector objects; + QGraphicsEllipseItem *point; + QGraphicsLineItem *xAxis; + QColor supportColor2; + + QVector points; + QVector curves; + + QGraphicsEllipseItem * GetPoint(quint32 i); + QGraphicsPathItem * GetCurve(quint32 i); + + template + int AddCurve(const QPointF &origin, quint32 id, int i); +}; + +#endif // VISTOOLROTATION_H diff --git a/src/libs/vtools/visualization/visualization.pri b/src/libs/vtools/visualization/visualization.pri index 1f47f42be..fce6c442e 100644 --- a/src/libs/vtools/visualization/visualization.pri +++ b/src/libs/vtools/visualization/visualization.pri @@ -32,7 +32,8 @@ HEADERS += \ $$PWD/path/vistoolarcwithlength.h \ $$PWD/path/vistoolpointofintersectioncurves.h \ $$PWD/path/vistoolcubicbezier.h \ - $$PWD/path/vistoolcubicbezierpath.h + $$PWD/path/vistoolcubicbezierpath.h \ + visualization/line/vistoolrotation.h SOURCES += \ $$PWD/visualization.cpp \ @@ -65,4 +66,5 @@ SOURCES += \ $$PWD/path/vistoolarcwithlength.cpp \ $$PWD/path/vistoolpointofintersectioncurves.cpp \ $$PWD/path/vistoolcubicbezier.cpp \ - $$PWD/path/vistoolcubicbezierpath.cpp + $$PWD/path/vistoolcubicbezierpath.cpp \ + visualization/line/vistoolrotation.cpp diff --git a/src/libs/vwidgets/vabstractsimple.cpp b/src/libs/vwidgets/vabstractsimple.cpp index 1649df7f6..44b890f79 100644 --- a/src/libs/vwidgets/vabstractsimple.cpp +++ b/src/libs/vwidgets/vabstractsimple.cpp @@ -28,16 +28,32 @@ #include "vabstractsimple.h" +#include +#include + //--------------------------------------------------------------------------------------------------------------------- VAbstractSimple::VAbstractSimple(quint32 id, const QColor ¤tColor, Unit patternUnit, qreal *factor, QObject *parent) - :QObject(parent), id (id), factor(factor), currentColor(currentColor), enabled(true), patternUnit(patternUnit) + : QObject(parent), + id (id), + factor(factor), + currentColor(currentColor), + enabled(true), + patternUnit(patternUnit), + selectionType(SelectionType::ByMouseRelease), + type(GOType::Unknown) {} //--------------------------------------------------------------------------------------------------------------------- VAbstractSimple::~VAbstractSimple() {} +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractSimple::ToolSelectionType(const SelectionType &type) +{ + selectionType = type; +} + //--------------------------------------------------------------------------------------------------------------------- QColor VAbstractSimple::CorrectColor(const QColor &color) const { @@ -50,3 +66,28 @@ QColor VAbstractSimple::CorrectColor(const QColor &color) const return Qt::gray; } } + +//--------------------------------------------------------------------------------------------------------------------- +// cppcheck-suppress unusedFunction +QColor VAbstractSimple::GetCurrentColor() const +{ + return currentColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractSimple::ContextMenu(QGraphicsSceneContextMenuEvent *event) +{ + emit ShowContextMenu(event); +} + +//--------------------------------------------------------------------------------------------------------------------- +GOType VAbstractSimple::GetType() const +{ + return type; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractSimple::SetType(const GOType &value) +{ + type = value; +} diff --git a/src/libs/vwidgets/vabstractsimple.h b/src/libs/vwidgets/vabstractsimple.h index bcebd73d1..7bcbac68c 100644 --- a/src/libs/vwidgets/vabstractsimple.h +++ b/src/libs/vwidgets/vabstractsimple.h @@ -33,6 +33,11 @@ #include #include #include "../vmisc/def.h" +#include "../vgeometry/vgeometrydef.h" +#include "../ifc/ifcdef.h" + +class QGraphicsSceneContextMenuEvent; +class QGraphicsItem; class VAbstractSimple : public QObject { @@ -40,9 +45,22 @@ class VAbstractSimple : public QObject public: VAbstractSimple(quint32 id, const QColor ¤tColor, Unit patternUnit, qreal *factor = nullptr, QObject *parent = 0); - virtual ~VAbstractSimple() Q_DECL_OVERRIDE; + virtual ~VAbstractSimple(); - virtual void ChangedActivDraw(const bool &flag)=0; + virtual void ToolSelectionType(const SelectionType &type); + + QColor GetCurrentColor() const; + + virtual void SetEnabled(bool enabled) { Q_UNUSED(enabled); } + + GOType GetType() const; + void SetType(const GOType &value); + +signals: + void ShowContextMenu(QGraphicsSceneContextMenuEvent * event); + +public slots: + void ContextMenu(QGraphicsSceneContextMenuEvent * event); protected: /** @brief id spline id. */ @@ -58,10 +76,20 @@ protected: Unit patternUnit; + SelectionType selectionType; + + GOType type; + QColor CorrectColor(const QColor &color) const; template - void SetPen(T *item, const QColor &color, qreal width); + void SetPen(T *item, const QColor &color, qreal width); + + template + void SimpleChangedActivDraw(T *item, const bool &flag); + + template + void SetSimpleCurrentColor(T *item, const QColor &value); private: Q_DISABLE_COPY(VAbstractSimple) @@ -81,4 +109,21 @@ void VAbstractSimple::SetPen(T *item, const QColor &color, qreal width) } } +//--------------------------------------------------------------------------------------------------------------------- +template +void VAbstractSimple::SimpleChangedActivDraw(T *item, const bool &flag) +{ + enabled = flag; + item->setEnabled(enabled); + SetPen(item, currentColor, WidthHairLine(patternUnit)); +} + +//--------------------------------------------------------------------------------------------------------------------- +template +void VAbstractSimple::SetSimpleCurrentColor(T *item, const QColor &value) +{ + currentColor = value; + SetPen(item, CorrectColor(currentColor), item->pen().widthF()); +} + #endif // VABSTRACTSIMPLE_H diff --git a/src/libs/vwidgets/vsimplecurve.cpp b/src/libs/vwidgets/vsimplecurve.cpp new file mode 100644 index 000000000..6e93d62a1 --- /dev/null +++ b/src/libs/vwidgets/vsimplecurve.cpp @@ -0,0 +1,133 @@ +/************************************************************************ + ** + ** @file vsimplecurve.cpp + ** @author Roman Telezhynskyi + ** @date 7 5, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "vsimplecurve.h" +#include "../ifc/ifcdef.h" +#include "../vgeometry/vabstractcurve.h" + +#include +#include + +//--------------------------------------------------------------------------------------------------------------------- +VSimpleCurve::VSimpleCurve(quint32 id, const QColor ¤tColor, Unit patternUnit, qreal *factor, QObject *parent) + : VAbstractSimple(id, currentColor, patternUnit, factor, parent), + QGraphicsPathItem(), + m_curve() +{ + this->setBrush(QBrush(Qt::NoBrush)); + SetPen(this, currentColor, WidthHairLine(patternUnit)); + this->setAcceptHoverEvents(true); +} + +//--------------------------------------------------------------------------------------------------------------------- +VSimpleCurve::~VSimpleCurve() +{ +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::SetCurrentColor(const QColor &value) +{ + SetSimpleCurrentColor(this, value); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::ChangedActivDraw(bool flag) +{ + SimpleChangedActivDraw(this, flag); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::RefreshGeometry(const QSharedPointer &curve) +{ + m_curve = curve; + if (not curve.isNull()) + { + setPath(curve->GetPath(PathDirection::Hide)); + } + else + { + qWarning() << tr("VSimpleCurve::RefreshGeometry: pointer to curve is null."); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::CurveChoosed() +{ + emit Choosed(id); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::CurveSelected(bool selected) +{ + emit Selected(selected, id); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + // Special for not selectable item first need to call standard mousePressEvent then accept event + QGraphicsPathItem::mousePressEvent(event); + if (selectionType == SelectionType::ByMouseRelease) + { + event->accept();// Special for not selectable item first need to call standard mousePressEvent then accept event + } + else + { + if (event->button() == Qt::LeftButton) + { + emit Choosed(id); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + if (selectionType == SelectionType::ByMouseRelease) + { + if (event->button() == Qt::LeftButton) + { + emit Choosed(id); + } + } + QGraphicsPathItem::mouseReleaseEvent(event); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::hoverEnterEvent(QGraphicsSceneHoverEvent *event) +{ + SetPen(this, currentColor, WidthMainLine(patternUnit)); + QGraphicsPathItem::hoverEnterEvent(event); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) +{ + SetPen(this, currentColor, WidthHairLine(patternUnit)); + QGraphicsPathItem::hoverLeaveEvent(event); +} diff --git a/src/libs/vwidgets/vsimplecurve.h b/src/libs/vwidgets/vsimplecurve.h new file mode 100644 index 000000000..8fb35fe8c --- /dev/null +++ b/src/libs/vwidgets/vsimplecurve.h @@ -0,0 +1,78 @@ +/************************************************************************ + ** + ** @file vsimplecurve.h + ** @author Roman Telezhynskyi + ** @date 7 5, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef VSIMPLECURVE_H +#define VSIMPLECURVE_H + +#include "vabstractsimple.h" + +#include + +class VAbstractCurve; + +class VSimpleCurve : public VAbstractSimple, public QGraphicsPathItem +{ + Q_OBJECT +public: + VSimpleCurve(quint32 id, const QColor ¤tColor, Unit patternUnit, qreal *factor = nullptr, + QObject *parent = nullptr); + virtual ~VSimpleCurve(); + + virtual int type() const Q_DECL_OVERRIDE {return Type;} + enum { Type = UserType + static_cast(Vis::SimpleCurve)}; + + void SetCurrentColor(const QColor &value); + + void ChangedActivDraw(bool flag); + void RefreshGeometry(const QSharedPointer &curve); +signals: + /** + * @brief Choosed send id when clicked. + * @param id point id. + */ + void Choosed(quint32 id); + void Selected(bool selected, quint32 id); + void Delete(); + +public slots: + void CurveChoosed(); + void CurveSelected(bool selected); + +protected: + virtual void mousePressEvent( QGraphicsSceneMouseEvent * event ) Q_DECL_OVERRIDE; + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) Q_DECL_OVERRIDE; + virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent * event ) Q_DECL_OVERRIDE; + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ) Q_DECL_OVERRIDE; + +private: + Q_DISABLE_COPY(VSimpleCurve) + + QSharedPointer m_curve; +}; + +#endif // VSIMPLECURVE_H diff --git a/src/libs/vwidgets/vsimplepoint.cpp b/src/libs/vwidgets/vsimplepoint.cpp index 0fafd4051..5819efc1b 100644 --- a/src/libs/vwidgets/vsimplepoint.cpp +++ b/src/libs/vwidgets/vsimplepoint.cpp @@ -39,8 +39,7 @@ //--------------------------------------------------------------------------------------------------------------------- VSimplePoint::VSimplePoint(quint32 id, const QColor ¤tColor, Unit patternUnit, qreal *factor, QObject *parent) :VAbstractSimple(id, currentColor, patternUnit, factor, parent), QGraphicsEllipseItem(), - radius(ToPixel(DefPointRadius/*mm*/, Unit::Mm)), namePoint(nullptr), lineName(nullptr), - selectionType(SelectionType::ByMouseRelease) + radius(ToPixel(DefPointRadius/*mm*/, Unit::Mm)), namePoint(nullptr), lineName(nullptr) { namePoint = new VGraphicsSimpleTextItem(this); connect(namePoint, &VGraphicsSimpleTextItem::ShowContextMenu, this, &VSimplePoint::ContextMenu); @@ -59,11 +58,15 @@ VSimplePoint::~VSimplePoint() {} //--------------------------------------------------------------------------------------------------------------------- -void VSimplePoint::ChangedActivDraw(const bool &flag) +void VSimplePoint::SetCurrentColor(const QColor &value) { - enabled = flag; - setEnabled(enabled); - SetPen(this, currentColor, WidthHairLine(patternUnit)); + SetSimpleCurrentColor(this, value); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSimplePoint::ChangedActivDraw(bool flag) +{ + SimpleChangedActivDraw(this, flag); } //--------------------------------------------------------------------------------------------------------------------- @@ -150,7 +153,7 @@ void VSimplePoint::AllowLabelSelecting(bool enabled) //--------------------------------------------------------------------------------------------------------------------- void VSimplePoint::ToolSelectionType(const SelectionType &type) { - selectionType = type; + VAbstractSimple::ToolSelectionType(type); namePoint->LabelSelectionType(type); } @@ -175,13 +178,7 @@ void VSimplePoint::PointSelected(bool selected) //--------------------------------------------------------------------------------------------------------------------- void VSimplePoint::ChangedPosition(const QPointF &pos) { - emit NameChangedPosition(pos); -} - -//--------------------------------------------------------------------------------------------------------------------- -void VSimplePoint::ContextMenu(QGraphicsSceneContextMenuEvent *event) -{ - emit ShowContextMenu(event); + emit NameChangedPosition(pos, id); } //--------------------------------------------------------------------------------------------------------------------- @@ -242,17 +239,3 @@ QVariant VSimplePoint::itemChange(QGraphicsItem::GraphicsItemChange change, cons return QGraphicsEllipseItem::itemChange(change, value); } - -//--------------------------------------------------------------------------------------------------------------------- -// cppcheck-suppress unusedFunction -QColor VSimplePoint::GetCurrentColor() const -{ - return currentColor; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VSimplePoint::SetCurrentColor(const QColor &value) -{ - currentColor = value; - SetPen(this, CorrectColor(currentColor), pen().widthF()); -} diff --git a/src/libs/vwidgets/vsimplepoint.h b/src/libs/vwidgets/vsimplepoint.h index c412ee594..642757805 100644 --- a/src/libs/vwidgets/vsimplepoint.h +++ b/src/libs/vwidgets/vsimplepoint.h @@ -44,21 +44,19 @@ public: QObject *parent = nullptr); virtual ~VSimplePoint() Q_DECL_OVERRIDE; - virtual void ChangedActivDraw(const bool &flag) Q_DECL_OVERRIDE; - virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Vis::SimplePoint)}; + void ChangedActivDraw(bool flag); void RefreshLine(); void RefreshGeometry(const VPointF &point); - void SetEnabled(bool enabled); + virtual void SetEnabled(bool enabled) Q_DECL_OVERRIDE; void EnableToolMove(bool move); void AllowLabelHover(bool enabled); void AllowLabelSelecting(bool enabled); - void ToolSelectionType(const SelectionType &type); + virtual void ToolSelectionType(const SelectionType &type) Q_DECL_OVERRIDE; - QColor GetCurrentColor() const; - void SetCurrentColor(const QColor &value); + void SetCurrentColor(const QColor &value); signals: /** * @brief Choosed send id when clicked. @@ -66,16 +64,14 @@ signals: */ void Choosed(quint32 id); void Selected(bool selected, quint32 id); - void ShowContextMenu(QGraphicsSceneContextMenuEvent * event); void Delete(); - void NameChangedPosition(const QPointF &pos); + void NameChangedPosition(const QPointF &pos, quint32 id); public slots: void DeleteFromLabel(); void PointChoosed(); void PointSelected(bool selected); void ChangedPosition(const QPointF &pos); - void ContextMenu(QGraphicsSceneContextMenuEvent * event); protected: virtual void mousePressEvent( QGraphicsSceneMouseEvent * event ) Q_DECL_OVERRIDE; @@ -95,9 +91,6 @@ private: /** @brief lineName line what we see if label moved too away from point. */ QGraphicsLineItem *lineName; - - SelectionType selectionType; - }; #endif // VSIMPLEPOINT_H diff --git a/src/libs/vwidgets/vwidgets.pri b/src/libs/vwidgets/vwidgets.pri index 619eb87e5..d80356e60 100644 --- a/src/libs/vwidgets/vwidgets.pri +++ b/src/libs/vwidgets/vwidgets.pri @@ -9,7 +9,8 @@ SOURCES += \ $$PWD/vgraphicssimpletextitem.cpp \ $$PWD/vsimplepoint.cpp \ $$PWD/vabstractsimple.cpp \ - $$PWD/vnobrushscalepathitem.cpp + $$PWD/vnobrushscalepathitem.cpp \ + $$PWD/vsimplecurve.cpp win32-msvc*:SOURCES += $$PWD/stable.cpp @@ -22,4 +23,5 @@ HEADERS += \ $$PWD/vgraphicssimpletextitem.h \ $$PWD/vsimplepoint.h \ $$PWD/vabstractsimple.h \ - $$PWD/vnobrushscalepathitem.h + $$PWD/vnobrushscalepathitem.h \ + $$PWD/vsimplecurve.h From fc4054e49e6ebd2970f6f47a50a84cf45af51802 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 13 May 2016 16:50:30 +0300 Subject: [PATCH 05/41] Undocommand move a label of rotated point. --HG-- branch : feature --- .../drawTools/operation/vtoolrotation.cpp | 7 +- .../vtools/undocommands/rotationmovelabel.cpp | 177 ++++++++++++++++++ .../vtools/undocommands/rotationmovelabel.h | 91 +++++++++ src/libs/vtools/undocommands/undocommands.pri | 6 +- src/libs/vtools/undocommands/vundocommand.h | 3 +- 5 files changed, 278 insertions(+), 6 deletions(-) create mode 100644 src/libs/vtools/undocommands/rotationmovelabel.cpp create mode 100644 src/libs/vtools/undocommands/rotationmovelabel.h diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 8372e1b0b..3e0e62cd0 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -38,6 +38,7 @@ #include "../../../visualization/line/vistoolrotation.h" #include "../vwidgets/vsimplepoint.h" #include "../vwidgets/vsimplecurve.h" +#include "../../../undocommands/rotationmovelabel.h" const QString VToolRotation::TagName = QStringLiteral("operation"); const QString VToolRotation::TagItem = QStringLiteral("item"); @@ -702,9 +703,9 @@ void VToolRotation::DoChangePosition(quint32 id, qreal mx, qreal my) void VToolRotation::UpdateNamePosition(quint32 id) { const QSharedPointer point = VAbstractTool::data.GeometricObject(id); -// auto moveLabel = new MoveLabel(doc, point->mx(), point->my(), id, scene()); -// connect(moveLabel, &MoveLabel::ChangePosition, this, &VToolSinglePoint::DoChangePosition); -// qApp->getUndoStack()->push(moveLabel); + auto moveLabel = new RotationMoveLabel(this->id, doc, point->mx(), point->my(), id, scene()); + connect(moveLabel, &RotationMoveLabel::ChangePosition, this, &VToolRotation::DoChangePosition); + qApp->getUndoStack()->push(moveLabel); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/undocommands/rotationmovelabel.cpp b/src/libs/vtools/undocommands/rotationmovelabel.cpp new file mode 100644 index 000000000..12712a264 --- /dev/null +++ b/src/libs/vtools/undocommands/rotationmovelabel.cpp @@ -0,0 +1,177 @@ +/************************************************************************ + ** + ** @file moverotationlabel.cpp + ** @author Roman Telezhynskyi + ** @date 13 5, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "rotationmovelabel.h" +#include "../tools/drawTools/operation/vtoolrotation.h" + +//--------------------------------------------------------------------------------------------------------------------- +RotationMoveLabel::RotationMoveLabel(quint32 idTool, VAbstractPattern *doc, double x, double y, quint32 idPoint, + QGraphicsScene *scene, QUndoCommand *parent) + : VUndoCommand(QDomElement(), doc, parent), + m_oldMx(0.0), + m_oldMy(0.0), + m_newMx(x), + m_newMy(y), + m_isRedo(false), + m_scene(scene), + m_idTool(idTool) +{ + setText(tr("move point label")); + nodeId = idPoint; + qCDebug(vUndo, "Tool id %u", m_idTool); + qCDebug(vUndo, "Point id %u", nodeId); + + qCDebug(vUndo, "Label new Mx %f", m_newMx); + qCDebug(vUndo, "Label new My %f", m_newMy); + + SCASSERT(scene != nullptr); + QDomElement element = GetDestinationObject(m_idTool, nodeId); + if (element.isElement()) + { + m_oldMx = qApp->toPixel(doc->GetParametrDouble(element, AttrMx, "0.0")); + m_oldMy = qApp->toPixel(doc->GetParametrDouble(element, AttrMy, "0.0")); + + qCDebug(vUndo, "Label old Mx %f", m_oldMx); + qCDebug(vUndo, "Label old My %f", m_oldMy); + } + else + { + qCDebug(vUndo, "Can't find point with id = %u.", nodeId); + return; + } +} + +//--------------------------------------------------------------------------------------------------------------------- +RotationMoveLabel::~RotationMoveLabel() +{ +} + +//--------------------------------------------------------------------------------------------------------------------- +void RotationMoveLabel::undo() +{ + qCDebug(vUndo, "Undo."); + + Do(m_oldMx, m_oldMy); + m_isRedo = true; + emit ChangePosition(nodeId, m_oldMx, m_oldMy); +} + +//--------------------------------------------------------------------------------------------------------------------- +void RotationMoveLabel::redo() +{ + qCDebug(vUndo, "Redo."); + + Do(m_newMx, m_newMy); + if (m_isRedo) + { + emit ChangePosition(nodeId, m_newMx, m_newMy); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +bool RotationMoveLabel::mergeWith(const QUndoCommand *command) +{ + const RotationMoveLabel *moveCommand = static_cast(command); + SCASSERT(moveCommand != nullptr); + + if (moveCommand->GetToolId() != m_idTool && moveCommand->GetPointId() != nodeId) + { + return false; + } + + qCDebug(vUndo, "Mergin undo."); + m_newMx = moveCommand->getNewMx(); + m_newMy = moveCommand->getNewMy(); + qCDebug(vUndo, "Label new Mx %f", m_newMx); + qCDebug(vUndo, "Label new My %f", m_newMy); + return true; +} + +//--------------------------------------------------------------------------------------------------------------------- +int RotationMoveLabel::id() const +{ + return static_cast(UndoCommand::RotationMoveLabel); +} + +//--------------------------------------------------------------------------------------------------------------------- +void RotationMoveLabel::Do(double mx, double my) +{ + qCDebug(vUndo, "New mx %f", mx); + qCDebug(vUndo, "New my %f", my); + + QDomElement domElement = GetDestinationObject(m_idTool, nodeId); + if (not domElement.isNull() && domElement.isElement()) + { + doc->SetAttribute(domElement, AttrMx, QString().setNum(qApp->fromPixel(mx))); + doc->SetAttribute(domElement, AttrMy, QString().setNum(qApp->fromPixel(my))); + } + else + { + qCDebug(vUndo, "Can't find point with id = %u.", nodeId); + return; + } +} + +//--------------------------------------------------------------------------------------------------------------------- +QDomElement RotationMoveLabel::GetDestinationObject(quint32 idTool, quint32 idPoint) const +{ + const QDomElement tool = doc->elementById(idTool); + if (tool.isElement()) + { + QDomElement correctDest; + const QDomNodeList nodeList = tool.childNodes(); + for (qint32 i = 0; i < nodeList.size(); ++i) + { + const QDomElement dest = nodeList.at(i).toElement(); + if (not dest.isNull() && dest.isElement() && dest.tagName() == VToolRotation::TagDestination) + { + correctDest = dest; + break; + } + } + + if (not correctDest.isNull()) + { + const QDomNodeList destObjects = correctDest.childNodes(); + for (qint32 i = 0; i < destObjects.size(); ++i) + { + const QDomElement obj = destObjects.at(i).toElement(); + if (not obj.isNull() && obj.isElement()) + { + const quint32 id = doc->GetParametrUInt(obj, AttrIdObject, NULL_ID_STR); + if (idPoint == id) + { + return obj; + } + } + } + } + } + + return QDomElement(); +} diff --git a/src/libs/vtools/undocommands/rotationmovelabel.h b/src/libs/vtools/undocommands/rotationmovelabel.h new file mode 100644 index 000000000..fe19ffe0c --- /dev/null +++ b/src/libs/vtools/undocommands/rotationmovelabel.h @@ -0,0 +1,91 @@ +/************************************************************************ + ** + ** @file moverotationlabel.h + ** @author Roman Telezhynskyi + ** @date 13 5, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef ROTATIONMOVELABEL_H +#define ROTATIONMOVELABEL_H + +#include "vundocommand.h" + +class QGraphicsScene; + +class RotationMoveLabel : public VUndoCommand +{ + Q_OBJECT +public: + RotationMoveLabel(quint32 idTool, VAbstractPattern *doc, double x, double y, quint32 idPoint, QGraphicsScene *scene, + QUndoCommand *parent = nullptr); + virtual ~RotationMoveLabel(); + virtual void undo() Q_DECL_OVERRIDE; + virtual void redo() Q_DECL_OVERRIDE; + virtual bool mergeWith(const QUndoCommand *command) Q_DECL_OVERRIDE; + virtual int id() const Q_DECL_OVERRIDE; + quint32 GetPointId() const; + quint32 GetToolId() const; + double getNewMx() const; + double getNewMy() const; +signals: + void ChangePosition(quint32 id, qreal mx, qreal my); +private: + Q_DISABLE_COPY(RotationMoveLabel) + double m_oldMx; + double m_oldMy; + double m_newMx; + double m_newMy; + bool m_isRedo; + QGraphicsScene *m_scene; + quint32 m_idTool; + + void Do(double mx, double my); + QDomElement GetDestinationObject(quint32 idTool, quint32 idPoint) const; +}; + +//--------------------------------------------------------------------------------------------------------------------- +inline quint32 RotationMoveLabel::GetPointId() const +{ + return nodeId; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline double RotationMoveLabel::getNewMx() const +{ + return m_newMx; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline double RotationMoveLabel::getNewMy() const +{ + return m_newMy; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline quint32 RotationMoveLabel::GetToolId() const +{ + return m_idTool; +} + +#endif // ROTATIONMOVELABEL_H diff --git a/src/libs/vtools/undocommands/undocommands.pri b/src/libs/vtools/undocommands/undocommands.pri index 0ce6cb9ec..ffd3417e4 100644 --- a/src/libs/vtools/undocommands/undocommands.pri +++ b/src/libs/vtools/undocommands/undocommands.pri @@ -20,7 +20,8 @@ HEADERS += \ $$PWD/movelabel.h \ $$PWD/movedoublelabel.h \ $$PWD/addgroup.h \ - $$PWD/delgroup.h + $$PWD/delgroup.h \ + $$PWD/rotationmovelabel.h SOURCES += \ $$PWD/addtocalc.cpp \ @@ -41,4 +42,5 @@ SOURCES += \ $$PWD/movelabel.cpp \ $$PWD/movedoublelabel.cpp \ $$PWD/addgroup.cpp \ - $$PWD/delgroup.cpp + $$PWD/delgroup.cpp \ + $$PWD/rotationmovelabel.cpp diff --git a/src/libs/vtools/undocommands/vundocommand.h b/src/libs/vtools/undocommands/vundocommand.h index b97134e6b..e86cfce82 100644 --- a/src/libs/vtools/undocommands/vundocommand.h +++ b/src/libs/vtools/undocommands/vundocommand.h @@ -49,7 +49,8 @@ enum class UndoCommand: char { AddPatternPiece, DeletePatternPiece, RenamePP, MoveLabel, - MoveDoubleLabel + MoveDoubleLabel, + RotationMoveLabel }; class VPattern; From c8a041e4f26120f2acd08daf7d856d8012af8c3f Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 13 May 2016 18:05:35 +0300 Subject: [PATCH 06/41] Refactoring undocommands move label. --HG-- branch : feature --- .../drawTools/operation/vtoolrotation.cpp | 4 +- .../tooldoublepoint/vtooldoublepoint.cpp | 7 +- .../toolsinglepoint/vtoolsinglepoint.cpp | 4 +- .../undocommands/label/moveabstractlabel.cpp | 73 ++++++++++++ .../moveabstractlabel.h} | 61 +++++----- .../{ => label}/movedoublelabel.cpp | 109 +++++------------- .../{ => label}/movedoublelabel.h | 54 +++------ .../undocommands/{ => label}/movelabel.cpp | 60 +++------- .../vtools/undocommands/label/movelabel.h | 49 ++++++++ .../{ => label}/rotationmovelabel.cpp | 47 ++------ .../{ => label}/rotationmovelabel.h | 46 ++------ src/libs/vtools/undocommands/undocommands.pri | 14 ++- 12 files changed, 238 insertions(+), 290 deletions(-) create mode 100644 src/libs/vtools/undocommands/label/moveabstractlabel.cpp rename src/libs/vtools/undocommands/{movelabel.h => label/moveabstractlabel.h} (62%) rename src/libs/vtools/undocommands/{ => label}/movedoublelabel.cpp (55%) rename src/libs/vtools/undocommands/{ => label}/movedoublelabel.h (60%) rename src/libs/vtools/undocommands/{ => label}/movelabel.cpp (64%) create mode 100644 src/libs/vtools/undocommands/label/movelabel.h rename src/libs/vtools/undocommands/{ => label}/rotationmovelabel.cpp (80%) rename src/libs/vtools/undocommands/{ => label}/rotationmovelabel.h (61%) diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 3e0e62cd0..9adf237bf 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -38,7 +38,7 @@ #include "../../../visualization/line/vistoolrotation.h" #include "../vwidgets/vsimplepoint.h" #include "../vwidgets/vsimplecurve.h" -#include "../../../undocommands/rotationmovelabel.h" +#include "../../../undocommands/label/rotationmovelabel.h" const QString VToolRotation::TagName = QStringLiteral("operation"); const QString VToolRotation::TagItem = QStringLiteral("item"); @@ -703,7 +703,7 @@ void VToolRotation::DoChangePosition(quint32 id, qreal mx, qreal my) void VToolRotation::UpdateNamePosition(quint32 id) { const QSharedPointer point = VAbstractTool::data.GeometricObject(id); - auto moveLabel = new RotationMoveLabel(this->id, doc, point->mx(), point->my(), id, scene()); + auto moveLabel = new RotationMoveLabel(this->id, doc, point->mx(), point->my(), id); connect(moveLabel, &RotationMoveLabel::ChangePosition, this, &VToolRotation::DoChangePosition); qApp->getUndoStack()->push(moveLabel); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp index 8e7729788..fd4c267ac 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp @@ -29,7 +29,7 @@ #include "vtooldoublepoint.h" #include "../vwidgets/vsimplepoint.h" #include "../vgeometry/vpointf.h" -#include "../../../../undocommands/movedoublelabel.h" +#include "../../../../undocommands/label/movedoublelabel.h" #include @@ -244,7 +244,7 @@ void VToolDoublePoint::UpdateNamePosition(quint32 id) { const VPointF *p1 = VAbstractTool::data.GeometricObject(p1id).data(); - auto moveLabel = new MoveDoubleLabel(doc, p1->mx(), p1->my(), DoublePoint::FirstPoint, this->id, p1id, scene()); + auto moveLabel = new MoveDoubleLabel(doc, p1->mx(), p1->my(), DoublePoint::FirstPoint, this->id, p1id); connect(moveLabel, &MoveDoubleLabel::ChangePosition, this, &VToolDoublePoint::DoChangePosition); qApp->getUndoStack()->push(moveLabel); } @@ -252,8 +252,7 @@ void VToolDoublePoint::UpdateNamePosition(quint32 id) { const VPointF *p2 = VAbstractTool::data.GeometricObject(p2id).data(); - auto moveLabel = new MoveDoubleLabel(doc, p2->mx(), p2->my(), DoublePoint::SecondPoint, this->id, p2id, - scene()); + auto moveLabel = new MoveDoubleLabel(doc, p2->mx(), p2->my(), DoublePoint::SecondPoint, this->id, p2id); connect(moveLabel, &MoveDoubleLabel::ChangePosition, this, &VToolDoublePoint::DoChangePosition); qApp->getUndoStack()->push(moveLabel); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp index be9c4edb9..f69bbc565 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp @@ -30,7 +30,7 @@ #include "../vmisc/logging.h" #include "../vgeometry/vpointf.h" #include "../vwidgets/vgraphicssimpletextitem.h" -#include "../../../../undocommands/movelabel.h" +#include "../../../../undocommands/label/movelabel.h" #include @@ -122,7 +122,7 @@ void VToolSinglePoint::NameChangePosition(const QPointF &pos) void VToolSinglePoint::UpdateNamePosition(quint32 id) { const QSharedPointer point = VAbstractTool::data.GeometricObject(id); - auto moveLabel = new MoveLabel(doc, point->mx(), point->my(), id, scene()); + auto moveLabel = new MoveLabel(doc, point->mx(), point->my(), id); connect(moveLabel, &MoveLabel::ChangePosition, this, &VToolSinglePoint::DoChangePosition); qApp->getUndoStack()->push(moveLabel); } diff --git a/src/libs/vtools/undocommands/label/moveabstractlabel.cpp b/src/libs/vtools/undocommands/label/moveabstractlabel.cpp new file mode 100644 index 000000000..c44a1868d --- /dev/null +++ b/src/libs/vtools/undocommands/label/moveabstractlabel.cpp @@ -0,0 +1,73 @@ +/************************************************************************ + ** + ** @file moveabstractlabel.cpp + ** @author Roman Telezhynskyi + ** @date 13 5, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "moveabstractlabel.h" + +//--------------------------------------------------------------------------------------------------------------------- +MoveAbstractLabel::MoveAbstractLabel(VAbstractPattern *doc, quint32 pointId, double x, double y, + QUndoCommand *parent) + : VUndoCommand(QDomElement(), doc, parent), + m_oldMx(0.0), + m_oldMy(0.0), + m_newMx(x), + m_newMy(y), + m_isRedo(false) +{ + nodeId = pointId; + qCDebug(vUndo, "Point id %u", nodeId); + + qCDebug(vUndo, "Label new Mx %f", m_newMx); + qCDebug(vUndo, "Label new My %f", m_newMy); +} + +//--------------------------------------------------------------------------------------------------------------------- +MoveAbstractLabel::~MoveAbstractLabel() +{ +} + +//--------------------------------------------------------------------------------------------------------------------- +void MoveAbstractLabel::undo() +{ + qCDebug(vUndo, "Undo."); + + Do(m_oldMx, m_oldMy); + m_isRedo = true; + emit ChangePosition(nodeId, m_oldMx, m_oldMy); +} + +//--------------------------------------------------------------------------------------------------------------------- +void MoveAbstractLabel::redo() +{ + qCDebug(vUndo, "Redo."); + + Do(m_newMx, m_newMy); + if (m_isRedo) + { + emit ChangePosition(nodeId, m_newMx, m_newMy); + } +} diff --git a/src/libs/vtools/undocommands/movelabel.h b/src/libs/vtools/undocommands/label/moveabstractlabel.h similarity index 62% rename from src/libs/vtools/undocommands/movelabel.h rename to src/libs/vtools/undocommands/label/moveabstractlabel.h index a3a04167d..da52003f9 100644 --- a/src/libs/vtools/undocommands/movelabel.h +++ b/src/libs/vtools/undocommands/label/moveabstractlabel.h @@ -1,14 +1,14 @@ /************************************************************************ ** - ** @file movelabel.h + ** @file moveabstractlabel.h ** @author Roman Telezhynskyi - ** @date 25 12, 2014 + ** @date 13 5, 2016 ** ** @brief ** @copyright ** This source code is part of the Valentine project, a pattern making ** program, whose allow create and modeling patterns of clothing. - ** Copyright (C) 2013-2015 Valentina project + ** Copyright (C) 2016 Valentina project ** All Rights Reserved. ** ** Valentina is free software: you can redistribute it and/or modify @@ -26,56 +26,55 @@ ** *************************************************************************/ -#ifndef MOVELABEL_H -#define MOVELABEL_H +#ifndef MOVEABSTRACTLABEL_H +#define MOVEABSTRACTLABEL_H -#include "vundocommand.h" +#include "../vundocommand.h" -class QGraphicsScene; - -class MoveLabel : public VUndoCommand +class MoveAbstractLabel : public VUndoCommand { Q_OBJECT public: - MoveLabel(VAbstractPattern *doc, const double &x, const double &y, const quint32 &id, QGraphicsScene *scene, - QUndoCommand *parent = 0); - virtual ~MoveLabel() Q_DECL_OVERRIDE; + MoveAbstractLabel(VAbstractPattern *doc, quint32 pointId, double x, double y, QUndoCommand *parent = nullptr); + virtual ~MoveAbstractLabel(); + virtual void undo() Q_DECL_OVERRIDE; virtual void redo() Q_DECL_OVERRIDE; - virtual bool mergeWith(const QUndoCommand *command) Q_DECL_OVERRIDE; - virtual int id() const Q_DECL_OVERRIDE; - quint32 getPointId() const; - double getNewMx() const; - double getNewMy() const; - void Do(double mx, double my); + + quint32 GetPointId() const; + double GetNewMx() const; + double GetNewMy() const; + signals: void ChangePosition(quint32 id, qreal mx, qreal my); +protected: + double m_oldMx; + double m_oldMy; + double m_newMx; + double m_newMy; + bool m_isRedo; + + virtual void Do(double mx, double my)=0; private: - Q_DISABLE_COPY(MoveLabel) - double oldMx; - double oldMy; - double newMx; - double newMy; - bool isRedo; - QGraphicsScene *scene; + Q_DISABLE_COPY(MoveAbstractLabel) }; //--------------------------------------------------------------------------------------------------------------------- -inline quint32 MoveLabel::getPointId() const +inline quint32 MoveAbstractLabel::GetPointId() const { return nodeId; } //--------------------------------------------------------------------------------------------------------------------- -inline double MoveLabel::getNewMx() const +inline double MoveAbstractLabel::GetNewMx() const { - return newMx; + return m_newMx; } //--------------------------------------------------------------------------------------------------------------------- -inline double MoveLabel::getNewMy() const +inline double MoveAbstractLabel::GetNewMy() const { - return newMy; + return m_newMy; } -#endif // MOVELABEL_H +#endif // MOVEABSTRACTLABEL_H diff --git a/src/libs/vtools/undocommands/movedoublelabel.cpp b/src/libs/vtools/undocommands/label/movedoublelabel.cpp similarity index 55% rename from src/libs/vtools/undocommands/movedoublelabel.cpp rename to src/libs/vtools/undocommands/label/movedoublelabel.cpp index d2c8fe6bb..960a49409 100644 --- a/src/libs/vtools/undocommands/movedoublelabel.cpp +++ b/src/libs/vtools/undocommands/label/movedoublelabel.cpp @@ -27,21 +27,14 @@ *************************************************************************/ #include "movedoublelabel.h" -#include "../tools/vabstracttool.h" -#include "../../vwidgets/vmaingraphicsview.h" - -#include -#include +#include "../vmisc/vabstractapplication.h" //--------------------------------------------------------------------------------------------------------------------- MoveDoubleLabel::MoveDoubleLabel(VAbstractPattern *doc, const double &x, const double &y, DoublePoint type, - quint32 tooId, quint32 pointId, QGraphicsScene *scene, QUndoCommand *parent) - : VUndoCommand(QDomElement(), doc, parent), - oldMx(0.0), oldMy(0.0), - newMx(x), newMy(y), - scene(scene), type(type), - pointId(pointId), - isRedo(false) + quint32 toolId, quint32 pointId, QUndoCommand *parent) + : MoveAbstractLabel(doc, pointId, x, y, parent), + m_type(type), + m_idTool(toolId) { if (type == DoublePoint::FirstPoint) { @@ -51,44 +44,25 @@ MoveDoubleLabel::MoveDoubleLabel(VAbstractPattern *doc, const double &x, const d { setText(tr("move the second dart label")); } - nodeId = tooId; - qCDebug(vUndo, "Point id %u", nodeId); - if (type == DoublePoint::FirstPoint) - { - qCDebug(vUndo, "Label new Mx1 %f", newMx); - qCDebug(vUndo, "Label new My1 %f", newMy); - } - else - { - qCDebug(vUndo, "Label new Mx2 %f", newMx); - qCDebug(vUndo, "Label new My2 %f", newMy); - } - - SCASSERT(scene != nullptr); - QDomElement domElement = doc->elementById(tooId); + const QDomElement domElement = doc->elementById(m_idTool); if (domElement.isElement()) { if (type == DoublePoint::FirstPoint) { - oldMx = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMx1, "0.0")); - oldMy = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMy1, "0.0")); - } - else - { - oldMx = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMx2, "0.0")); - oldMy = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMy2, "0.0")); - } + m_oldMx = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMx1, "0.0")); + m_oldMy = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMy1, "0.0")); - if (type == DoublePoint::FirstPoint) - { - qCDebug(vUndo, "Label old Mx1 %f", oldMx); - qCDebug(vUndo, "Label old My1 %f", oldMy); + qCDebug(vUndo, "Label old Mx1 %f", m_oldMx); + qCDebug(vUndo, "Label old My1 %f", m_oldMy); } else { - qCDebug(vUndo, "Label old Mx2 %f", oldMx); - qCDebug(vUndo, "Label old My2 %f", oldMy); + m_oldMx = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMx2, "0.0")); + m_oldMy = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMy2, "0.0")); + + qCDebug(vUndo, "Label old Mx2 %f", m_oldMx); + qCDebug(vUndo, "Label old My2 %f", m_oldMy); } } else @@ -102,52 +76,31 @@ MoveDoubleLabel::MoveDoubleLabel(VAbstractPattern *doc, const double &x, const d MoveDoubleLabel::~MoveDoubleLabel() {} -//--------------------------------------------------------------------------------------------------------------------- -void MoveDoubleLabel::undo() -{ - qCDebug(vUndo, "Undo."); - - Do(oldMx, oldMy); - isRedo = true; - emit ChangePosition(pointId, oldMx, oldMy); -} - -//--------------------------------------------------------------------------------------------------------------------- -void MoveDoubleLabel::redo() -{ - qCDebug(vUndo, "Redo."); - - Do(newMx, newMy); - if (isRedo) - { - emit ChangePosition(pointId, newMx, newMy); - } -} - //--------------------------------------------------------------------------------------------------------------------- bool MoveDoubleLabel::mergeWith(const QUndoCommand *command) { const MoveDoubleLabel *moveCommand = static_cast(command); SCASSERT(moveCommand != nullptr); - if (moveCommand->getPointId() != nodeId || moveCommand->getPointType() != type || - moveCommand->getLabelId() != pointId) + if (moveCommand->GetPointId() != nodeId || + moveCommand->GetPointType() != m_type || + moveCommand->GetToolId() != m_idTool) { return false; } - newMx = moveCommand->getNewMx(); - newMy = moveCommand->getNewMy(); + m_newMx = moveCommand->GetNewMx(); + m_newMy = moveCommand->GetNewMy(); - if (type == DoublePoint::FirstPoint) + if (m_type == DoublePoint::FirstPoint) { - qCDebug(vUndo, "Label new Mx1 %f", newMx); - qCDebug(vUndo, "Label new My1 %f", newMy); + qCDebug(vUndo, "Label new Mx1 %f", m_newMx); + qCDebug(vUndo, "Label new My1 %f", m_newMy); } else { - qCDebug(vUndo, "Label new Mx2 %f", newMx); - qCDebug(vUndo, "Label new My2 %f", newMy); + qCDebug(vUndo, "Label new Mx2 %f", m_newMx); + qCDebug(vUndo, "Label new My2 %f", m_newMy); } return true; } @@ -158,16 +111,10 @@ int MoveDoubleLabel::id() const return static_cast(UndoCommand::MoveDoubleLabel); } -//--------------------------------------------------------------------------------------------------------------------- -quint32 MoveDoubleLabel::getLabelId() const -{ - return pointId; -} - //--------------------------------------------------------------------------------------------------------------------- void MoveDoubleLabel::Do(double mx, double my) { - if (type == DoublePoint::FirstPoint) + if (m_type == DoublePoint::FirstPoint) { qCDebug(vUndo, "New mx1 %f", mx); qCDebug(vUndo, "New my1 %f", my); @@ -178,10 +125,10 @@ void MoveDoubleLabel::Do(double mx, double my) qCDebug(vUndo, "New my2 %f", my); } - QDomElement domElement = doc->elementById(nodeId); + QDomElement domElement = doc->elementById(m_idTool); if (domElement.isElement()) { - if (type == DoublePoint::FirstPoint) + if (m_type == DoublePoint::FirstPoint) { doc->SetAttribute(domElement, AttrMx1, QString().setNum(qApp->fromPixel(mx))); doc->SetAttribute(domElement, AttrMy1, QString().setNum(qApp->fromPixel(my))); diff --git a/src/libs/vtools/undocommands/movedoublelabel.h b/src/libs/vtools/undocommands/label/movedoublelabel.h similarity index 60% rename from src/libs/vtools/undocommands/movedoublelabel.h rename to src/libs/vtools/undocommands/label/movedoublelabel.h index b26728add..19bd4604a 100644 --- a/src/libs/vtools/undocommands/movedoublelabel.h +++ b/src/libs/vtools/undocommands/label/movedoublelabel.h @@ -29,65 +29,41 @@ #ifndef MOVEDOUBLELABEL_H #define MOVEDOUBLELABEL_H -#include "vundocommand.h" - -class QGraphicsScene; +#include "moveabstractlabel.h" enum class DoublePoint: char { FirstPoint, SecondPoint }; -class MoveDoubleLabel : public VUndoCommand +class MoveDoubleLabel : public MoveAbstractLabel { Q_OBJECT public: MoveDoubleLabel(VAbstractPattern *doc, const double &x, const double &y, DoublePoint type, - quint32 tooId, quint32 pointId, QGraphicsScene *scene, QUndoCommand *parent = 0); + quint32 toolId, quint32 pointId, QUndoCommand *parent = 0); virtual ~MoveDoubleLabel() Q_DECL_OVERRIDE; - virtual void undo() Q_DECL_OVERRIDE; - virtual void redo() Q_DECL_OVERRIDE; + virtual bool mergeWith(const QUndoCommand *command) Q_DECL_OVERRIDE; virtual int id() const Q_DECL_OVERRIDE; - quint32 getPointId() const; - quint32 getLabelId() const; - double getNewMx() const; - double getNewMy() const; - DoublePoint getPointType() const; - void Do(double mx, double my); -signals: - void ChangePosition(quint32 id, qreal mx, qreal my); + + quint32 GetToolId() const; + DoublePoint GetPointType() const; +protected: + virtual void Do(double mx, double my) Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(MoveDoubleLabel) - double oldMx; - double oldMy; - double newMx; - double newMy; - QGraphicsScene *scene; - DoublePoint type; - quint32 pointId; - bool isRedo; + DoublePoint m_type; + quint32 m_idTool; }; //--------------------------------------------------------------------------------------------------------------------- -inline quint32 MoveDoubleLabel::getPointId() const +inline DoublePoint MoveDoubleLabel::GetPointType() const { - return nodeId; + return m_type; } //--------------------------------------------------------------------------------------------------------------------- -inline DoublePoint MoveDoubleLabel::getPointType() const +inline quint32 MoveDoubleLabel::GetToolId() const { - return type; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline double MoveDoubleLabel::getNewMx() const -{ - return newMx; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline double MoveDoubleLabel::getNewMy() const -{ - return newMy; + return m_idTool; } #endif // MOVEDOUBLELABEL_H diff --git a/src/libs/vtools/undocommands/movelabel.cpp b/src/libs/vtools/undocommands/label/movelabel.cpp similarity index 64% rename from src/libs/vtools/undocommands/movelabel.cpp rename to src/libs/vtools/undocommands/label/movelabel.cpp index c5c8dfea4..82b75289a 100644 --- a/src/libs/vtools/undocommands/movelabel.cpp +++ b/src/libs/vtools/undocommands/label/movelabel.cpp @@ -27,33 +27,22 @@ *************************************************************************/ #include "movelabel.h" -#include "../tools/vabstracttool.h" -#include "../../vwidgets/vmaingraphicsview.h" - -#include -#include +#include "../vmisc/vabstractapplication.h" //--------------------------------------------------------------------------------------------------------------------- -MoveLabel::MoveLabel(VAbstractPattern *doc, const double &x, const double &y, const quint32 &id, QGraphicsScene *scene, - QUndoCommand *parent) - : VUndoCommand(QDomElement(), doc, parent), oldMx(0.0), oldMy(0.0), newMx(x), newMy(y), isRedo(false), scene(scene) +MoveLabel::MoveLabel(VAbstractPattern *doc, const double &x, const double &y, const quint32 &id, QUndoCommand *parent) + : MoveAbstractLabel(doc, id, x, y, parent) { setText(tr("move point label")); - nodeId = id; - qCDebug(vUndo, "Point id %u", nodeId); - qCDebug(vUndo, "Label new Mx %f", newMx); - qCDebug(vUndo, "Label new My %f", newMy); - - SCASSERT(scene != nullptr); - QDomElement domElement = doc->elementById(id); + QDomElement domElement = doc->elementById(nodeId); if (domElement.isElement()) { - oldMx = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMx, "0.0")); - oldMy = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMy, "0.0")); + m_oldMx = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMx, "0.0")); + m_oldMy = qApp->toPixel(doc->GetParametrDouble(domElement, AttrMy, "0.0")); - qCDebug(vUndo, "Label old Mx %f", oldMx); - qCDebug(vUndo, "Label old My %f", oldMy); + qCDebug(vUndo, "Label old Mx %f", m_oldMx); + qCDebug(vUndo, "Label old My %f", m_oldMy); } else { @@ -66,45 +55,22 @@ MoveLabel::MoveLabel(VAbstractPattern *doc, const double &x, const double &y, co MoveLabel::~MoveLabel() {} -//--------------------------------------------------------------------------------------------------------------------- -void MoveLabel::undo() -{ - qCDebug(vUndo, "Undo."); - - Do(oldMx, oldMy); - isRedo = true; - emit ChangePosition(nodeId, oldMx, oldMy); -} - -//--------------------------------------------------------------------------------------------------------------------- -void MoveLabel::redo() -{ - qCDebug(vUndo, "Redo."); - - Do(newMx, newMy); - if (isRedo) - { - emit ChangePosition(nodeId, newMx, newMy); - } -} - //--------------------------------------------------------------------------------------------------------------------- bool MoveLabel::mergeWith(const QUndoCommand *command) { const MoveLabel *moveCommand = static_cast(command); SCASSERT(moveCommand != nullptr); - const quint32 id = moveCommand->getPointId(); - if (id != nodeId) + if (moveCommand->GetPointId() != nodeId) { return false; } qCDebug(vUndo, "Mergin undo."); - newMx = moveCommand->getNewMx(); - newMy = moveCommand->getNewMy(); - qCDebug(vUndo, "Label new Mx %f", newMx); - qCDebug(vUndo, "Label new My %f", newMy); + m_newMx = moveCommand->GetNewMx(); + m_newMy = moveCommand->GetNewMy(); + qCDebug(vUndo, "Label new Mx %f", m_newMx); + qCDebug(vUndo, "Label new My %f", m_newMy); return true; } diff --git a/src/libs/vtools/undocommands/label/movelabel.h b/src/libs/vtools/undocommands/label/movelabel.h new file mode 100644 index 000000000..3b5887919 --- /dev/null +++ b/src/libs/vtools/undocommands/label/movelabel.h @@ -0,0 +1,49 @@ +/************************************************************************ + ** + ** @file movelabel.h + ** @author Roman Telezhynskyi + ** @date 25 12, 2014 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2013-2015 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef MOVELABEL_H +#define MOVELABEL_H + +#include "moveabstractlabel.h" + +class MoveLabel : public MoveAbstractLabel +{ + Q_OBJECT +public: + MoveLabel(VAbstractPattern *doc, const double &x, const double &y, const quint32 &id, QUndoCommand *parent = 0); + virtual ~MoveLabel(); + + virtual bool mergeWith(const QUndoCommand *command) Q_DECL_OVERRIDE; + virtual int id() const Q_DECL_OVERRIDE; +protected: + virtual void Do(double mx, double my) Q_DECL_OVERRIDE; +private: + Q_DISABLE_COPY(MoveLabel) +}; + +#endif // MOVELABEL_H diff --git a/src/libs/vtools/undocommands/rotationmovelabel.cpp b/src/libs/vtools/undocommands/label/rotationmovelabel.cpp similarity index 80% rename from src/libs/vtools/undocommands/rotationmovelabel.cpp rename to src/libs/vtools/undocommands/label/rotationmovelabel.cpp index 12712a264..0d73a9450 100644 --- a/src/libs/vtools/undocommands/rotationmovelabel.cpp +++ b/src/libs/vtools/undocommands/label/rotationmovelabel.cpp @@ -27,30 +27,19 @@ *************************************************************************/ #include "rotationmovelabel.h" -#include "../tools/drawTools/operation/vtoolrotation.h" +#include "../../tools/drawTools/operation/vtoolrotation.h" //--------------------------------------------------------------------------------------------------------------------- RotationMoveLabel::RotationMoveLabel(quint32 idTool, VAbstractPattern *doc, double x, double y, quint32 idPoint, - QGraphicsScene *scene, QUndoCommand *parent) - : VUndoCommand(QDomElement(), doc, parent), - m_oldMx(0.0), - m_oldMy(0.0), - m_newMx(x), - m_newMy(y), - m_isRedo(false), - m_scene(scene), + QUndoCommand *parent) + : MoveAbstractLabel(doc, idPoint, x, y, parent), m_idTool(idTool) { setText(tr("move point label")); - nodeId = idPoint; + qCDebug(vUndo, "Tool id %u", m_idTool); - qCDebug(vUndo, "Point id %u", nodeId); - qCDebug(vUndo, "Label new Mx %f", m_newMx); - qCDebug(vUndo, "Label new My %f", m_newMy); - - SCASSERT(scene != nullptr); - QDomElement element = GetDestinationObject(m_idTool, nodeId); + const QDomElement element = GetDestinationObject(m_idTool, nodeId); if (element.isElement()) { m_oldMx = qApp->toPixel(doc->GetParametrDouble(element, AttrMx, "0.0")); @@ -71,28 +60,6 @@ RotationMoveLabel::~RotationMoveLabel() { } -//--------------------------------------------------------------------------------------------------------------------- -void RotationMoveLabel::undo() -{ - qCDebug(vUndo, "Undo."); - - Do(m_oldMx, m_oldMy); - m_isRedo = true; - emit ChangePosition(nodeId, m_oldMx, m_oldMy); -} - -//--------------------------------------------------------------------------------------------------------------------- -void RotationMoveLabel::redo() -{ - qCDebug(vUndo, "Redo."); - - Do(m_newMx, m_newMy); - if (m_isRedo) - { - emit ChangePosition(nodeId, m_newMx, m_newMy); - } -} - //--------------------------------------------------------------------------------------------------------------------- bool RotationMoveLabel::mergeWith(const QUndoCommand *command) { @@ -105,8 +72,8 @@ bool RotationMoveLabel::mergeWith(const QUndoCommand *command) } qCDebug(vUndo, "Mergin undo."); - m_newMx = moveCommand->getNewMx(); - m_newMy = moveCommand->getNewMy(); + m_newMx = moveCommand->GetNewMx(); + m_newMy = moveCommand->GetNewMy(); qCDebug(vUndo, "Label new Mx %f", m_newMx); qCDebug(vUndo, "Label new My %f", m_newMy); return true; diff --git a/src/libs/vtools/undocommands/rotationmovelabel.h b/src/libs/vtools/undocommands/label/rotationmovelabel.h similarity index 61% rename from src/libs/vtools/undocommands/rotationmovelabel.h rename to src/libs/vtools/undocommands/label/rotationmovelabel.h index fe19ffe0c..ba156eb01 100644 --- a/src/libs/vtools/undocommands/rotationmovelabel.h +++ b/src/libs/vtools/undocommands/label/rotationmovelabel.h @@ -29,59 +29,29 @@ #ifndef ROTATIONMOVELABEL_H #define ROTATIONMOVELABEL_H -#include "vundocommand.h" +#include "moveabstractlabel.h" -class QGraphicsScene; - -class RotationMoveLabel : public VUndoCommand +class RotationMoveLabel : public MoveAbstractLabel { Q_OBJECT public: - RotationMoveLabel(quint32 idTool, VAbstractPattern *doc, double x, double y, quint32 idPoint, QGraphicsScene *scene, + RotationMoveLabel(quint32 idTool, VAbstractPattern *doc, double x, double y, quint32 idPoint, QUndoCommand *parent = nullptr); virtual ~RotationMoveLabel(); - virtual void undo() Q_DECL_OVERRIDE; - virtual void redo() Q_DECL_OVERRIDE; + virtual bool mergeWith(const QUndoCommand *command) Q_DECL_OVERRIDE; virtual int id() const Q_DECL_OVERRIDE; - quint32 GetPointId() const; - quint32 GetToolId() const; - double getNewMx() const; - double getNewMy() const; -signals: - void ChangePosition(quint32 id, qreal mx, qreal my); + + quint32 GetToolId() const; +protected: + virtual void Do(double mx, double my) Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(RotationMoveLabel) - double m_oldMx; - double m_oldMy; - double m_newMx; - double m_newMy; - bool m_isRedo; - QGraphicsScene *m_scene; quint32 m_idTool; - void Do(double mx, double my); QDomElement GetDestinationObject(quint32 idTool, quint32 idPoint) const; }; -//--------------------------------------------------------------------------------------------------------------------- -inline quint32 RotationMoveLabel::GetPointId() const -{ - return nodeId; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline double RotationMoveLabel::getNewMx() const -{ - return m_newMx; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline double RotationMoveLabel::getNewMy() const -{ - return m_newMy; -} - //--------------------------------------------------------------------------------------------------------------------- inline quint32 RotationMoveLabel::GetToolId() const { diff --git a/src/libs/vtools/undocommands/undocommands.pri b/src/libs/vtools/undocommands/undocommands.pri index ffd3417e4..a20f58d15 100644 --- a/src/libs/vtools/undocommands/undocommands.pri +++ b/src/libs/vtools/undocommands/undocommands.pri @@ -17,11 +17,12 @@ HEADERS += \ $$PWD/deletedetail.h \ $$PWD/vundocommand.h \ $$PWD/renamepp.h \ - $$PWD/movelabel.h \ - $$PWD/movedoublelabel.h \ + $$PWD/label/movelabel.h \ + $$PWD/label/movedoublelabel.h \ $$PWD/addgroup.h \ $$PWD/delgroup.h \ - $$PWD/rotationmovelabel.h + $$PWD/label/rotationmovelabel.h \ + undocommands/label/moveabstractlabel.h SOURCES += \ $$PWD/addtocalc.cpp \ @@ -39,8 +40,9 @@ SOURCES += \ $$PWD/deletedetail.cpp \ $$PWD/vundocommand.cpp \ $$PWD/renamepp.cpp \ - $$PWD/movelabel.cpp \ - $$PWD/movedoublelabel.cpp \ + $$PWD/label/movelabel.cpp \ + $$PWD/label/movedoublelabel.cpp \ $$PWD/addgroup.cpp \ $$PWD/delgroup.cpp \ - $$PWD/rotationmovelabel.cpp + $$PWD/label/rotationmovelabel.cpp \ + undocommands/label/moveabstractlabel.cpp From 4ec4f276fce21117ba3b6386dfd7bdf365c0ed20 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 13 May 2016 18:10:13 +0300 Subject: [PATCH 07/41] GCC warnings. --HG-- branch : feature --- .../drawTools/operation/vtoolrotation.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 9adf237bf..4bc7c2945 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -67,6 +67,10 @@ VToolRotation::VToolRotation(VAbstractPattern *doc, VContainer *data, quint32 id // This check helps to find missed objects in the switch Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects were handled."); +#if defined(Q_CC_GNU) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wswitch-default" +#endif switch(static_cast(obj->getType())) { case GOType::Point: @@ -119,6 +123,9 @@ VToolRotation::VToolRotation(VAbstractPattern *doc, VContainer *data, quint32 id case GOType::Unknown: break; } +#if defined(Q_CC_GNU) + #pragma GCC diagnostic pop +#endif } ToolCreation(typeCreation); @@ -190,6 +197,10 @@ VToolRotation *VToolRotation::Create(const quint32 _id, const quint32 &origin, Q // This check helps to find missed objects in the switch Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects were handled."); +#if defined(Q_CC_GNU) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wswitch-default" +#endif switch(static_cast(obj->getType())) { case GOType::Point: @@ -217,6 +228,9 @@ VToolRotation *VToolRotation::Create(const quint32 _id, const quint32 &origin, Q case GOType::Unknown: break; } +#if defined(Q_CC_GNU) + #pragma GCC diagnostic pop +#endif } } else @@ -229,6 +243,10 @@ VToolRotation *VToolRotation::Create(const quint32 _id, const quint32 &origin, Q // This check helps to find missed objects in the switch Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects were handled."); +#if defined(Q_CC_GNU) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wswitch-default" +#endif switch(static_cast(obj->getType())) { case GOType::Point: @@ -257,6 +275,9 @@ VToolRotation *VToolRotation::Create(const quint32 _id, const quint32 &origin, Q case GOType::Unknown: break; } +#if defined(Q_CC_GNU) + #pragma GCC diagnostic pop +#endif } if (parse != Document::FullParse) { From 4537106991d9080ea0536f6292c5e5ee32cad7bd Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 13 May 2016 20:33:52 +0300 Subject: [PATCH 08/41] Updated XSD scheme. --HG-- branch : feature --- src/libs/ifc/schema.qrc | 1 + src/libs/ifc/schema/pattern/v0.3.1.xsd | 502 +++++++++++++++++++++++++ src/libs/ifc/xml/vpatternconverter.cpp | 22 +- src/libs/ifc/xml/vpatternconverter.h | 1 + 4 files changed, 523 insertions(+), 3 deletions(-) create mode 100644 src/libs/ifc/schema/pattern/v0.3.1.xsd diff --git a/src/libs/ifc/schema.qrc b/src/libs/ifc/schema.qrc index d8aa89e47..5868055e2 100644 --- a/src/libs/ifc/schema.qrc +++ b/src/libs/ifc/schema.qrc @@ -14,6 +14,7 @@ schema/pattern/v0.2.6.xsd schema/pattern/v0.2.7.xsd schema/pattern/v0.3.0.xsd + schema/pattern/v0.3.1.xsd schema/standard_measurements/v0.3.0.xsd schema/standard_measurements/v0.4.0.xsd schema/standard_measurements/v0.4.1.xsd diff --git a/src/libs/ifc/schema/pattern/v0.3.1.xsd b/src/libs/ifc/schema/pattern/v0.3.1.xsd new file mode 100644 index 000000000..bee4401df --- /dev/null +++ b/src/libs/ifc/schema/pattern/v0.3.1.xsd @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index 46e09ae74..c0e2914b8 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -43,8 +43,8 @@ */ const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.0"); -const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.3.0"); -const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.3.0.xsd"); +const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.3.1"); +const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.3.1.xsd"); //--------------------------------------------------------------------------------------------------------------------- VPatternConverter::VPatternConverter(const QString &fileName) @@ -111,8 +111,10 @@ QString VPatternConverter::XSDSchema(int ver) const case (0x000206): return QStringLiteral("://schema/pattern/v0.2.6.xsd"); case (0x000207): - return QStringLiteral("://schema/pattern/v0.3.0.xsd"); + return QStringLiteral("://schema/pattern/v0.2.7.xsd"); case (0x000300): + return QStringLiteral("://schema/pattern/v0.3.0.xsd"); + case (0x000301): return CurrentSchema; default: InvalidVersion(ver); @@ -219,6 +221,13 @@ void VPatternConverter::ApplyPatches() V_FALLTHROUGH } case (0x000300): + { + ToV0_3_1(); + const QString schema = XSDSchema(0x000301); + ValidateXML(schema, fileName); + V_FALLTHROUGH + } + case (0x000301): break; default: break; @@ -347,6 +356,13 @@ void VPatternConverter::ToV0_3_0() Save(); } +//--------------------------------------------------------------------------------------------------------------------- +void VPatternConverter::ToV0_3_1() +{ + SetVersion(QStringLiteral("0.3.1")); + Save(); +} + //--------------------------------------------------------------------------------------------------------------------- void VPatternConverter::TagUnitToV0_2_0() { diff --git a/src/libs/ifc/xml/vpatternconverter.h b/src/libs/ifc/xml/vpatternconverter.h index 9cf256872..96bdcd864 100644 --- a/src/libs/ifc/xml/vpatternconverter.h +++ b/src/libs/ifc/xml/vpatternconverter.h @@ -69,6 +69,7 @@ private: void ToV0_2_6(); void ToV0_2_7(); void ToV0_3_0(); + void ToV0_3_1(); void TagUnitToV0_2_0(); void TagIncrementToV0_2_0(); From 80eb2649b9db8fa5b3ee5878e2028c83c4eab34b Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 13 May 2016 20:40:55 +0300 Subject: [PATCH 09/41] Refactoring. --HG-- branch : feature --- src/libs/ifc/xml/vpatternconverter.cpp | 70 ++++++-------------------- src/libs/ifc/xml/vvitconverter.cpp | 20 ++------ src/libs/ifc/xml/vvstconverter.cpp | 15 ++---- 3 files changed, 21 insertions(+), 84 deletions(-) diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index c0e2914b8..961d1251c 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -130,103 +130,61 @@ void VPatternConverter::ApplyPatches() switch (ver) { case (0x000100): - { ToV0_1_1(); - const QString schema = XSDSchema(0x000101); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000101), fileName); V_FALLTHROUGH - } case (0x000101): - { ToV0_1_2(); - const QString schema = XSDSchema(0x000102); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000102), fileName); V_FALLTHROUGH - } case (0x000102): - { ToV0_1_3(); - const QString schema = XSDSchema(0x000103); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000103), fileName); V_FALLTHROUGH - } case (0x000103): - { ToV0_1_4(); - const QString schema = XSDSchema(0x000104); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000104), fileName); V_FALLTHROUGH - } case (0x000104): - { ToV0_2_0(); - const QString schema = XSDSchema(0x000200); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000200), fileName); V_FALLTHROUGH - } case (0x000200): - { ToV0_2_1(); - const QString schema = XSDSchema(0x000201); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000201), fileName); V_FALLTHROUGH - } case (0x000201): - { ToV0_2_2(); - const QString schema = XSDSchema(0x000202); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000202), fileName); V_FALLTHROUGH - } case (0x000202): - { ToV0_2_3(); - const QString schema = XSDSchema(0x000203); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000203), fileName); V_FALLTHROUGH - } case (0x000203): - { ToV0_2_4(); - const QString schema = XSDSchema(0x000204); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000204), fileName); V_FALLTHROUGH - } case (0x000204): - { ToV0_2_5(); - const QString schema = XSDSchema(0x000205); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000205), fileName); V_FALLTHROUGH - } case (0x000205): - { ToV0_2_6(); - const QString schema = XSDSchema(0x000206); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000206), fileName); V_FALLTHROUGH - } case (0x000206): - { ToV0_2_7(); - const QString schema = XSDSchema(0x000207); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000207), fileName); V_FALLTHROUGH - } case (0x000207): - { ToV0_3_0(); - const QString schema = XSDSchema(0x000300); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000300), fileName); V_FALLTHROUGH - } case (0x000300): - { ToV0_3_1(); - const QString schema = XSDSchema(0x000301); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000301), fileName); V_FALLTHROUGH - } case (0x000301): break; default: diff --git a/src/libs/ifc/xml/vvitconverter.cpp b/src/libs/ifc/xml/vvitconverter.cpp index 75d9cdb57..0cf65d017 100644 --- a/src/libs/ifc/xml/vvitconverter.cpp +++ b/src/libs/ifc/xml/vvitconverter.cpp @@ -107,33 +107,21 @@ void VVITConverter::ApplyPatches() switch (ver) { case (0x000200): - { ToV0_3_0(); - const QString schema = XSDSchema(0x000300); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000300), fileName); V_FALLTHROUGH - } case (0x000300): - { ToV0_3_1(); - const QString schema = XSDSchema(0x000301); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000301), fileName); V_FALLTHROUGH - } case (0x000301): - { ToV0_3_2(); - const QString schema = XSDSchema(0x000302); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000302), fileName); V_FALLTHROUGH - } case (0x000302): - { ToV0_3_3(); - const QString schema = XSDSchema(0x000303); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000303), fileName); V_FALLTHROUGH - } case (0x000303): break; default: diff --git a/src/libs/ifc/xml/vvstconverter.cpp b/src/libs/ifc/xml/vvstconverter.cpp index b65c80f94..e1385205c 100644 --- a/src/libs/ifc/xml/vvstconverter.cpp +++ b/src/libs/ifc/xml/vvstconverter.cpp @@ -105,26 +105,17 @@ void VVSTConverter::ApplyPatches() switch (ver) { case (0x000300): - { ToV0_4_0(); - const QString schema = XSDSchema(0x000400); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000400), fileName); V_FALLTHROUGH - } case (0x000400): - { ToV0_4_1(); - const QString schema = XSDSchema(0x000401); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000401), fileName); V_FALLTHROUGH - } case (0x000401): - { ToV0_4_2(); - const QString schema = XSDSchema(0x000402); - ValidateXML(schema, fileName); + ValidateXML(XSDSchema(0x000402), fileName); V_FALLTHROUGH - } case (0x000402): break; default: From 2f7138e69cf5cc3d8ea364f15d0c0959493a8c87 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 13 May 2016 20:46:57 +0300 Subject: [PATCH 10/41] Forgot to add apply button. --HG-- branch : feature --- src/libs/vtools/dialogs/tools/dialogrotation.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.ui b/src/libs/vtools/dialogs/tools/dialogrotation.ui index a8bc2fbb0..0dba13478 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.ui +++ b/src/libs/vtools/dialogs/tools/dialogrotation.ui @@ -229,7 +229,7 @@ Qt::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok From d2efd500301f1fe447626703ade5462967550f7f Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 13 May 2016 20:59:15 +0300 Subject: [PATCH 11/41] Delete visualization before closing the tool dialog. --HG-- branch : feature --- src/libs/vtools/dialogs/tools/dialogrotation.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index b8d25e219..5a382387f 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -77,6 +77,7 @@ DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QW //--------------------------------------------------------------------------------------------------------------------- DialogRotation::~DialogRotation() { + DeleteVisualization(); delete ui; } From 95a7553741db5ea7fa7aa325578a9fc4f5fdc4e0 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 14 May 2016 21:24:27 +0300 Subject: [PATCH 12/41] XSD scheme is now more correct. --HG-- branch : feature --- src/libs/ifc/schema/pattern/v0.3.1.xsd | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/libs/ifc/schema/pattern/v0.3.1.xsd b/src/libs/ifc/schema/pattern/v0.3.1.xsd index bee4401df..17a0d72f1 100644 --- a/src/libs/ifc/schema/pattern/v0.3.1.xsd +++ b/src/libs/ifc/schema/pattern/v0.3.1.xsd @@ -174,14 +174,26 @@ - + + + + + + + - - - + + + + + + + + + From 6187f16c6a67ac216171aad78f34ac985b82199d Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 14 May 2016 22:28:09 +0300 Subject: [PATCH 13/41] Refactoring. Use conversion operator for conversion VPointF to QPointF. --HG-- branch : feature --- src/app/valentina/xml/vpattern.cpp | 3 +- src/libs/vgeometry/vabstractcubicbezier.cpp | 10 ++--- src/libs/vgeometry/varc.cpp | 10 ++--- src/libs/vgeometry/vcubicbezier.cpp | 12 +++--- src/libs/vgeometry/vcubicbezierpath.cpp | 10 ++--- src/libs/vgeometry/vellipticalarc.cpp | 6 +-- src/libs/vgeometry/vpointf.cpp | 28 ++++++++----- src/libs/vgeometry/vpointf.h | 2 + src/libs/vgeometry/vspline.cpp | 16 ++++---- src/libs/vgeometry/vspline_p.h | 6 +-- src/libs/vgeometry/vsplinepath.cpp | 2 +- src/libs/vpatterndb/variables/vlineangle.cpp | 2 +- src/libs/vpatterndb/variables/vlinelength.cpp | 2 +- src/libs/vpatterndb/vdetail.cpp | 12 +++--- .../tools/dialogcurveintersectaxis.cpp | 2 +- .../vtools/dialogs/tools/dialogendline.cpp | 2 +- .../vtools/dialogs/tools/dialogheight.cpp | 3 +- .../dialogs/tools/dialoglineintersect.cpp | 8 ++-- .../dialogs/tools/dialoglineintersectaxis.cpp | 2 +- .../vtools/dialogs/tools/dialogrotation.cpp | 2 +- .../drawTools/operation/vtoolrotation.cpp | 2 +- .../drawTools/toolcurve/vabstractspline.cpp | 4 +- .../tools/drawTools/toolcurve/vtoolspline.cpp | 8 ++-- .../drawTools/toolcurve/vtoolsplinepath.cpp | 8 ++-- .../tooldoublepoint/vtooltruedarts.cpp | 3 +- .../toollinepoint/vtoolalongline.cpp | 2 +- .../toollinepoint/vtoolbisector.cpp | 3 +- .../toollinepoint/vtoolcurveintersectaxis.cpp | 2 +- .../toollinepoint/vtoolendline.cpp | 2 +- .../toollinepoint/vtoolheight.cpp | 2 +- .../toollinepoint/vtoollineintersectaxis.cpp | 4 +- .../toollinepoint/vtoollinepoint.cpp | 8 ++-- .../toollinepoint/vtoolnormal.cpp | 3 +- .../toollinepoint/vtoolshoulderpoint.cpp | 3 +- .../toolsinglepoint/vtoolbasepoint.cpp | 2 +- .../toolsinglepoint/vtoollineintersect.cpp | 4 +- .../vtoolpointfromarcandtangent.cpp | 4 +- .../vtoolpointfromcircleandtangent.cpp | 2 +- .../toolsinglepoint/vtoolpointofcontact.cpp | 3 +- .../vtoolpointofintersectionarcs.cpp | 4 +- .../vtoolpointofintersectioncircles.cpp | 2 +- .../toolsinglepoint/vtoolsinglepoint.cpp | 2 +- .../toolsinglepoint/vtooltriangle.cpp | 3 +- src/libs/vtools/tools/drawTools/vtoolline.cpp | 4 +- .../vtools/tools/nodeDetails/vnodepoint.cpp | 2 +- src/libs/vtools/tools/vtooluniondetails.cpp | 39 +++++++++---------- .../visualization/line/vistoolalongline.cpp | 10 ++--- .../visualization/line/vistoolbisector.cpp | 27 ++++++------- .../line/vistoolcurveintersectaxis.cpp | 10 ++--- .../visualization/line/vistoolendline.cpp | 6 +-- .../visualization/line/vistoolheight.cpp | 16 ++++---- .../vtools/visualization/line/vistoolline.cpp | 4 +- .../line/vistoollineintersect.cpp | 24 ++++++------ .../line/vistoollineintersectaxis.cpp | 16 ++++---- .../visualization/line/vistoolnormal.cpp | 12 +++--- .../line/vistoolpointfromarcandtangent.cpp | 8 ++-- .../line/vistoolpointfromcircleandtangent.cpp | 11 +++--- .../line/vistoolpointofcontact.cpp | 15 ++++--- .../line/vistoolpointofintersection.cpp | 8 ++-- .../vistoolpointofintersectioncircles.cpp | 11 +++--- .../visualization/line/vistoolrotation.cpp | 6 +-- .../line/vistoolshoulderpoint.cpp | 28 +++++++------ .../visualization/line/vistooltriangle.cpp | 28 +++++++------ .../visualization/line/vistooltruedarts.cpp | 36 ++++++++--------- .../vtools/visualization/path/vistoolarc.cpp | 2 +- .../path/vistoolarcwithlength.cpp | 2 +- .../visualization/path/vistoolcubicbezier.cpp | 16 ++++---- .../path/vistoolcubicbezierpath.cpp | 30 +++++++------- .../path/vistoolcutsplinepath.cpp | 2 +- .../visualization/path/vistoolspline.cpp | 18 ++++----- .../visualization/path/vistoolsplinepath.cpp | 8 ++-- src/libs/vwidgets/vsimplepoint.cpp | 2 +- src/test/ValentinaTest/tst_varc.cpp | 4 +- src/test/ValentinaTest/tst_vellipticalarc.cpp | 10 ++--- src/test/ValentinaTest/tst_vspline.cpp | 4 +- 75 files changed, 313 insertions(+), 326 deletions(-) diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index 73bba92ac..74660b9b0 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -1291,8 +1291,7 @@ void VPattern::ParseNodePoint(const QDomElement &domElement, const Document &par Q_UNUSED(e); return;// Just ignore } - data->UpdateGObject(id, new VPointF(point->toQPointF(), point->name(), mx, my, idObject, - Draw::Modeling)); + data->UpdateGObject(id, new VPointF(*point, point->name(), mx, my, idObject, Draw::Modeling)); VNodePoint::Create(this, data, sceneDetail, id, idObject, parse, Source::FromFile, idTool); } catch (const VExceptionBadId &e) diff --git a/src/libs/vgeometry/vabstractcubicbezier.cpp b/src/libs/vgeometry/vabstractcubicbezier.cpp index feb04cd51..34a8d66e5 100644 --- a/src/libs/vgeometry/vabstractcubicbezier.cpp +++ b/src/libs/vgeometry/vabstractcubicbezier.cpp @@ -97,7 +97,7 @@ QPointF VAbstractCubicBezier::CutSpline(qreal length, QPointF &spl1p2, QPointF & const qreal parT = GetParmT(length); - QLineF seg1_2 ( GetP1 ().toQPointF(), GetControlPoint1 () ); + QLineF seg1_2 ( GetP1 (), GetControlPoint1 () ); seg1_2.setLength(seg1_2.length () * parT); const QPointF p12 = seg1_2.p2(); @@ -109,7 +109,7 @@ QPointF VAbstractCubicBezier::CutSpline(qreal length, QPointF &spl1p2, QPointF & seg12_23.setLength(seg12_23.length () * parT); const QPointF p123 = seg12_23.p2(); - QLineF seg3_4 ( GetControlPoint2 (), GetP4 ().toQPointF() ); + QLineF seg3_4 ( GetControlPoint2 (), GetP4 () ); seg3_4.setLength(seg3_4.length () * parT); const QPointF p34 = seg3_4.p2(); @@ -547,7 +547,7 @@ qreal VAbstractCubicBezier::LengthT(qreal t) const qDebug()<<"Wrong value t."; return 0; } - QLineF seg1_2 ( GetP1 ().toQPointF(), GetControlPoint1 () ); + QLineF seg1_2 ( GetP1 (), GetControlPoint1 () ); seg1_2.setLength(seg1_2.length () * t); const QPointF p12 = seg1_2.p2(); @@ -559,7 +559,7 @@ qreal VAbstractCubicBezier::LengthT(qreal t) const seg12_23.setLength(seg12_23.length () * t); const QPointF p123 = seg12_23.p2(); - QLineF seg3_4 ( GetControlPoint2 (), GetP4 ().toQPointF() ); + QLineF seg3_4 ( GetControlPoint2 (), GetP4 () ); seg3_4.setLength(seg3_4.length () * t); const QPointF p34 = seg3_4.p2(); @@ -571,5 +571,5 @@ qreal VAbstractCubicBezier::LengthT(qreal t) const seg123_234.setLength(seg123_234.length () * t); const QPointF p1234 = seg123_234.p2(); - return LengthBezier ( GetP1().toQPointF(), p12, p123, p1234); + return LengthBezier ( GetP1(), p12, p123, p1234); } diff --git a/src/libs/vgeometry/varc.cpp b/src/libs/vgeometry/varc.cpp index d4183a582..3c710f4b5 100644 --- a/src/libs/vgeometry/varc.cpp +++ b/src/libs/vgeometry/varc.cpp @@ -123,7 +123,7 @@ VArc VArc::Rotate(const QPointF &originPoint, qreal degrees, const QString &pref const QPointF p1 = VPointF::RotatePF(originPoint, GetP1(), degrees); const QPointF p2 = VPointF::RotatePF(originPoint, GetP2(), degrees); - VArc arc(center, GetRadius(), QLineF(center.toQPointF(), p1).angle(), QLineF(center.toQPointF(), p2).angle()); + VArc arc(center, GetRadius(), QLineF(center, p1).angle(), QLineF(center, p2).angle()); arc.setName(name() + prefix); return arc; } @@ -156,7 +156,7 @@ qreal VArc::GetLength() const QPointF VArc::GetP1() const { QPointF p1 ( GetCenter().x () + d->radius, GetCenter().y () ); - QLineF centerP1(GetCenter().toQPointF(), p1); + QLineF centerP1(GetCenter(), p1); centerP1.setAngle(GetStartAngle()); return centerP1.p2(); } @@ -169,7 +169,7 @@ QPointF VArc::GetP1() const QPointF VArc::GetP2 () const { QPointF p2 ( GetCenter().x () + d->radius, GetCenter().y () ); - QLineF centerP2(GetCenter().toQPointF(), p2); + QLineF centerP2(GetCenter(), p2); centerP2.setAngle(GetEndAngle()); return centerP2.p2(); } @@ -221,7 +221,7 @@ QVector VArc::GetPoints() const { const qreal lDistance = GetRadius() * 4.0/3.0 * qTan(qDegreesToRadians(sectionAngle.at(i)) * 0.25); - const QPointF center = GetCenter().toQPointF(); + const QPointF center = GetCenter(); QLineF lineP1P2(pStart, center); lineP1P2.setAngle(lineP1P2.angle() - 90.0); @@ -286,7 +286,7 @@ QPointF VArc::CutArc(const qreal &length, VArc &arc1, VArc &arc2) const qreal n = qRadiansToDegrees(len/d->radius); // n - is angle in degrees - QLineF line(GetCenter().toQPointF(), GetP1()); + QLineF line(GetCenter(), GetP1()); line.setAngle(line.angle()+n); arc1 = VArc (GetCenter(), d->radius, d->formulaRadius, GetStartAngle(), GetFormulaF1(), line.angle(), diff --git a/src/libs/vgeometry/vcubicbezier.cpp b/src/libs/vgeometry/vcubicbezier.cpp index 4afadcb0c..12489c5aa 100644 --- a/src/libs/vgeometry/vcubicbezier.cpp +++ b/src/libs/vgeometry/vcubicbezier.cpp @@ -129,13 +129,13 @@ void VCubicBezier::SetP4(const VPointF &p) //--------------------------------------------------------------------------------------------------------------------- qreal VCubicBezier::GetStartAngle() const { - return QLineF(GetP1().toQPointF(), GetP2().toQPointF()).angle(); + return QLineF(GetP1(), GetP2()).angle(); } //--------------------------------------------------------------------------------------------------------------------- qreal VCubicBezier::GetEndAngle() const { - return QLineF(GetP4().toQPointF(), GetP3().toQPointF()).angle(); + return QLineF(GetP4(), GetP3()).angle(); } //--------------------------------------------------------------------------------------------------------------------- @@ -145,7 +145,7 @@ qreal VCubicBezier::GetEndAngle() const */ qreal VCubicBezier::GetLength() const { - return LengthBezier (GetP1().toQPointF(), GetP2().toQPointF(), GetP3().toQPointF(), GetP4().toQPointF()); + return LengthBezier (GetP1(), GetP2(), GetP3(), GetP4()); } //--------------------------------------------------------------------------------------------------------------------- @@ -155,17 +155,17 @@ qreal VCubicBezier::GetLength() const */ QVector VCubicBezier::GetPoints() const { - return GetCubicBezierPoints(GetP1().toQPointF(), GetP2().toQPointF(), GetP3().toQPointF(), GetP4().toQPointF()); + return GetCubicBezierPoints(GetP1(), GetP2(), GetP3(), GetP4()); } //--------------------------------------------------------------------------------------------------------------------- QPointF VCubicBezier::GetControlPoint1() const { - return GetP2().toQPointF(); + return GetP2(); } //--------------------------------------------------------------------------------------------------------------------- QPointF VCubicBezier::GetControlPoint2() const { - return GetP3().toQPointF(); + return GetP3(); } diff --git a/src/libs/vgeometry/vcubicbezierpath.cpp b/src/libs/vgeometry/vcubicbezierpath.cpp index e54fdf821..2f427616e 100644 --- a/src/libs/vgeometry/vcubicbezierpath.cpp +++ b/src/libs/vgeometry/vcubicbezierpath.cpp @@ -112,7 +112,7 @@ const VPointF &VCubicBezierPath::at(int indx) const //--------------------------------------------------------------------------------------------------------------------- void VCubicBezierPath::append(const VPointF &point) { - if (d->path.size() > 0 && d->path.last().toQPointF() != point.toQPointF()) + if (d->path.size() > 0 && d->path.last() != point) { return; } @@ -156,18 +156,18 @@ VSpline VCubicBezierPath::GetSpline(qint32 index) const const qint32 base = SubSplOffset(index); // Correction the first control point of each next spline curve except for the first. - QPointF p2 = d->path.at(base + 1).toQPointF(); + QPointF p2 = d->path.at(base + 1); if (base + 1 > 1) { - const QPointF b = d->path.at(base).toQPointF(); - QLineF foot1(b, d->path.at(base - 1).toQPointF()); + const QPointF b = d->path.at(base); + QLineF foot1(b, d->path.at(base - 1)); QLineF foot2(b, p2); foot2.setAngle(foot1.angle() + 180); p2 = foot2.p2(); } - VSpline spl(d->path.at(base), p2, d->path.at(base + 2).toQPointF(), d->path.at(base + 3)); + VSpline spl(d->path.at(base), p2, d->path.at(base + 2), d->path.at(base + 3)); return spl; } diff --git a/src/libs/vgeometry/vellipticalarc.cpp b/src/libs/vgeometry/vellipticalarc.cpp index 923669e5f..49ef67d6a 100644 --- a/src/libs/vgeometry/vellipticalarc.cpp +++ b/src/libs/vgeometry/vellipticalarc.cpp @@ -122,8 +122,8 @@ VEllipticalArc VEllipticalArc::Rotate(const QPointF &originPoint, qreal degrees, const VPointF center = GetCenter().Rotate(originPoint, degrees); const QPointF p1 = VPointF::RotatePF(originPoint, GetP1(), degrees); const QPointF p2 = VPointF::RotatePF(originPoint, GetP2(), degrees); - const qreal f1 = QLineF(center.toQPointF(), p1).angle() - GetRotationAngle(); - const qreal f2 = QLineF(center.toQPointF(), p2).angle() - GetRotationAngle(); + const qreal f1 = QLineF(center, p1).angle() - GetRotationAngle(); + const qreal f2 = QLineF(center, p2).angle() - GetRotationAngle(); VEllipticalArc elArc(center, GetRadius1(), GetRadius2(), f1, f2, GetRotationAngle()); elArc.setName(name() + prefix); return elArc; @@ -246,7 +246,7 @@ QPointF VEllipticalArc::GetPoint (qreal angle) const QPointF p (GetCenter().x() + x, GetCenter().y() + y); // rotation of point - QLineF line(GetCenter().toQPointF(), p); + QLineF line(GetCenter(), p); line.setAngle(line.angle() + GetRotationAngle()); return line.p2(); diff --git a/src/libs/vgeometry/vpointf.cpp b/src/libs/vgeometry/vpointf.cpp index 609348658..dbd2a4b88 100644 --- a/src/libs/vgeometry/vpointf.cpp +++ b/src/libs/vgeometry/vpointf.cpp @@ -100,6 +100,18 @@ VPointF &VPointF::operator =(const VPointF &point) return *this; } +//--------------------------------------------------------------------------------------------------------------------- +VPointF::operator const QPointF() const +{ + return toQPointF(); +} + +//--------------------------------------------------------------------------------------------------------------------- +VPointF::operator QPointF() +{ + return toQPointF(); +} + //--------------------------------------------------------------------------------------------------------------------- VPointF VPointF::Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix) const { @@ -107,16 +119,6 @@ VPointF VPointF::Rotate(const QPointF &originPoint, qreal degrees, const QString return VPointF(p, name() + prefix, mx(), my()); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief toQPointF convert to QPointF - * @return QPointF point - */ -QPointF VPointF::toQPointF() const -{ - return QPointF(d->_x, d->_y); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief mx return offset name respect to x @@ -157,6 +159,12 @@ void VPointF::setMy(qreal my) d->_my = my; } +//--------------------------------------------------------------------------------------------------------------------- +QPointF VPointF::toQPointF() const +{ + return QPointF(d->_x, d->_y); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief x return x coordinate diff --git a/src/libs/vgeometry/vpointf.h b/src/libs/vgeometry/vpointf.h index 8b9c63468..a6b51e0ed 100644 --- a/src/libs/vgeometry/vpointf.h +++ b/src/libs/vgeometry/vpointf.h @@ -58,6 +58,8 @@ public: const Draw &mode = Draw::Calculation); virtual ~VPointF() Q_DECL_OVERRIDE; VPointF &operator=(const VPointF &point); + operator QPointF(); + operator const QPointF() const; VPointF Rotate(const QPointF &originPoint, qreal degrees, const QString &prefix = QString()) const; qreal mx() const; qreal my() const; diff --git a/src/libs/vgeometry/vspline.cpp b/src/libs/vgeometry/vspline.cpp index 94600c158..5cd4b8fc9 100644 --- a/src/libs/vgeometry/vspline.cpp +++ b/src/libs/vgeometry/vspline.cpp @@ -132,7 +132,7 @@ VSpline::~VSpline() */ qreal VSpline::GetLength () const { - return LengthBezier ( GetP1().toQPointF(), GetP2(), GetP3(), GetP4().toQPointF()); + return LengthBezier ( GetP1(), GetP2(), GetP3(), GetP4()); } //--------------------------------------------------------------------------------------------------------------------- @@ -156,7 +156,7 @@ QPointF VSpline::CutSpline(qreal length, VSpline &spl1, VSpline &spl2) const */ QVector VSpline::GetPoints () const { - return GetCubicBezierPoints(GetP1().toQPointF(), GetP2(), GetP3(), GetP4().toQPointF()); + return GetCubicBezierPoints(GetP1(), GetP2(), GetP3(), GetP4()); } //--------------------------------------------------------------------------------------------------------------------- @@ -348,7 +348,7 @@ void VSpline::SetC2Length(qreal length, const QString &formula) */ qreal VSpline::GetKasm1() const { - return QLineF(d->p1.toQPointF(), GetP2()).length() / VSplineData::GetL(d->p1.toQPointF(), d->p4.toQPointF(), + return QLineF(d->p1, GetP2()).length() / VSplineData::GetL(d->p1, d->p4, d->kCurve); } @@ -359,7 +359,7 @@ qreal VSpline::GetKasm1() const */ qreal VSpline::GetKasm2() const { - return QLineF(d->p4.toQPointF(), GetP3()).length() / VSplineData::GetL(d->p1.toQPointF(), d->p4.toQPointF(), + return QLineF(d->p4, GetP3()).length() / VSplineData::GetL(d->p1, d->p4, d->kCurve); } @@ -469,8 +469,8 @@ qreal VSpline::ParamT (const QPointF &pBt) const { QVector ts; // Calculate t coefficient for each axis - ts += CalcT (GetP1().toQPointF().x(), GetP2().x(), GetP3().x(), GetP4().toQPointF().x(), pBt.x()); - ts += CalcT (GetP1().toQPointF().y(), GetP2().y(), GetP3().y(), GetP4().toQPointF().y(), pBt.y()); + ts += CalcT (GetP1().x(), GetP2().x(), GetP3().x(), GetP4().x(), pBt.x()); + ts += CalcT (GetP1().y(), GetP2().y(), GetP3().y(), GetP4().y(), pBt.y()); if (ts.isEmpty()) { @@ -485,10 +485,10 @@ qreal VSpline::ParamT (const QPointF &pBt) const for (int i=0; i< ts.size(); ++i) { const qreal t = ts.at(i); - const QPointF p0 = GetP1().toQPointF(); + const QPointF p0 = GetP1(); const QPointF p1 = GetP2(); const QPointF p2 = GetP3(); - const QPointF p3 = GetP4().toQPointF(); + const QPointF p3 = GetP4(); //The explicit form of the Cubic Bézier curve const qreal pointX = pow(1-t, 3)*p0.x() + 3*pow(1-t, 2)*t*p1.x() + 3*(1-t)*pow(t, 2)*p2.x() + pow(t, 3)*p3.x(); const qreal pointY = pow(1-t, 3)*p0.y() + 3*pow(1-t, 2)*t*p1.y() + 3*(1-t)*pow(t, 2)*p2.y() + pow(t, 3)*p3.y(); diff --git a/src/libs/vgeometry/vspline_p.h b/src/libs/vgeometry/vspline_p.h index c8e6e02ba..c8d59e6ba 100644 --- a/src/libs/vgeometry/vspline_p.h +++ b/src/libs/vgeometry/vspline_p.h @@ -136,7 +136,7 @@ VSplineData::VSplineData(VPointF p1, VPointF p4, qreal angle1, qreal angle2, qre c2LengthF("0"), kCurve(kCurve) { - const qreal L = GetL(p1.toQPointF(), p4.toQPointF(), kCurve); + const qreal L = GetL(p1, p4, kCurve); QLineF p1p2(p1.x(), p1.y(), p1.x() + L * kAsm1, p1.y()); p1p2.setAngle(angle1); @@ -163,7 +163,7 @@ VSplineData::VSplineData(VPointF p1, QPointF p2, QPointF p3, VPointF p4) c2LengthF("0"), kCurve(1) { - QLineF p1p2(p1.toQPointF(), p2); + QLineF p1p2(p1, p2); angle1 = p1p2.angle(); angle1F = QString().number(angle1); @@ -171,7 +171,7 @@ VSplineData::VSplineData(VPointF p1, QPointF p2, QPointF p3, VPointF p4) c1Length = p1p2.length(); c1LengthF = QString().number(qApp->fromPixel(c1Length)); - QLineF p4p3(p4.toQPointF(), p3); + QLineF p4p3(p4, p3); angle2 = p4p3.angle(); angle2F = QString().number(angle2); diff --git a/src/libs/vgeometry/vsplinepath.cpp b/src/libs/vgeometry/vsplinepath.cpp index bd4ad9879..f210ccbe4 100644 --- a/src/libs/vgeometry/vsplinepath.cpp +++ b/src/libs/vgeometry/vsplinepath.cpp @@ -136,7 +136,7 @@ VSplinePath::~VSplinePath() */ void VSplinePath::append(const VSplinePoint &point) { - if (d->path.size() > 0 && d->path.last().P().toQPointF() == point.P().toQPointF()) //-V807 + if (d->path.size() > 0 && d->path.last().P() == point.P()) //-V807 { return; } diff --git a/src/libs/vpatterndb/variables/vlineangle.cpp b/src/libs/vpatterndb/variables/vlineangle.cpp index f28d8136f..508070e01 100644 --- a/src/libs/vpatterndb/variables/vlineangle.cpp +++ b/src/libs/vpatterndb/variables/vlineangle.cpp @@ -91,7 +91,7 @@ void VLineAngle::SetValue(const VPointF *p1, const VPointF *p2) SCASSERT(p1 != nullptr); SCASSERT(p2 != nullptr); //Correct angle. Try avoid results like 6,7563e-15. - const qreal angle = qFloor(QLineF(p1->toQPointF(), p2->toQPointF()).angle() * 100000.) / 100000.; + const qreal angle = qFloor(QLineF(*p1, *p2).angle() * 100000.) / 100000.; VInternalVariable::SetValue(angle); } diff --git a/src/libs/vpatterndb/variables/vlinelength.cpp b/src/libs/vpatterndb/variables/vlinelength.cpp index 0fc09989f..f2ff3634c 100644 --- a/src/libs/vpatterndb/variables/vlinelength.cpp +++ b/src/libs/vpatterndb/variables/vlinelength.cpp @@ -85,7 +85,7 @@ void VLengthLine::SetValue(const VPointF *p1, const VPointF *p2) SCASSERT(p1 != nullptr); SCASSERT(p2 != nullptr); - VInternalVariable::SetValue(FromPixel(QLineF(p1->toQPointF(), p2->toQPointF()).length(), d->patternUnit)); + VInternalVariable::SetValue(FromPixel(QLineF(*p1, *p2).length(), d->patternUnit)); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vpatterndb/vdetail.cpp b/src/libs/vpatterndb/vdetail.cpp index 1314d3d39..d7a2e8db2 100644 --- a/src/libs/vpatterndb/vdetail.cpp +++ b/src/libs/vpatterndb/vdetail.cpp @@ -371,7 +371,7 @@ QVector VDetail::ContourPoints(const VContainer *data) const case (Tool::NodePoint): { const QSharedPointer point = data->GeometricObject(at(i).getId()); - points.append(point->toQPointF()); + points.append(*point); } break; case (Tool::NodeArc): @@ -412,7 +412,7 @@ QVector VDetail::SeamAllowancePoints(const VContainer *data) const case (Tool::NodePoint): { const QSharedPointer point = data->GeometricObject(at(i).getId()); - QPointF pEkv = point->toQPointF(); + QPointF pEkv = *point; pEkv.setX(pEkv.x()+at(i).getMx()); pEkv.setY(pEkv.y()+at(i).getMy()); pointsEkv.append(pEkv); @@ -555,14 +555,14 @@ QPointF VDetail::StartSegment(const VContainer *data, const int &i, bool reverse { if (at(CountNode()-1).getTypeTool() == Tool::NodePoint) { - begin = data->GeometricObject(at(CountNode()-1).getId())->toQPointF(); + begin = *data->GeometricObject(at(CountNode()-1).getId()); } } else { if (at(i-1).getTypeTool() == Tool::NodePoint) { - begin = data->GeometricObject(at(i-1).getId())->toQPointF(); + begin = *data->GeometricObject(at(i-1).getId()); } } } @@ -592,14 +592,14 @@ QPointF VDetail::EndSegment(const VContainer *data, const int &i, bool reverse) { if (at(0).getTypeTool() == Tool::NodePoint) { - end = data->GeometricObject(at(0).getId())->toQPointF(); + end = *data->GeometricObject(at(0).getId()); } } else { if (at(i+1).getTypeTool() == Tool::NodePoint) { - end = data->GeometricObject(at(i+1).getId())->toQPointF(); + end = *data->GeometricObject(at(i+1).getId()); } } } diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp index 202076550..93401b93f 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp @@ -181,7 +181,7 @@ void DialogCurveIntersectAxis::ShowDialog(bool click) VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); SCASSERT(scene != nullptr); const QSharedPointer point = data->GeometricObject(GetBasePointId()); - QLineF line = QLineF(point->toQPointF(), scene->getScenePos()); + QLineF line = QLineF(*point, scene->getScenePos()); //Radius of point circle, but little bigger. Need handle with hover sizes. qreal radius = ToPixel(DefPointRadius/*mm*/, Unit::Mm)*1.5; diff --git a/src/libs/vtools/dialogs/tools/dialogendline.cpp b/src/libs/vtools/dialogs/tools/dialogendline.cpp index b8012f2d2..c21bad7b9 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogendline.cpp @@ -283,7 +283,7 @@ void DialogEndLine::ShowDialog(bool click) VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); SCASSERT(scene != nullptr); const QSharedPointer point = data->GeometricObject(GetBasePointId()); - QLineF line = QLineF(point->toQPointF(), scene->getScenePos()); + QLineF line = QLineF(*point, scene->getScenePos()); //Radius of point circle, but little bigger. Need handle with hover sizes. const qreal radius = ToPixel(DefPointRadius/*mm*/, Unit::Mm)*1.5; diff --git a/src/libs/vtools/dialogs/tools/dialogheight.cpp b/src/libs/vtools/dialogs/tools/dialogheight.cpp index da43253d1..81e0b40b8 100644 --- a/src/libs/vtools/dialogs/tools/dialogheight.cpp +++ b/src/libs/vtools/dialogs/tools/dialogheight.cpp @@ -248,8 +248,7 @@ void DialogHeight::PointNameChanged() const QSharedPointer p2Line = data->GeometricObject(p2LineId); QColor color = okColor; - if (set.size() != 3 || VGObject::ClosestPoint(QLineF(p1Line->toQPointF(), p2Line->toQPointF()), - basePoint->toQPointF()) == QPointF()) + if (set.size() != 3 || VGObject::ClosestPoint(QLineF(*p1Line, *p2Line), *basePoint) == QPointF()) { flagError = false; color = errorColor; diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp index e4b284e51..0688571d1 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp @@ -215,8 +215,8 @@ void DialogLineIntersect::PointNameChanged() const QSharedPointer p1Line2 = data->GeometricObject(p1Line2Id); const QSharedPointer p2Line2 = data->GeometricObject(p2Line2Id); - QLineF line1(p1Line1->toQPointF(), p2Line1->toQPointF()); - QLineF line2(p1Line2->toQPointF(), p2Line2->toQPointF()); + QLineF line1(*p1Line1, *p2Line1); + QLineF line2(*p1Line2, *p2Line2); QPointF fPoint; QLineF::IntersectType intersect = line1.intersect(line2, &fPoint); @@ -266,8 +266,8 @@ bool DialogLineIntersect::CheckIntersecion() const QSharedPointer p1L2 = data->GeometricObject(GetP1Line2()); const QSharedPointer p2L2 = data->GeometricObject(GetP2Line2()); - QLineF line1(p1L1->toQPointF(), p2L1->toQPointF()); - QLineF line2(p1L2->toQPointF(), p2L2->toQPointF()); + QLineF line1(*p1L1, *p2L1); + QLineF line2(*p1L2, *p2L2); QPointF fPoint; QLineF::IntersectType intersect = line1.intersect(line2, &fPoint); if (intersect == QLineF::UnboundedIntersection || intersect == QLineF::BoundedIntersection) diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp index a11d378fb..a2fa2faa4 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp @@ -206,7 +206,7 @@ void DialogLineIntersectAxis::ShowDialog(bool click) VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); SCASSERT(scene != nullptr); const QSharedPointer point = data->GeometricObject(GetBasePointId()); - QLineF line = QLineF(point->toQPointF(), scene->getScenePos()); + QLineF line = QLineF(*point, scene->getScenePos()); //Radius of point circle, but little bigger. Need handle with hover sizes. qreal radius = ToPixel(DefPointRadius/*mm*/, Unit::Mm)*1.5; diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 5a382387f..64d412e1c 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -167,7 +167,7 @@ void DialogRotation::ShowDialog(bool click) VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); SCASSERT(scene != nullptr); const QSharedPointer point = data->GeometricObject(GetOrigPointId()); - const QLineF line = QLineF(point->toQPointF(), scene->getScenePos()); + const QLineF line = QLineF(*point, scene->getScenePos()); //Radius of point circle, but little bigger. Need handle with hover sizes. const qreal radius = ToPixel(DefPointRadius/*mm*/, Unit::Mm)*1.5; diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 4bc7c2945..5095a80cf 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -178,7 +178,7 @@ VToolRotation *VToolRotation::Create(const quint32 _id, const quint32 &origin, Q calcAngle = CheckFormula(_id, angle, data); const auto originPoint = *data->GeometricObject(origin); - const QPointF oPoint = originPoint.toQPointF(); + const QPointF oPoint = originPoint; QVector dest = destination; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp index b81d06eeb..48b1ca526 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp @@ -251,7 +251,7 @@ VSpline VAbstractSpline::CorrectedSpline(const VSpline &spline, const SplinePoin VSpline spl; if (position == SplinePointPosition::FirstPoint) { - QLineF line(spline.GetP1().toQPointF(), pos); + QLineF line(spline.GetP1(), pos); qreal newAngle1 = line.angle(); QString newAngle1F = QString().setNum(newAngle1); @@ -277,7 +277,7 @@ VSpline VAbstractSpline::CorrectedSpline(const VSpline &spline, const SplinePoin } else { - QLineF line(spline.GetP4().toQPointF(), pos); + QLineF line(spline.GetP4(), pos); qreal newAngle2 = line.angle(); QString newAngle2F = QString().setNum(newAngle2); diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp index 1857ef870..79438841d 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp @@ -71,7 +71,7 @@ VToolSpline::VToolSpline(VAbstractPattern *doc, VContainer *data, quint32 id, co const bool freeLength1 = qmu::QmuTokenParser::IsSingle(spl->GetC1LengthFormula()); auto *controlPoint1 = new VControlPointSpline(1, SplinePointPosition::FirstPoint, spl->GetP2(), - spl->GetP1().toQPointF(), *data->GetPatternUnit(), freeAngle1, + spl->GetP1(), *data->GetPatternUnit(), freeAngle1, freeLength1, this); connect(controlPoint1, &VControlPointSpline::ControlPointChangePosition, this, &VToolSpline::ControlPointChangePosition); @@ -83,7 +83,7 @@ VToolSpline::VToolSpline(VAbstractPattern *doc, VContainer *data, quint32 id, co const bool freeLength2 = qmu::QmuTokenParser::IsSingle(spl->GetC2LengthFormula()); auto *controlPoint2 = new VControlPointSpline(1, SplinePointPosition::LastPoint, spl->GetP3(), - spl->GetP4().toQPointF(), *data->GetPatternUnit(), freeAngle2, + spl->GetP4(), *data->GetPatternUnit(), freeAngle2, freeLength2, this); connect(controlPoint2, &VControlPointSpline::ControlPointChangePosition, this, &VToolSpline::ControlPointChangePosition); @@ -528,7 +528,7 @@ void VToolSpline::RefreshGeometry() const bool freeAngle1 = qmu::QmuTokenParser::IsSingle(spl->GetStartAngleFormula()); const bool freeLength1 = qmu::QmuTokenParser::IsSingle(spl->GetC1LengthFormula()); - const QPointF splinePoint = VAbstractTool::data.GeometricObject(spl->GetP1().id())->toQPointF(); + const QPointF splinePoint = *VAbstractTool::data.GeometricObject(spl->GetP1().id()); controlPoints[0]->RefreshCtrlPoint(1, SplinePointPosition::FirstPoint, spl->GetP2(), splinePoint, freeAngle1, freeLength1); } @@ -537,7 +537,7 @@ void VToolSpline::RefreshGeometry() const bool freeAngle2 = qmu::QmuTokenParser::IsSingle(spl->GetEndAngleFormula()); const bool freeLength2 = qmu::QmuTokenParser::IsSingle(spl->GetC2LengthFormula()); - const QPointF splinePoint = VAbstractTool::data.GeometricObject(spl->GetP4().id())->toQPointF(); + const QPointF splinePoint = *VAbstractTool::data.GeometricObject(spl->GetP4().id()); controlPoints[1]->RefreshCtrlPoint(1, SplinePointPosition::LastPoint, spl->GetP3(), splinePoint, freeAngle2, freeLength2); } diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp index 9a09d2beb..f51dee600 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp @@ -74,7 +74,7 @@ VToolSplinePath::VToolSplinePath(VAbstractPattern *doc, VContainer *data, quint3 const bool freeLength1 = qmu::QmuTokenParser::IsSingle(spl.GetC1LengthFormula()); auto *controlPoint = new VControlPointSpline(i, SplinePointPosition::FirstPoint, spl.GetP2(), - spl.GetP1().toQPointF(), *data->GetPatternUnit(), freeAngle1, + spl.GetP1(), *data->GetPatternUnit(), freeAngle1, freeLength1, this); connect(controlPoint, &VControlPointSpline::ControlPointChangePosition, this, &VToolSplinePath::ControlPointChangePosition); @@ -85,7 +85,7 @@ VToolSplinePath::VToolSplinePath(VAbstractPattern *doc, VContainer *data, quint3 const bool freeAngle2 = qmu::QmuTokenParser::IsSingle(spl.GetEndAngleFormula()); const bool freeLength2 = qmu::QmuTokenParser::IsSingle(spl.GetC2LengthFormula()); - controlPoint = new VControlPointSpline(i, SplinePointPosition::LastPoint, spl.GetP3(), spl.GetP4().toQPointF(), + controlPoint = new VControlPointSpline(i, SplinePointPosition::LastPoint, spl.GetP3(), spl.GetP4(), *data->GetPatternUnit(), freeAngle2, freeLength2, this); connect(controlPoint, &VControlPointSpline::ControlPointChangePosition, this, &VToolSplinePath::ControlPointChangePosition); @@ -648,7 +648,7 @@ void VToolSplinePath::RefreshGeometry() const bool freeAngle1 = qmu::QmuTokenParser::IsSingle(spl.GetStartAngleFormula()); const bool freeLength1 = qmu::QmuTokenParser::IsSingle(spl.GetC1LengthFormula()); - const auto splinePoint = spl.GetP1().toQPointF(); + const auto splinePoint = spl.GetP1(); controlPoints[j-2]->RefreshCtrlPoint(i, SplinePointPosition::FirstPoint, spl.GetP2(), splinePoint, freeAngle1, freeLength1); } @@ -657,7 +657,7 @@ void VToolSplinePath::RefreshGeometry() const bool freeAngle2 = qmu::QmuTokenParser::IsSingle(spl.GetEndAngleFormula()); const bool freeLength2 = qmu::QmuTokenParser::IsSingle(spl.GetC2LengthFormula()); - const auto splinePoint = spl.GetP4().toQPointF(); + const auto splinePoint = spl.GetP4(); controlPoints[j-1]->RefreshCtrlPoint(i, SplinePointPosition::LastPoint, spl.GetP3(), splinePoint, freeAngle2, freeLength2); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.cpp b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.cpp index 822a7bd8f..4fa80b2f2 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.cpp @@ -146,8 +146,7 @@ VToolTrueDarts *VToolTrueDarts::Create(quint32 _id, QPointF fPoint1; QPointF fPoint2; - VToolTrueDarts::FindPoint(baseLineP1->toQPointF(), baseLineP2->toQPointF(), - dartP1->toQPointF(), dartP2->toQPointF(), dartP3->toQPointF(), fPoint1, fPoint2); + VToolTrueDarts::FindPoint(*baseLineP1, *baseLineP2, *dartP1, *dartP2, *dartP3, fPoint1, fPoint2); quint32 id = _id; quint32 p1id = _p1id; quint32 p2id = _p2id; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.cpp index 3ae03a962..833008fd6 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.cpp @@ -248,7 +248,7 @@ VToolAlongLine* VToolAlongLine::Create(const quint32 _id, const QString &pointNa { const QSharedPointer firstPoint = data->GeometricObject(firstPointId); const QSharedPointer secondPoint = data->GeometricObject(secondPointId); - QLineF line = QLineF(firstPoint->toQPointF(), secondPoint->toQPointF()); + QLineF line = QLineF(*firstPoint, *secondPoint); line.setLength(qApp->toPixel(CheckFormula(_id, formula, data))); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.cpp index c58d3aba0..4b59d8370 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.cpp @@ -177,8 +177,7 @@ VToolBisector* VToolBisector::Create(const quint32 _id, QString &formula, const const qreal result = CheckFormula(_id, formula, data); - QPointF fPoint = VToolBisector::FindPoint(firstPoint->toQPointF(), secondPoint->toQPointF(), - thirdPoint->toQPointF(), qApp->toPixel(result)); + QPointF fPoint = VToolBisector::FindPoint(*firstPoint, *secondPoint, *thirdPoint, qApp->toPixel(result)); quint32 id = _id; if (typeCreation == Source::FromGui) { diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp index 041ddd67f..b49796c49 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp @@ -113,7 +113,7 @@ VToolCurveIntersectAxis *VToolCurveIntersectAxis::Create(const quint32 _id, cons const qreal angle = CheckFormula(_id, formulaAngle, data); const QSharedPointer curve = data->GeometricObject(curveId); - const QPointF fPoint = FindPoint(basePoint->toQPointF(), angle, curve); + const QPointF fPoint = FindPoint(*basePoint, angle, curve); const qreal segLength = curve->GetLengthByPoint(fPoint); quint32 id = _id; VPointF *p = new VPointF(fPoint, pointName, mx, my); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.cpp index 5c37a3bfd..ae4efa2ff 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.cpp @@ -140,7 +140,7 @@ VToolEndLine* VToolEndLine::Create(const quint32 _id, const QString &pointName, const Source &typeCreation) { const QSharedPointer basePoint = data->GeometricObject(basePointId); - QLineF line = QLineF(basePoint->toQPointF(), QPointF(basePoint->x()+100, basePoint->y())); + QLineF line = QLineF(*basePoint, QPointF(basePoint->x()+100, basePoint->y())); line.setAngle(CheckFormula(_id, formulaAngle, data)); //First set angle. line.setLength(qApp->toPixel(CheckFormula(_id, formulaLength, data))); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.cpp index 2056dedfc..b259a920f 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.cpp @@ -131,7 +131,7 @@ VToolHeight* VToolHeight::Create(const quint32 _id, const QString &pointName, co const QSharedPointer p1Line = data->GeometricObject(p1LineId); const QSharedPointer p2Line = data->GeometricObject(p2LineId); - QPointF pHeight = FindPoint(QLineF(p1Line->toQPointF(), p2Line->toQPointF()), basePoint->toQPointF()); + QPointF pHeight = FindPoint(QLineF(*p1Line, *p2Line), *basePoint); quint32 id = _id; if (typeCreation == Source::FromGui) { diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp index dd8409b0b..8ecaa8e2e 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp @@ -106,12 +106,12 @@ VToolLineIntersectAxis *VToolLineIntersectAxis::Create(const quint32 _id, const const Source &typeCreation) { const QSharedPointer basePoint = data->GeometricObject(basePointId); - QLineF axis = QLineF(basePoint->toQPointF(), QPointF(basePoint->x()+100, basePoint->y())); + QLineF axis = QLineF(*basePoint, QPointF(basePoint->x()+100, basePoint->y())); axis.setAngle(CheckFormula(_id, formulaAngle, data)); const QSharedPointer firstPoint = data->GeometricObject(firstPointId); const QSharedPointer secondPoint = data->GeometricObject(secondPointId); - QLineF line(firstPoint->toQPointF(), secondPoint->toQPointF()); + QLineF line(*firstPoint, *secondPoint); QPointF fPoint = FindPoint(axis, line); quint32 id = _id; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp index aa9ca24ab..e5396e600 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp @@ -51,8 +51,8 @@ VToolLinePoint::VToolLinePoint(VAbstractPattern *doc, VContainer *data, const qu this->typeLine = typeLine; this->lineColor = lineColor; Q_ASSERT_X(basePointId != 0, Q_FUNC_INFO, "basePointId == 0"); //-V654 //-V712 - QPointF point1 = data->GeometricObject(basePointId)->toQPointF(); - QPointF point2 = data->GeometricObject(id)->toQPointF(); + QPointF point1 = *data->GeometricObject(basePointId); + QPointF point2 = *data->GeometricObject(id); mainLine = new QGraphicsLineItem(QLineF(point1 - point2, QPointF()), this); mainLine->setPen(QPen(Qt::black, qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor, LineStyleToPenStyle(typeLine))); @@ -75,8 +75,8 @@ void VToolLinePoint::RefreshGeometry() qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor, LineStyleToPenStyle(typeLine))); VToolSinglePoint::RefreshPointGeometry(*VDrawTool::data.GeometricObject(id)); - QPointF point = VDrawTool::data.GeometricObject(id)->toQPointF(); - QPointF basePoint = VDrawTool::data.GeometricObject(basePointId)->toQPointF(); + QPointF point = *VDrawTool::data.GeometricObject(id); + QPointF basePoint = *VDrawTool::data.GeometricObject(basePointId); mainLine->setLine(QLineF(basePoint - point, QPointF())); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.cpp index f73de34fb..ebfb1f85f 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.cpp @@ -137,8 +137,7 @@ VToolNormal* VToolNormal::Create(const quint32 _id, QString &formula, const quin const qreal result = CheckFormula(_id, formula, data); - QPointF fPoint = VToolNormal::FindPoint(firstPoint->toQPointF(), secondPoint->toQPointF(), - qApp->toPixel(result), angle); + QPointF fPoint = VToolNormal::FindPoint(*firstPoint, *secondPoint, qApp->toPixel(result), angle); quint32 id = _id; if (typeCreation == Source::FromGui) { diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.cpp index c0890dff4..391574918 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.cpp @@ -178,8 +178,7 @@ VToolShoulderPoint* VToolShoulderPoint::Create(const quint32 _id, QString &formu const qreal result = CheckFormula(_id, formula, data); - QPointF fPoint = VToolShoulderPoint::FindPoint(firstPoint->toQPointF(), secondPoint->toQPointF(), - shoulderPoint->toQPointF(), qApp->toPixel(result)); + QPointF fPoint = VToolShoulderPoint::FindPoint(*firstPoint, *secondPoint, *shoulderPoint, qApp->toPixel(result)); quint32 id = _id; if (typeCreation == Source::FromGui) { diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp index 34ee3980c..93781042f 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp @@ -76,7 +76,7 @@ void VToolBasePoint::setDialog() DialogSinglePoint *dialogTool = qobject_cast(dialog); SCASSERT(dialogTool != nullptr); const QSharedPointer p = VAbstractTool::data.GeometricObject(id); - dialogTool->SetData(p->name(), p->toQPointF()); + dialogTool->SetData(p->name(), *p); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp index 4eab669b6..17b65031b 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp @@ -131,8 +131,8 @@ VToolLineIntersect* VToolLineIntersect::Create(const quint32 _id, const quint32 const QSharedPointer p1Line2 = data->GeometricObject(p1Line2Id); const QSharedPointer p2Line2 = data->GeometricObject(p2Line2Id); - QLineF line1(p1Line1->toQPointF(), p2Line1->toQPointF()); - QLineF line2(p1Line2->toQPointF(), p2Line2->toQPointF()); + QLineF line1(*p1Line1, *p2Line1); + QLineF line2(*p1Line2, *p2Line2); QPointF fPoint; QLineF::IntersectType intersect = line1.intersect(line2, &fPoint); if (intersect == QLineF::UnboundedIntersection || intersect == QLineF::BoundedIntersection) diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp index cb118ad07..b2383e20a 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp @@ -88,7 +88,7 @@ VToolPointFromArcAndTangent *VToolPointFromArcAndTangent::Create(const quint32 _ const VArc arc = *data->GeometricObject(arcId); const VPointF tPoint = *data->GeometricObject(tangentPointId); - const QPointF point = VToolPointFromArcAndTangent::FindPoint(tPoint.toQPointF(), &arc, crossPoint); + const QPointF point = VToolPointFromArcAndTangent::FindPoint(tPoint, &arc, crossPoint); quint32 id = _id; if (typeCreation == Source::FromGui) { @@ -121,7 +121,7 @@ VToolPointFromArcAndTangent *VToolPointFromArcAndTangent::Create(const quint32 _ QPointF VToolPointFromArcAndTangent::FindPoint(const QPointF &p, const VArc *arc, const CrossCirclesPoint pType) { QPointF p1, p2; - const QPointF center = arc->GetCenter().toQPointF(); + const QPointF center = arc->GetCenter(); const qreal radius = arc->GetRadius(); const int res = VGObject::ContactPoints (p, center, radius, p1, p2); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp index bcb21eb6b..41f5fb58c 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp @@ -96,7 +96,7 @@ VToolPointFromCircleAndTangent *VToolPointFromCircleAndTangent::Create(const qui const VPointF cPoint = *data->GeometricObject(circleCenterId); const VPointF tPoint = *data->GeometricObject(tangentPointId); - const QPointF point = VToolPointFromCircleAndTangent::FindPoint(tPoint.toQPointF(), cPoint.toQPointF(), radius, + const QPointF point = VToolPointFromCircleAndTangent::FindPoint(tPoint, cPoint, radius, crossPoint); quint32 id = _id; if (typeCreation == Source::FromGui) diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp index 6d9fd88c8..533f34522 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp @@ -193,8 +193,7 @@ VToolPointOfContact* VToolPointOfContact::Create(const quint32 _id, QString &rad const qreal result = CheckFormula(_id, radius, data); - QPointF fPoint = VToolPointOfContact::FindPoint(qApp->toPixel(result), centerP->toQPointF(), - firstP->toQPointF(), secondP->toQPointF()); + QPointF fPoint = VToolPointOfContact::FindPoint(qApp->toPixel(result), *centerP, *firstP, *secondP); quint32 id = _id; if (typeCreation == Source::FromGui) { diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp index a67f9f450..a751d7122 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp @@ -122,8 +122,8 @@ VToolPointOfIntersectionArcs *VToolPointOfIntersectionArcs::Create(const quint32 QPointF VToolPointOfIntersectionArcs::FindPoint(const VArc *arc1, const VArc *arc2, const CrossCirclesPoint pType) { QPointF p1, p2; - const QPointF centerArc1 = arc1->GetCenter().toQPointF(); - const QPointF centerArc2 = arc2->GetCenter().toQPointF(); + const QPointF centerArc1 = arc1->GetCenter(); + const QPointF centerArc2 = arc2->GetCenter(); const int res = VGObject::IntersectionCircles(centerArc1, arc1->GetRadius(), centerArc2, arc2->GetRadius(), p1, p2); QLineF r1Arc1(centerArc1, p1); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp index 6bcdde298..5e760c15d 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp @@ -107,7 +107,7 @@ VToolPointOfIntersectionCircles *VToolPointOfIntersectionCircles::Create(const q const VPointF c1Point = *data->GeometricObject(firstCircleCenterId); const VPointF c2Point = *data->GeometricObject(secondCircleCenterId); - const QPointF point = FindPoint(c1Point.toQPointF(), c2Point.toQPointF(), calcC1Radius, calcC2Radius, crossPoint); + const QPointF point = FindPoint(c1Point, c2Point, calcC1Radius, calcC2Radius, crossPoint); quint32 id = _id; if (typeCreation == Source::FromGui) { diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp index f69bbc565..9a88b1835 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp @@ -249,7 +249,7 @@ void VToolSinglePoint::RefreshPointGeometry(const VPointF &point) QRectF rec = QRectF(0, 0, radius*2, radius*2); rec.translate(-rec.center().x(), -rec.center().y()); this->setRect(rec); - this->setPos(point.toQPointF()); + this->setPos(point); this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); namePoint->blockSignals(true); QFont font = namePoint->font(); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp index 22e745653..c3485d5c1 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp @@ -130,8 +130,7 @@ VToolTriangle* VToolTriangle::Create(const quint32 _id, const QString &pointName const QSharedPointer firstPoint = data->GeometricObject(firstPointId); const QSharedPointer secondPoint = data->GeometricObject(secondPointId); - QPointF point = FindPoint(axisP1->toQPointF(), axisP2->toQPointF(), firstPoint->toQPointF(), - secondPoint->toQPointF()); + QPointF point = FindPoint(*axisP1, *axisP2, *firstPoint, *secondPoint); quint32 id = _id; if (typeCreation == Source::FromGui) { diff --git a/src/libs/vtools/tools/drawTools/vtoolline.cpp b/src/libs/vtools/tools/drawTools/vtoolline.cpp index acadc4f00..3b57cbb68 100644 --- a/src/libs/vtools/tools/drawTools/vtoolline.cpp +++ b/src/libs/vtools/tools/drawTools/vtoolline.cpp @@ -57,7 +57,7 @@ VToolLine::VToolLine(VAbstractPattern *doc, VContainer *data, quint32 id, quint3 //Line const QSharedPointer first = data->GeometricObject(firstPoint); const QSharedPointer second = data->GeometricObject(secondPoint); - this->setLine(QLineF(first->toQPointF(), second->toQPointF())); + this->setLine(QLineF(*first, *second)); this->setFlag(QGraphicsItem::ItemStacksBehindParent, true); this->setAcceptHoverEvents(true); this->setPen(QPen(Qt::black, qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor, @@ -503,6 +503,6 @@ void VToolLine::RefreshGeometry() { const QSharedPointer first = VAbstractTool::data.GeometricObject(firstPoint); const QSharedPointer second = VAbstractTool::data.GeometricObject(secondPoint); - this->setLine(QLineF(first->toQPointF(), second->toQPointF())); + this->setLine(QLineF(*first, *second)); this->setPen(QPen(CorrectColor(lineColor), pen().widthF(), LineStyleToPenStyle(typeLine))); } diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp index 9b22b2337..e06ecd7e2 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp @@ -317,7 +317,7 @@ void VNodePoint::RefreshPointGeometry(const VPointF &point) QRectF rec = QRectF(0, 0, radius*2, radius*2); rec.translate(-rec.center().x(), -rec.center().y()); this->setRect(rec); - this->setPos(point.toQPointF()); + this->setPos(point); namePoint->blockSignals(true); namePoint->setText(point.name()); diff --git a/src/libs/vtools/tools/vtooluniondetails.cpp b/src/libs/vtools/tools/vtooluniondetails.cpp index 585dd541b..7f3f72baf 100644 --- a/src/libs/vtools/tools/vtooluniondetails.cpp +++ b/src/libs/vtools/tools/vtooluniondetails.cpp @@ -119,8 +119,7 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte { VPointF *point = new VPointF(*data->GeometricObject(det.at(i).getId())); point->setMode(Draw::Modeling); - BiasRotatePoint(point, dx, dy, data->GeometricObject(pRotate)->toQPointF(), - angle); + BiasRotatePoint(point, dx, dy, *data->GeometricObject(pRotate), angle); idObject = data->AddGObject(point); children.append(idObject); VPointF *point1 = new VPointF(*point); @@ -138,7 +137,7 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte } else { - const QPointF p = data->GeometricObject(pRotate)->toQPointF(); + const QPointF p = *data->GeometricObject(pRotate); const QSharedPointer arc = data->GeometricObject(det.at(i).getId()); VPointF p1 = VPointF(arc->GetP1(), "A", 0, 0); BiasRotatePoint(&p1, dx, dy, p, angle); @@ -147,8 +146,8 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte VPointF *center = new VPointF(arc->GetCenter()); BiasRotatePoint(center, dx, dy, p, angle); - QLineF l1(center->toQPointF(), p1.toQPointF()); - QLineF l2(center->toQPointF(), p2.toQPointF()); + QLineF l1(*center, p1); + QLineF l2(*center, p2); center->setMode(Draw::Modeling); quint32 idCenter = data->AddGObject(center); Q_UNUSED(idCenter); @@ -177,7 +176,7 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte { const QSharedPointer spline = data->GeometricObject(det.at(i).getId()); - const QPointF p = data->GeometricObject(pRotate)->toQPointF(); + const QPointF p = *data->GeometricObject(pRotate); VPointF *p1 = new VPointF(spline->GetP1()); BiasRotatePoint(p1, dx, dy, p, angle); @@ -190,7 +189,7 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte VPointF *p4 = new VPointF(spline->GetP4()); BiasRotatePoint(p4, dx, dy, p, angle); - VSpline *spl = new VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4, 0, Draw::Modeling); + VSpline *spl = new VSpline(*p1, p2, p3, *p4, 0, Draw::Modeling); idObject = data->AddGObject(spl); children.append(idObject); @@ -223,7 +222,7 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte point2.Angle1Formula(), point1.Length2(), point1.Length2Formula(), point2.Length1(), point2.Length1Formula()); - const QPointF p = data->GeometricObject(pRotate)->toQPointF(); + const QPointF p = *data->GeometricObject(pRotate); VPointF *p1 = new VPointF(spline.GetP1()); BiasRotatePoint(p1, dx, dy, p, angle); @@ -236,7 +235,7 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte VPointF *p4 = new VPointF(spline.GetP4()); BiasRotatePoint(p4, dx, dy, p, angle); - VSpline spl = VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4); + VSpline spl = VSpline(*p1, p2, p3, *p4); if (i==1) { const qreal angle1 = spl.GetStartAngle()+180; @@ -299,7 +298,7 @@ void VToolUnionDetails::UpdatePoints(VContainer *data, const VDetail &det, const { VPointF *point = new VPointF(*data->GeometricObject(det.at(i).getId())); point->setMode(Draw::Modeling); - BiasRotatePoint(point, dx, dy, data->GeometricObject(pRotate)->toQPointF(), angle); + BiasRotatePoint(point, dx, dy, *data->GeometricObject(pRotate), angle); data->UpdateGObject(TakeNextId(children), point); } } @@ -308,7 +307,7 @@ void VToolUnionDetails::UpdatePoints(VContainer *data, const VDetail &det, const { if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != 0) { - const QPointF p = data->GeometricObject(pRotate)->toQPointF(); + const QPointF p = *data->GeometricObject(pRotate); const QSharedPointer arc = data->GeometricObject(det.at(i).getId()); VPointF p1 = VPointF(arc->GetP1()); BiasRotatePoint(&p1, dx, dy, p, angle); @@ -319,8 +318,8 @@ void VToolUnionDetails::UpdatePoints(VContainer *data, const VDetail &det, const VPointF *center = new VPointF(arc->GetCenter()); BiasRotatePoint(center, dx, dy, p, angle); - QLineF l1(center->toQPointF(), p1.toQPointF()); - QLineF l2(center->toQPointF(), p2.toQPointF()); + QLineF l1(*center, p1); + QLineF l2(*center, p2); VArc *arc1 = new VArc(*center, arc->GetRadius(), arc->GetFormulaRadius(), l1.angle(), QString().setNum(l1.angle()), l2.angle(), QString().setNum(l2.angle())); @@ -336,7 +335,7 @@ void VToolUnionDetails::UpdatePoints(VContainer *data, const VDetail &det, const { const QSharedPointer spline = data->GeometricObject(det.at(i).getId()); - const QPointF p = data->GeometricObject(pRotate)->toQPointF(); + const QPointF p = *data->GeometricObject(pRotate); VPointF *p1 = new VPointF(spline->GetP1()); BiasRotatePoint(p1, dx, dy, p, angle); @@ -349,7 +348,7 @@ void VToolUnionDetails::UpdatePoints(VContainer *data, const VDetail &det, const VPointF *p4 = new VPointF(spline->GetP4()); BiasRotatePoint(p4, dx, dy, p, angle); - VSpline *spl = new VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4, 0, Draw::Modeling); + VSpline *spl = new VSpline(*p1, p2, p3, *p4, 0, Draw::Modeling); data->UpdateGObject(TakeNextId(children), spl); delete p1; delete p4; @@ -373,7 +372,7 @@ void VToolUnionDetails::UpdatePoints(VContainer *data, const VDetail &det, const point2.Angle1Formula(), point1.Length2(), point1.Length2Formula(), point2.Length1(), point2.Length1Formula()); - const QPointF p = data->GeometricObject(pRotate)->toQPointF(); + const QPointF p = *data->GeometricObject(pRotate); VPointF *p1 = new VPointF(spline.GetP1()); BiasRotatePoint(p1, dx, dy, p, angle); @@ -386,7 +385,7 @@ void VToolUnionDetails::UpdatePoints(VContainer *data, const VDetail &det, const VPointF *p4 = new VPointF(spline.GetP4()); BiasRotatePoint(p4, dx, dy, p, angle); - VSpline spl = VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4); + VSpline spl = VSpline(*p1, p2, p3, *p4); if (i==1) { const qreal angle1 = spl.GetStartAngle()+180; @@ -431,7 +430,7 @@ void VToolUnionDetails::BiasRotatePoint(VPointF *point, const qreal &dx, const q { point->setX(point->x()+dx); point->setY(point->y()+dy); - QLineF line(pRotate, point->toQPointF()); + QLineF line(pRotate, *point); line.setAngle(line.angle()+angle); point->setX(line.p2().x()); point->setY(line.p2().y()); @@ -587,8 +586,8 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d point4.setX(point4.x()+dx); point4.setY(point4.y()+dy); - const QLineF p4p3 = QLineF(point4.toQPointF(), point3.toQPointF()); - const QLineF p1p2 = QLineF(point1.toQPointF(), point2.toQPointF()); + const QLineF p4p3 = QLineF(point4, point3); + const QLineF p1p2 = QLineF(point1, point2); const qreal angle = p4p3.angleTo(p1p2); qint32 pointsD2 = 0; //Keeps number points the second detail, what we have already added. diff --git a/src/libs/vtools/visualization/line/vistoolalongline.cpp b/src/libs/vtools/visualization/line/vistoolalongline.cpp index b08f6d393..96f30342e 100644 --- a/src/libs/vtools/visualization/line/vistoolalongline.cpp +++ b/src/libs/vtools/visualization/line/vistoolalongline.cpp @@ -66,22 +66,22 @@ void VisToolAlongLine::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(lineP1, first->toQPointF(), supportColor); + DrawPoint(lineP1, *first, supportColor); if (object2Id <= NULL_ID) { - DrawLine(line, QLineF(first->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(line, QLineF(*first, Visualization::scenePos), supportColor); } else { const QSharedPointer second = Visualization::data->GeometricObject(object2Id); - DrawPoint(lineP2, second->toQPointF(), supportColor); + DrawPoint(lineP2, *second, supportColor); - DrawLine(line, QLineF(first->toQPointF(), second->toQPointF()), supportColor); + DrawLine(line, QLineF(*first, *second), supportColor); if (not qFuzzyIsNull(length)) { - QLineF mainLine = VGObject::BuildLine(first->toQPointF(), length, line->line().angle()); + QLineF mainLine = VGObject::BuildLine(*first, length, line->line().angle()); DrawLine(this, mainLine, mainColor, lineStyle); DrawPoint(point, mainLine.p2(), mainColor); diff --git a/src/libs/vtools/visualization/line/vistoolbisector.cpp b/src/libs/vtools/visualization/line/vistoolbisector.cpp index d78f931c3..c5c92eee1 100644 --- a/src/libs/vtools/visualization/line/vistoolbisector.cpp +++ b/src/libs/vtools/visualization/line/vistoolbisector.cpp @@ -74,46 +74,43 @@ void VisToolBisector::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(line1P1, first->toQPointF(), supportColor); + DrawPoint(line1P1, *first, supportColor); if (object2Id <= NULL_ID) { - DrawLine(line1, QLineF(first->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(line1, QLineF(*first, Visualization::scenePos), supportColor); } else { const QSharedPointer second = Visualization::data->GeometricObject(object2Id); - DrawPoint(line1P2, second->toQPointF(), supportColor); + DrawPoint(line1P2, *second, supportColor); - DrawLine(line1, QLineF(first->toQPointF(), second->toQPointF()), supportColor); + DrawLine(line1, QLineF(*first, *second), supportColor); if (object3Id <= NULL_ID) { - DrawLine(line2, QLineF(second->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(line2, QLineF(*second, Visualization::scenePos), supportColor); } else { const QSharedPointer third = Visualization::data->GeometricObject(object3Id); - DrawPoint(line2P2, third->toQPointF(), supportColor); + DrawPoint(line2P2, *third, supportColor); - DrawLine(line2, QLineF(second->toQPointF(), third->toQPointF()), supportColor); + DrawLine(line2, QLineF(*second, *third), supportColor); if (not qFuzzyIsNull(length)) { - qreal angle = VToolBisector::BisectorAngle(first->toQPointF(), second->toQPointF(), - third->toQPointF()); - QLineF mainLine = VGObject::BuildLine(second->toQPointF(), length, angle); + qreal angle = VToolBisector::BisectorAngle(*first, *second, *third); + QLineF mainLine = VGObject::BuildLine(*second, length, angle); DrawLine(this, mainLine, mainColor, lineStyle); DrawPoint(point, mainLine.p2(), mainColor); } else { - qreal angle = VToolBisector::BisectorAngle(first->toQPointF(), second->toQPointF(), - third->toQPointF()); - QPointF endRay = Ray(second->toQPointF(), angle); - QLineF mainLine = VGObject::BuildLine(second->toQPointF(), - QLineF(second->toQPointF(), endRay).length(), angle); + qreal angle = VToolBisector::BisectorAngle(*first, *second, *third); + QPointF endRay = Ray(*second, angle); + QLineF mainLine = VGObject::BuildLine(*second, QLineF(*second, endRay).length(), angle); DrawLine(this, mainLine, mainColor, lineStyle); } } diff --git a/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp b/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp index 2de41114c..1f10d0ad6 100644 --- a/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp +++ b/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp @@ -63,17 +63,17 @@ void VisToolCurveIntersectAxis::RefreshGeometry() const QSharedPointer first = Visualization::data->GeometricObject(axisPointId); if (VFuzzyComparePossibleNulls(angle, -1)) { - axis = Axis(first->toQPointF(), Visualization::scenePos); + axis = Axis(*first, Visualization::scenePos); } else { - axis = Axis(first->toQPointF(), angle); + axis = Axis(*first, angle); } - DrawPoint(basePoint, first->toQPointF(), mainColor); + DrawPoint(basePoint, *first, mainColor); DrawLine(axisLine, axis, supportColor, Qt::DashLine); - QPointF p = VToolCurveIntersectAxis::FindPoint(first->toQPointF(), axis.angle(), curve); - QLineF axis_line(first->toQPointF(), p); + QPointF p = VToolCurveIntersectAxis::FindPoint(*first, axis.angle(), curve); + QLineF axis_line(*first, p); DrawLine(this, axis_line, mainColor, lineStyle); DrawPoint(point, p, mainColor); diff --git a/src/libs/vtools/visualization/line/vistoolendline.cpp b/src/libs/vtools/visualization/line/vistoolendline.cpp index b61cc006a..fcc7a87aa 100644 --- a/src/libs/vtools/visualization/line/vistoolendline.cpp +++ b/src/libs/vtools/visualization/line/vistoolendline.cpp @@ -55,17 +55,17 @@ void VisToolEndLine::RefreshGeometry() { if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) { - line = QLineF(first->toQPointF(), Visualization::scenePos); + line = QLineF(*first, Visualization::scenePos); line.setAngle(CorrectAngle(line.angle())); } else { - line = QLineF(first->toQPointF(), Visualization::scenePos); + line = QLineF(*first, Visualization::scenePos); } } else { - line = VGObject::BuildLine(first->toQPointF(), length, angle); + line = VGObject::BuildLine(*first, length, angle); DrawPoint(point, line.p2(), mainColor); } DrawLine(this, line, mainColor, lineStyle); diff --git a/src/libs/vtools/visualization/line/vistoolheight.cpp b/src/libs/vtools/visualization/line/vistoolheight.cpp index 641dbb218..20f1a2217 100644 --- a/src/libs/vtools/visualization/line/vistoolheight.cpp +++ b/src/libs/vtools/visualization/line/vistoolheight.cpp @@ -54,37 +54,37 @@ void VisToolHeight::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(base_point, first->toQPointF(), supportColor); + DrawPoint(base_point, *first, supportColor); if (lineP1Id <= NULL_ID) { - DrawLine(this, QLineF(first->toQPointF(), Visualization::scenePos), mainColor); + DrawLine(this, QLineF(*first, Visualization::scenePos), mainColor); } else { const QSharedPointer second = Visualization::data->GeometricObject(lineP1Id); - DrawPoint(lineP1, second->toQPointF(), supportColor); + DrawPoint(lineP1, *second, supportColor); QLineF base_line; if (lineP2Id <= NULL_ID) { - base_line = QLineF(second->toQPointF(), Visualization::scenePos); + base_line = QLineF(*second, Visualization::scenePos); DrawLine(line, base_line, supportColor); } else { const QSharedPointer third = Visualization::data->GeometricObject(lineP2Id); - DrawPoint(lineP2, third->toQPointF(), supportColor); + DrawPoint(lineP2, *third, supportColor); - base_line = QLineF(second->toQPointF(), third->toQPointF()); + base_line = QLineF(*second, *third); } DrawLine(line, base_line, supportColor); - QPointF height = VToolHeight::FindPoint(base_line, first->toQPointF()); + QPointF height = VToolHeight::FindPoint(base_line, *first); DrawPoint(point, height, mainColor); - QLineF height_line(first->toQPointF(), height); + QLineF height_line(*first, height); DrawLine(this, height_line, mainColor, lineStyle); ShowIntersection(height_line, base_line); diff --git a/src/libs/vtools/visualization/line/vistoolline.cpp b/src/libs/vtools/visualization/line/vistoolline.cpp index 7de8599a7..49780bc6a 100644 --- a/src/libs/vtools/visualization/line/vistoolline.cpp +++ b/src/libs/vtools/visualization/line/vistoolline.cpp @@ -49,12 +49,12 @@ void VisToolLine::RefreshGeometry() const QSharedPointer first = Visualization::data->GeometricObject(object1Id); if (point2Id == NULL_ID) { - line = QLineF(first->toQPointF(), Visualization::scenePos); + line = QLineF(*first, Visualization::scenePos); } else { const QSharedPointer second = Visualization::data->GeometricObject(point2Id); - line = QLineF(first->toQPointF(), second->toQPointF()); + line = QLineF(*first, *second); } DrawLine(this, line, mainColor, lineStyle); } diff --git a/src/libs/vtools/visualization/line/vistoollineintersect.cpp b/src/libs/vtools/visualization/line/vistoollineintersect.cpp index 9a648de77..904113d9f 100644 --- a/src/libs/vtools/visualization/line/vistoollineintersect.cpp +++ b/src/libs/vtools/visualization/line/vistoollineintersect.cpp @@ -55,18 +55,18 @@ void VisToolLineIntersect::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(line1P1, first->toQPointF(), supportColor); + DrawPoint(line1P1, *first, supportColor); if (line1P2Id <= NULL_ID) { - DrawLine(line1, QLineF(first->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(line1, QLineF(*first, Visualization::scenePos), supportColor); } else { const QSharedPointer second = Visualization::data->GeometricObject(line1P2Id); - DrawPoint(line1P2, second->toQPointF(), supportColor); + DrawPoint(line1P2, *second, supportColor); - DrawLine(line1, QLineF(first->toQPointF(), second->toQPointF()), supportColor); + DrawLine(line1, QLineF(*first, *second), supportColor); if (line2P1Id <= NULL_ID) { @@ -75,14 +75,14 @@ void VisToolLineIntersect::RefreshGeometry() else { const QSharedPointer third = Visualization::data->GeometricObject(line2P1Id); - DrawPoint(line2P1, third->toQPointF(), supportColor); + DrawPoint(line2P1, *third, supportColor); if (line2P2Id <= NULL_ID) { - DrawLine(this, QLineF(third->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(this, QLineF(*third, Visualization::scenePos), supportColor); - QLineF l1(first->toQPointF(), second->toQPointF()); - QLineF l2(third->toQPointF(), Visualization::scenePos); + QLineF l1(*first, *second); + QLineF l2(*third, Visualization::scenePos); QPointF fPoint; QLineF::IntersectType intersect = l1.intersect(l2, &fPoint); if (intersect == QLineF::UnboundedIntersection || intersect == QLineF::BoundedIntersection) @@ -93,12 +93,12 @@ void VisToolLineIntersect::RefreshGeometry() else { const QSharedPointer forth = Visualization::data->GeometricObject(line2P2Id); - DrawPoint(line2P2, forth->toQPointF(), supportColor); + DrawPoint(line2P2, *forth, supportColor); - DrawLine(this, QLineF(third->toQPointF(), forth->toQPointF()), supportColor); + DrawLine(this, QLineF(*third, *forth), supportColor); - QLineF l1(first->toQPointF(), second->toQPointF()); - QLineF l2(third->toQPointF(), forth->toQPointF()); + QLineF l1(*first, *second); + QLineF l2(*third, *forth); QPointF fPoint; QLineF::IntersectType intersect = l1.intersect(l2, &fPoint); if (intersect == QLineF::UnboundedIntersection || intersect == QLineF::BoundedIntersection) diff --git a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp index 94096a188..8481818c4 100644 --- a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp +++ b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp @@ -57,18 +57,18 @@ void VisToolLineIntersectAxis::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(lineP1, first->toQPointF(), supportColor); + DrawPoint(lineP1, *first, supportColor); if (point2Id <= NULL_ID) { - DrawLine(baseLine, QLineF(first->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(baseLine, QLineF(*first, Visualization::scenePos), supportColor); } else { const QSharedPointer second = Visualization::data->GeometricObject(point2Id); - DrawPoint(lineP2, second->toQPointF(), supportColor); + DrawPoint(lineP2, *second, supportColor); - const QLineF base_line(first->toQPointF(), second->toQPointF()); + const QLineF base_line(*first, *second); DrawLine(baseLine, base_line, supportColor); if (axisPointId > NULL_ID) @@ -77,17 +77,17 @@ void VisToolLineIntersectAxis::RefreshGeometry() const QSharedPointer third = Visualization::data->GeometricObject(axisPointId); if (VFuzzyComparePossibleNulls(angle, -1)) { - axis = Axis(third->toQPointF(), Visualization::scenePos); + axis = Axis(*third, Visualization::scenePos); } else { - axis = Axis(third->toQPointF(), angle); + axis = Axis(*third, angle); } - DrawPoint(basePoint, third->toQPointF(), mainColor); + DrawPoint(basePoint, *third, mainColor); DrawLine(axisLine, axis, supportColor, Qt::DashLine); QPointF p = VToolLineIntersectAxis::FindPoint(axis, base_line); - QLineF axis_line(third->toQPointF(), p); + QLineF axis_line(*third, p); DrawLine(this, axis_line, mainColor, lineStyle); DrawPoint(point, p, mainColor); diff --git a/src/libs/vtools/visualization/line/vistoolnormal.cpp b/src/libs/vtools/visualization/line/vistoolnormal.cpp index 1b30f924e..fc326a169 100644 --- a/src/libs/vtools/visualization/line/vistoolnormal.cpp +++ b/src/libs/vtools/visualization/line/vistoolnormal.cpp @@ -54,11 +54,11 @@ void VisToolNormal::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(lineP1, first->toQPointF(), supportColor); + DrawPoint(lineP1, *first, supportColor); if (object2Id <= NULL_ID) { - QLineF line_mouse(first->toQPointF(), Visualization::scenePos); + QLineF line_mouse(*first, Visualization::scenePos); DrawLine(line, line_mouse, supportColor); QLineF normal = line_mouse.normalVector(); @@ -68,9 +68,9 @@ void VisToolNormal::RefreshGeometry() else { const QSharedPointer second = Visualization::data->GeometricObject(object2Id); - DrawPoint(lineP2, second->toQPointF(), supportColor); + DrawPoint(lineP2, *second, supportColor); - QLineF line_mouse(first->toQPointF(), second->toQPointF()); + QLineF line_mouse(*first, *second); DrawLine(line, line_mouse, supportColor); if (qFuzzyIsNull(length)) @@ -81,8 +81,8 @@ void VisToolNormal::RefreshGeometry() } else { - QPointF fPoint = VToolNormal::FindPoint(first->toQPointF(), second->toQPointF(), length, angle); - QLineF mainLine = QLineF(first->toQPointF(), fPoint); + QPointF fPoint = VToolNormal::FindPoint(*first, *second, length, angle); + QLineF mainLine = QLineF(*first, fPoint); DrawLine(this, mainLine, mainColor, lineStyle); DrawPoint(point, mainLine.p2(), mainColor); diff --git a/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp b/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp index c71f832b3..e589380de 100644 --- a/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp @@ -53,16 +53,16 @@ void VisToolPointFromArcAndTangent::RefreshGeometry() if (object1Id > NULL_ID)// tangent point { const QSharedPointer tan = Visualization::data->GeometricObject(object1Id); - DrawPoint(tangent, tan->toQPointF(), supportColor); + DrawPoint(tangent, *tan, supportColor); if (arcId > NULL_ID)// circle center { const QSharedPointer arc = Visualization::data->GeometricObject(arcId); DrawPath(arcPath, arc->GetPath(PathDirection::Show), Qt::darkGreen, Qt::SolidLine, Qt::RoundCap); - FindRays(tan->toQPointF(), arc.data()); + FindRays(*tan, arc.data()); - const QPointF fPoint = VToolPointFromArcAndTangent::FindPoint(tan->toQPointF(), arc.data(), crossPoint); + const QPointF fPoint = VToolPointFromArcAndTangent::FindPoint(*tan, arc.data(), crossPoint); DrawPoint(point, fPoint, mainColor); } } @@ -84,7 +84,7 @@ void VisToolPointFromArcAndTangent::setCrossPoint(const CrossCirclesPoint &value void VisToolPointFromArcAndTangent::FindRays(const QPointF &p, const VArc *arc) { QPointF p1, p2; - const QPointF center = arc->GetCenter().toQPointF(); + const QPointF center = arc->GetCenter(); const qreal radius = arc->GetRadius(); const int res = VGObject::ContactPoints (p, center, radius, p1, p2); diff --git a/src/libs/vtools/visualization/line/vistoolpointfromcircleandtangent.cpp b/src/libs/vtools/visualization/line/vistoolpointfromcircleandtangent.cpp index cca09507b..dd813e90b 100644 --- a/src/libs/vtools/visualization/line/vistoolpointfromcircleandtangent.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointfromcircleandtangent.cpp @@ -53,22 +53,21 @@ void VisToolPointFromCircleAndTangent::RefreshGeometry() if (object1Id > NULL_ID)// tangent point { const QSharedPointer tan = Visualization::data->GeometricObject(object1Id); - DrawPoint(tangent, tan->toQPointF(), supportColor); + DrawPoint(tangent, *tan, supportColor); if (object2Id > NULL_ID)// circle center { const QSharedPointer center = Visualization::data->GeometricObject(object2Id); - DrawPoint(cCenter, center->toQPointF(), supportColor); + DrawPoint(cCenter, *center, supportColor); if (cRadius > 0) { cPath->setRect(PointRect(cRadius)); - DrawPoint(cPath, center->toQPointF(), Qt::darkGreen, Qt::DashLine); + DrawPoint(cPath, *center, Qt::darkGreen, Qt::DashLine); - FindRays(tan->toQPointF(), center->toQPointF(), cRadius); + FindRays(*tan, *center, cRadius); - const QPointF fPoint = VToolPointFromCircleAndTangent::FindPoint(tan->toQPointF(), center->toQPointF(), - cRadius, crossPoint); + const QPointF fPoint = VToolPointFromCircleAndTangent::FindPoint(*tan, *center, cRadius, crossPoint); DrawPoint(point, fPoint, mainColor); } } diff --git a/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp b/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp index 926b4921c..866e932d2 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp @@ -53,17 +53,17 @@ void VisToolPointOfContact::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(lineP1, first->toQPointF(), supportColor); + DrawPoint(lineP1, *first, supportColor); if (lineP2Id <= NULL_ID) { - DrawLine(this, QLineF(first->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(this, QLineF(*first, Visualization::scenePos), supportColor); } else { const QSharedPointer second = Visualization::data->GeometricObject(lineP2Id); - DrawPoint(lineP2, second->toQPointF(), supportColor); - DrawLine(this, QLineF(first->toQPointF(), second->toQPointF()), supportColor); + DrawPoint(lineP2, *second, supportColor); + DrawLine(this, QLineF(*first, *second), supportColor); if (radiusId <= NULL_ID) { @@ -72,16 +72,15 @@ void VisToolPointOfContact::RefreshGeometry() else { const QSharedPointer third = Visualization::data->GeometricObject(radiusId); - DrawPoint(arc_point, third->toQPointF(), supportColor); + DrawPoint(arc_point, *third, supportColor); if (not qFuzzyIsNull(radius)) { - QPointF fPoint = VToolPointOfContact::FindPoint(radius, third->toQPointF(), first->toQPointF(), - second->toQPointF()); + QPointF fPoint = VToolPointOfContact::FindPoint(radius, *third, *first, *second); DrawPoint(point, fPoint, mainColor); circle->setRect(PointRect(radius)); - DrawPoint(circle, third->toQPointF(), supportColor, Qt::DashLine); + DrawPoint(circle, *third, supportColor, Qt::DashLine); } } } diff --git a/src/libs/vtools/visualization/line/vistoolpointofintersection.cpp b/src/libs/vtools/visualization/line/vistoolpointofintersection.cpp index 7f3afe0a3..378da41c0 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofintersection.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointofintersection.cpp @@ -57,9 +57,9 @@ void VisToolPointOfIntersection::RefreshGeometry() else { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(axisP1, first->toQPointF(), supportColor); + DrawPoint(axisP1, *first, supportColor); - axisL1 = Axis(first->toQPointF(), 90); + axisL1 = Axis(*first, 90); DrawLine(this, axisL1, supportColor, Qt::DashLine); QLineF axisL2; @@ -71,8 +71,8 @@ void VisToolPointOfIntersection::RefreshGeometry() else { const QSharedPointer second = Visualization::data->GeometricObject(point2Id); - DrawPoint(axisP2, second->toQPointF(), supportColor); - axisL2 = Axis(second->toQPointF(), 180); + DrawPoint(axisP2, *second, supportColor); + axisL2 = Axis(*second, 180); ShowIntersection(axisL1, axisL2, mainColor); } DrawLine(axis2, axisL2, supportColor, Qt::DashLine); diff --git a/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp b/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp index b211311bf..3de0104ab 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp @@ -56,23 +56,22 @@ void VisToolPointOfIntersectionCircles::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(c1Center, first->toQPointF(), supportColor); + DrawPoint(c1Center, *first, supportColor); if (object2Id > NULL_ID) { const QSharedPointer second = Visualization::data->GeometricObject(object2Id); - DrawPoint(c2Center, second->toQPointF(), supportColor); + DrawPoint(c2Center, *second, supportColor); if (c1Radius > 0 && c2Radius > 0) { c1Path->setRect(PointRect(c1Radius)); - DrawPoint(c1Path, first->toQPointF(), Qt::darkGreen, Qt::DashLine); + DrawPoint(c1Path, *first, Qt::darkGreen, Qt::DashLine); c2Path->setRect(PointRect(c2Radius)); - DrawPoint(c2Path, second->toQPointF(), Qt::darkRed, Qt::DashLine); + DrawPoint(c2Path, *second, Qt::darkRed, Qt::DashLine); - const QPointF fPoint = VToolPointOfIntersectionCircles::FindPoint(first->toQPointF(), - second->toQPointF(), c1Radius, + const QPointF fPoint = VToolPointOfIntersectionCircles::FindPoint(*first, *second, c1Radius, c2Radius, crossPoint); DrawPoint(point, fPoint, mainColor); } diff --git a/src/libs/vtools/visualization/line/vistoolrotation.cpp b/src/libs/vtools/visualization/line/vistoolrotation.cpp index fd0aed0f3..9cd40790a 100644 --- a/src/libs/vtools/visualization/line/vistoolrotation.cpp +++ b/src/libs/vtools/visualization/line/vistoolrotation.cpp @@ -75,7 +75,7 @@ void VisToolRotation::RefreshGeometry() if (object1Id != NULL_ID) { - const QPointF origin = Visualization::data->GeometricObject(object1Id)->toQPointF(); + const QPointF origin = *Visualization::data->GeometricObject(object1Id); DrawPoint(point, origin, supportColor2); QLineF rLine; @@ -122,11 +122,11 @@ void VisToolRotation::RefreshGeometry() ++iPoint; QGraphicsEllipseItem *point = GetPoint(iPoint); - DrawPoint(point, p->toQPointF(), supportColor); + DrawPoint(point, *p, supportColor); ++iPoint; point = GetPoint(iPoint); - DrawPoint(point, p->Rotate(origin, angle).toQPointF(), supportColor); + DrawPoint(point, p->Rotate(origin, angle), supportColor); break; } case GOType::Arc: diff --git a/src/libs/vtools/visualization/line/vistoolshoulderpoint.cpp b/src/libs/vtools/visualization/line/vistoolshoulderpoint.cpp index e9f1de60e..3b786dfe6 100644 --- a/src/libs/vtools/visualization/line/vistoolshoulderpoint.cpp +++ b/src/libs/vtools/visualization/line/vistoolshoulderpoint.cpp @@ -56,46 +56,44 @@ void VisToolShoulderPoint::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(line1P1, first->toQPointF(), supportColor); + DrawPoint(line1P1, *first, supportColor); if (lineP1Id <= NULL_ID) { - DrawLine(line1, QLineF(first->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(line1, QLineF(*first, Visualization::scenePos), supportColor); } else { const QSharedPointer second = Visualization::data->GeometricObject(lineP1Id); - DrawPoint(line1P2, second->toQPointF(), supportColor); + DrawPoint(line1P2, *second, supportColor); - DrawLine(line1, QLineF(first->toQPointF(), second->toQPointF()), supportColor); + DrawLine(line1, QLineF(*first, *second), supportColor); if (lineP2Id <= NULL_ID) { - DrawLine(line2, QLineF(second->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(line2, QLineF(*second, Visualization::scenePos), supportColor); } else { const QSharedPointer third = Visualization::data->GeometricObject(lineP2Id); - DrawPoint(line2P2, third->toQPointF(), supportColor); + DrawPoint(line2P2, *third, supportColor); - DrawLine(line2, QLineF(second->toQPointF(), third->toQPointF()), supportColor); + DrawLine(line2, QLineF(*second, *third), supportColor); if (not qFuzzyIsNull(length)) { - QPointF fPoint = VToolShoulderPoint::FindPoint(second->toQPointF(), third->toQPointF(), - first->toQPointF(), length); - QLineF mainLine = QLineF(second->toQPointF(), fPoint); + QPointF fPoint = VToolShoulderPoint::FindPoint(*second, *third, *first, length); + QLineF mainLine = QLineF(*second, fPoint); DrawLine(this, mainLine, mainColor, lineStyle); DrawPoint(point, mainLine.p2(), mainColor); - DrawLine(line3, QLineF(first->toQPointF(), mainLine.p2()), supportColor, Qt::DashLine); + DrawLine(line3, QLineF(*first, mainLine.p2()), supportColor, Qt::DashLine); } else { - qreal angle = QLineF(second->toQPointF(), third->toQPointF()).angle(); - QPointF endRay = Ray(second->toQPointF(), angle); - QLineF mainLine = VGObject::BuildLine(second->toQPointF(), - QLineF(second->toQPointF(), endRay).length(), angle); + qreal angle = QLineF(*second, *third).angle(); + QPointF endRay = Ray(*second, angle); + QLineF mainLine = VGObject::BuildLine(*second, QLineF(*second, endRay).length(), angle); DrawLine(this, mainLine, mainColor, lineStyle); } } diff --git a/src/libs/vtools/visualization/line/vistooltriangle.cpp b/src/libs/vtools/visualization/line/vistooltriangle.cpp index de7e96352..11eec05ca 100644 --- a/src/libs/vtools/visualization/line/vistooltriangle.cpp +++ b/src/libs/vtools/visualization/line/vistooltriangle.cpp @@ -59,18 +59,18 @@ void VisToolTriangle::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(axisP1, first->toQPointF(), supportColor); + DrawPoint(axisP1, *first, supportColor); if (object2Id <= NULL_ID) { - DrawAimedAxis(axis, QLineF(first->toQPointF(), Visualization::scenePos), supportColor); + DrawAimedAxis(axis, QLineF(*first, Visualization::scenePos), supportColor); } else { const QSharedPointer second = Visualization::data->GeometricObject(object2Id); - DrawPoint(axisP2, second->toQPointF(), supportColor); + DrawPoint(axisP2, *second, supportColor); - DrawAimedAxis(axis, QLineF(first->toQPointF(), second->toQPointF()), supportColor); + DrawAimedAxis(axis, QLineF(*first, *second), supportColor); if (hypotenuseP1Id <= NULL_ID) { @@ -79,32 +79,30 @@ void VisToolTriangle::RefreshGeometry() else { const QSharedPointer third = Visualization::data->GeometricObject(hypotenuseP1Id); - DrawPoint(hypotenuseP1, third->toQPointF(), supportColor); + DrawPoint(hypotenuseP1, *third, supportColor); if (hypotenuseP2Id <= NULL_ID) { - DrawLine(this, QLineF(third->toQPointF(), Visualization::scenePos), supportColor, Qt::DashLine); + DrawLine(this, QLineF(*third, Visualization::scenePos), supportColor, Qt::DashLine); - QPointF trPoint = VToolTriangle::FindPoint(first->toQPointF(), second->toQPointF(), - third->toQPointF(), Visualization::scenePos); + QPointF trPoint = VToolTriangle::FindPoint(*first, *second, *third, Visualization::scenePos); DrawPoint(point, trPoint, mainColor); - DrawLine(foot1, QLineF(third->toQPointF(), trPoint), supportColor, Qt::DashLine); + DrawLine(foot1, QLineF(*third, trPoint), supportColor, Qt::DashLine); DrawLine(foot2, QLineF(Visualization::scenePos, trPoint), supportColor, Qt::DashLine); } else { const QSharedPointer forth = Visualization::data->GeometricObject(hypotenuseP2Id); - DrawPoint(hypotenuseP2, forth->toQPointF(), supportColor); + DrawPoint(hypotenuseP2, *forth, supportColor); - DrawLine(this, QLineF(third->toQPointF(), forth->toQPointF()), supportColor, Qt::DashLine); + DrawLine(this, QLineF(*third, *forth), supportColor, Qt::DashLine); - QPointF trPoint = VToolTriangle::FindPoint(first->toQPointF(), second->toQPointF(), - third->toQPointF(), forth->toQPointF()); + QPointF trPoint = VToolTriangle::FindPoint(*first, *second, *third, *forth); DrawPoint(point, trPoint, mainColor); - DrawLine(foot1, QLineF(third->toQPointF(), trPoint), supportColor, Qt::DashLine); - DrawLine(foot2, QLineF(forth->toQPointF(), trPoint), supportColor, Qt::DashLine); + DrawLine(foot1, QLineF(*third, trPoint), supportColor, Qt::DashLine); + DrawLine(foot2, QLineF(*forth, trPoint), supportColor, Qt::DashLine); } } } diff --git a/src/libs/vtools/visualization/line/vistooltruedarts.cpp b/src/libs/vtools/visualization/line/vistooltruedarts.cpp index 4b4a53163..f6dbbdab9 100644 --- a/src/libs/vtools/visualization/line/vistooltruedarts.cpp +++ b/src/libs/vtools/visualization/line/vistooltruedarts.cpp @@ -75,55 +75,51 @@ void VisToolTrueDarts::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer blP1 = Visualization::data->GeometricObject(object1Id); - DrawPoint(baseLineP1, blP1->toQPointF(), supportColor); + DrawPoint(baseLineP1, *blP1, supportColor); if (baseLineP2Id <= NULL_ID) { - DrawLine(this, QLineF(blP1->toQPointF(), Visualization::scenePos), supportColor, Qt::DashLine); + DrawLine(this, QLineF(*blP1, Visualization::scenePos), supportColor, Qt::DashLine); } else { const QSharedPointer blP2 = Visualization::data->GeometricObject(baseLineP2Id); - DrawPoint(baseLineP2, blP2->toQPointF(), supportColor); - DrawLine(this, QLineF(blP1->toQPointF(), blP2->toQPointF()), supportColor, Qt::DashLine); + DrawPoint(baseLineP2, *blP2, supportColor); + DrawLine(this, QLineF(*blP1, *blP2), supportColor, Qt::DashLine); if (dartP1Id > NULL_ID) { const QSharedPointer d1 = Visualization::data->GeometricObject(dartP1Id); - DrawPoint(dartP1, d1->toQPointF(), supportColor); + DrawPoint(dartP1, *d1, supportColor); if (dartP2Id <= NULL_ID) { - DrawLine(p1d2, QLineF(d1->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(p1d2, QLineF(*d1, Visualization::scenePos), supportColor); } else { const QSharedPointer d2 = Visualization::data->GeometricObject(dartP2Id); - DrawPoint(dartP2, d2->toQPointF(), supportColor); - DrawLine(p1d2, QLineF(d1->toQPointF(), d2->toQPointF()), supportColor); + DrawPoint(dartP2, *d2, supportColor); + DrawLine(p1d2, QLineF(*d1, *d2), supportColor); if (dartP3Id <= NULL_ID) { - DrawLine(d2p2, QLineF(d2->toQPointF(), Visualization::scenePos), supportColor); + DrawLine(d2p2, QLineF(*d2, Visualization::scenePos), supportColor); } else { const QSharedPointer d3 = Visualization::data->GeometricObject(dartP3Id); - DrawPoint(dartP3, d3->toQPointF(), supportColor); - DrawLine(d2p2, QLineF(d2->toQPointF(), d3->toQPointF()), supportColor); + DrawPoint(dartP3, *d3, supportColor); + DrawLine(d2p2, QLineF(*d2, *d3), supportColor); QPointF p1; QPointF p2; - VToolTrueDarts::FindPoint(blP1->toQPointF(), - blP2->toQPointF(), - d1->toQPointF(), - d2->toQPointF(), - d3->toQPointF(), p1, p2); + VToolTrueDarts::FindPoint(*blP1, *blP2, *d1, *d2, *d3, p1, p2); - DrawLine(lineblP1P1, QLineF(blP1->toQPointF(), p1), supportColor); - DrawLine(lineblP2P2, QLineF(blP2->toQPointF(), p2), supportColor); - DrawLine(p1d2, QLineF(p1, d2->toQPointF()), supportColor); - DrawLine(d2p2, QLineF(d2->toQPointF(), p2), supportColor); + DrawLine(lineblP1P1, QLineF(*blP1, p1), supportColor); + DrawLine(lineblP2P2, QLineF(*blP2, p2), supportColor); + DrawLine(p1d2, QLineF(p1, *d2), supportColor); + DrawLine(d2p2, QLineF(*d2, p2), supportColor); DrawPoint(point1, p1, mainColor); DrawPoint(point2, p2, mainColor); diff --git a/src/libs/vtools/visualization/path/vistoolarc.cpp b/src/libs/vtools/visualization/path/vistoolarc.cpp index 9dac04450..1d2786473 100644 --- a/src/libs/vtools/visualization/path/vistoolarc.cpp +++ b/src/libs/vtools/visualization/path/vistoolarc.cpp @@ -48,7 +48,7 @@ void VisToolArc::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(arcCenter, first->toQPointF(), supportColor); + DrawPoint(arcCenter, *first, supportColor); if (not qFuzzyIsNull(radius) && f1 >= 0 && f2 >= 0 && not VFuzzyComparePossibleNulls(f1, f2)) { diff --git a/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp b/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp index 4edb00767..c703f8ac2 100644 --- a/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp +++ b/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp @@ -48,7 +48,7 @@ void VisToolArcWithLength::RefreshGeometry() if (object1Id > NULL_ID) { const QSharedPointer first = Visualization::data->GeometricObject(object1Id); - DrawPoint(arcCenter, first->toQPointF(), supportColor); + DrawPoint(arcCenter, *first, supportColor); if (not qFuzzyIsNull(radius) && f1 >= 0 && not qFuzzyIsNull(length)) { diff --git a/src/libs/vtools/visualization/path/vistoolcubicbezier.cpp b/src/libs/vtools/visualization/path/vistoolcubicbezier.cpp index 7d534657a..951f33f3f 100644 --- a/src/libs/vtools/visualization/path/vistoolcubicbezier.cpp +++ b/src/libs/vtools/visualization/path/vistoolcubicbezier.cpp @@ -62,17 +62,17 @@ void VisToolCubicBezier::RefreshGeometry() if (object1Id > NULL_ID) { const auto first = Visualization::data->GeometricObject(object1Id); - DrawPoint(point1, first->toQPointF(), Qt::DashLine); + DrawPoint(point1, *first, Qt::DashLine); if (object2Id <= NULL_ID) { - DrawLine(helpLine1, QLineF(first->toQPointF(), Visualization::scenePos), mainColor, Qt::DashLine); + DrawLine(helpLine1, QLineF(*first, Visualization::scenePos), mainColor, Qt::DashLine); } else { const auto second = Visualization::data->GeometricObject(object2Id); - DrawPoint(point2, second->toQPointF(), supportColor); - DrawLine(helpLine1, QLineF(first->toQPointF(), second->toQPointF()), mainColor, Qt::DashLine); + DrawPoint(point2, *second, supportColor); + DrawLine(helpLine1, QLineF(*first, *second), mainColor, Qt::DashLine); if (object3Id <= NULL_ID) { @@ -83,19 +83,19 @@ void VisToolCubicBezier::RefreshGeometry() else { const auto third = Visualization::data->GeometricObject(object3Id); - DrawPoint(point3, third->toQPointF(), supportColor); + DrawPoint(point3, *third, supportColor); if (object4Id <= NULL_ID) { VCubicBezier spline(*first, *second, *third, VPointF(Visualization::scenePos)); DrawPath(this, spline.GetPath(PathDirection::Hide), mainColor, Qt::SolidLine, Qt::RoundCap); - DrawLine(helpLine2, QLineF(third->toQPointF(), Visualization::scenePos), mainColor, Qt::DashLine); + DrawLine(helpLine2, QLineF(*third, Visualization::scenePos), mainColor, Qt::DashLine); } else { const auto fourth = Visualization::data->GeometricObject(object4Id); - DrawPoint(point4, fourth->toQPointF(), supportColor); - DrawLine(helpLine2, QLineF(fourth->toQPointF(), third->toQPointF()), mainColor, Qt::DashLine); + DrawPoint(point4, *fourth, supportColor); + DrawLine(helpLine2, QLineF(*fourth, *third), mainColor, Qt::DashLine); VCubicBezier spline(*first, *second, *third, *fourth); DrawPath(this, spline.GetPath(PathDirection::Show), mainColor, Qt::SolidLine, Qt::RoundCap); diff --git a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp index 198f64938..d394ec40b 100644 --- a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp +++ b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp @@ -65,7 +65,7 @@ void VisToolCubicBezierPath::RefreshGeometry() for (int i = 0; i < size; ++i) { QGraphicsEllipseItem *point = this->getPoint(mainPoints, static_cast(i), 1/*zValue*/); - DrawPoint(point, pathPoints.at(i).toQPointF(), supportColor); + DrawPoint(point, pathPoints.at(i), supportColor); } if (mode == Mode::Creation) @@ -93,13 +93,13 @@ void VisToolCubicBezierPath::RefreshGeometry() const VSpline spl = path.GetSpline(i); QGraphicsLineItem *ctrlLine1 = this->getLine(static_cast(preLastPoint)); - DrawLine(ctrlLine1, QLineF(spl.GetP1().toQPointF(), spl.GetP2()), mainColor, Qt::DashLine); + DrawLine(ctrlLine1, QLineF(spl.GetP1(), spl.GetP2()), mainColor, Qt::DashLine); QGraphicsEllipseItem *p2 = this->getPoint(ctrlPoints, static_cast(preLastPoint)); DrawPoint(p2, spl.GetP2(), Qt::green); QGraphicsLineItem *ctrlLine2 = this->getLine(static_cast(lastPoint)); - DrawLine(ctrlLine2, QLineF(spl.GetP4().toQPointF(), spl.GetP3()), mainColor, Qt::DashLine); + DrawLine(ctrlLine2, QLineF(spl.GetP4(), spl.GetP3()), mainColor, Qt::DashLine); QGraphicsEllipseItem *p3 = this->getPoint(ctrlPoints, static_cast(lastPoint)); DrawPoint(p3, spl.GetP3(), Qt::green); @@ -180,8 +180,8 @@ void VisToolCubicBezierPath::Creating(const QVector &pathPoints, int po const VPointF p1 = pathPoints.last(); if (pathPoints.size() >= 4) { - QLineF p1p2(p1.toQPointF(), Visualization::scenePos); - QLineF prP3p1(pathPoints.at(size-2).toQPointF(), p1.toQPointF()); + QLineF p1p2(p1, Visualization::scenePos); + QLineF prP3p1(pathPoints.at(size-2), p1); p1p2.setAngle(prP3p1.angle()); const QPointF p2 = p1p2.p2(); @@ -197,24 +197,24 @@ void VisToolCubicBezierPath::Creating(const QVector &pathPoints, int po } else { - DrawLine(helpLine1, QLineF(p1.toQPointF(), Visualization::scenePos), mainColor, Qt::DashLine); + DrawLine(helpLine1, QLineF(p1, Visualization::scenePos), mainColor, Qt::DashLine); } break; } case 1: { const VPointF p1 = pathPoints.at(subSplPoints + pointsLeft-1); - QPointF p2 = pathPoints.at(subSplPoints + pointsLeft).toQPointF(); + QPointF p2 = pathPoints.at(subSplPoints + pointsLeft); if (subSplCount >= 1) { - QLineF p1p2(p1.toQPointF(), p2); - QLineF prP3p1(pathPoints.at(subSplPoints + pointsLeft-2).toQPointF(), p1.toQPointF()); + QLineF p1p2(p1, p2); + QLineF prP3p1(pathPoints.at(subSplPoints + pointsLeft-2), p1); p1p2.setAngle(prP3p1.angle()); p2 = p1p2.p2(); } - DrawLine(helpLine1, QLineF(p1.toQPointF(), p2), mainColor, Qt::DashLine); + DrawLine(helpLine1, QLineF(p1, p2), mainColor, Qt::DashLine); VSpline spline(p1, p2, Visualization::scenePos, VPointF(Visualization::scenePos)); DrawPath(newCurveSegment, spline.GetPath(PathDirection::Hide), mainColor, Qt::SolidLine, Qt::RoundCap); @@ -227,18 +227,18 @@ void VisToolCubicBezierPath::Creating(const QVector &pathPoints, int po case 2: { const VPointF p1 = pathPoints.at(subSplPoints + pointsLeft-2); - QPointF p2 = pathPoints.at(subSplPoints + pointsLeft-1).toQPointF(); - const QPointF p3 = pathPoints.at(subSplPoints + pointsLeft).toQPointF(); + QPointF p2 = pathPoints.at(subSplPoints + pointsLeft-1); + const QPointF p3 = pathPoints.at(subSplPoints + pointsLeft); if (subSplCount >= 1) { - QLineF p1p2(p1.toQPointF(), p2); - QLineF prP3p1(pathPoints.at(subSplPoints + pointsLeft-3).toQPointF(), p1.toQPointF()); + QLineF p1p2(p1, p2); + QLineF prP3p1(pathPoints.at(subSplPoints + pointsLeft-3), p1); p1p2.setAngle(prP3p1.angle()); p2 = p1p2.p2(); } - DrawLine(helpLine1, QLineF(p1.toQPointF(), p2), mainColor, Qt::DashLine); + DrawLine(helpLine1, QLineF(p1, p2), mainColor, Qt::DashLine); DrawLine(helpLine2, QLineF(p3, Visualization::scenePos), mainColor, Qt::DashLine); VSpline spline(p1, p2, p3, VPointF(Visualization::scenePos)); diff --git a/src/libs/vtools/visualization/path/vistoolcutsplinepath.cpp b/src/libs/vtools/visualization/path/vistoolcutsplinepath.cpp index 14bc0a3ca..b4881f0e4 100644 --- a/src/libs/vtools/visualization/path/vistoolcutsplinepath.cpp +++ b/src/libs/vtools/visualization/path/vistoolcutsplinepath.cpp @@ -66,7 +66,7 @@ void VisToolCutSplinePath::RefreshGeometry() SCASSERT(spPath1 != nullptr); SCASSERT(spPath2 != nullptr); - DrawPoint(point, p->toQPointF(), mainColor); + DrawPoint(point, *p, mainColor); delete p; DrawPath(splPath1, spPath1->GetPath(PathDirection::Show), Qt::darkGreen, Qt::SolidLine, Qt::RoundCap); diff --git a/src/libs/vtools/visualization/path/vistoolspline.cpp b/src/libs/vtools/visualization/path/vistoolspline.cpp index 58abcd50b..3c19651b7 100644 --- a/src/libs/vtools/visualization/path/vistoolspline.cpp +++ b/src/libs/vtools/visualization/path/vistoolspline.cpp @@ -77,24 +77,24 @@ void VisToolSpline::RefreshGeometry() if (object1Id > NULL_ID) { const auto first = Visualization::data->GeometricObject(object1Id); - DrawPoint(point1, first->toQPointF(), supportColor); + DrawPoint(point1, *first, supportColor); if (mode == Mode::Creation) { if (isLeftMousePressed && not p2Selected) { p2 = Visualization::scenePos; - controlPoints[0]->RefreshCtrlPoint(1, SplinePointPosition::FirstPoint, p2, first->toQPointF()); + controlPoints[0]->RefreshCtrlPoint(1, SplinePointPosition::FirstPoint, p2, *first); if (not controlPoints[0]->isVisible()) { - if (QLineF(first->toQPointF(), p2).length() > radius) + if (QLineF(*first, p2).length() > radius) { controlPoints[0]->show(); } else { - p2 = first->toQPointF(); + p2 = *first; } } } @@ -112,26 +112,26 @@ void VisToolSpline::RefreshGeometry() else { const auto second = Visualization::data->GeometricObject(object4Id); - DrawPoint(point4, second->toQPointF(), supportColor); + DrawPoint(point4, *second, supportColor); if (mode == Mode::Creation) { if (isLeftMousePressed && not p3Selected) { - QLineF ctrlLine (second->toQPointF(), Visualization::scenePos); + QLineF ctrlLine (*second, Visualization::scenePos); ctrlLine.setAngle(ctrlLine.angle()+180); p3 = ctrlLine.p2(); - controlPoints[1]->RefreshCtrlPoint(1, SplinePointPosition::LastPoint, p3, second->toQPointF()); + controlPoints[1]->RefreshCtrlPoint(1, SplinePointPosition::LastPoint, p3, *second); if (not controlPoints[1]->isVisible()) { - if (QLineF(second->toQPointF(), p3).length() > radius) + if (QLineF(*second, p3).length() > radius) { controlPoints[1]->show(); } else { - p3 = second->toQPointF(); + p3 = *second; } } } diff --git a/src/libs/vtools/visualization/path/vistoolsplinepath.cpp b/src/libs/vtools/visualization/path/vistoolsplinepath.cpp index 47e0d16fa..1842c8c1a 100644 --- a/src/libs/vtools/visualization/path/vistoolsplinepath.cpp +++ b/src/libs/vtools/visualization/path/vistoolsplinepath.cpp @@ -61,7 +61,7 @@ void VisToolSplinePath::RefreshGeometry() for (int i = 0; i < size; ++i) { QGraphicsEllipseItem *point = this->getPoint(static_cast(i)); - DrawPoint(point, pathPoints.at(i).P().toQPointF(), supportColor); + DrawPoint(point, pathPoints.at(i).P(), supportColor); } if (mode == Mode::Creation) @@ -76,13 +76,13 @@ void VisToolSplinePath::RefreshGeometry() VSpline spl = path.GetSpline(i); ctrlPoints[preLastPoint]->RefreshCtrlPoint(i, SplinePointPosition::FirstPoint, spl.GetP2(), - spl.GetP1().toQPointF()); + spl.GetP1()); ctrlPoints[lastPoint]->RefreshCtrlPoint(i, SplinePointPosition::LastPoint, spl.GetP3(), - spl.GetP4().toQPointF()); + spl.GetP4()); } } - Creating(pathPoints.at(size-1).P().toQPointF(), size); + Creating(pathPoints.at(size-1).P(), size); } if (size > 1) diff --git a/src/libs/vwidgets/vsimplepoint.cpp b/src/libs/vwidgets/vsimplepoint.cpp index bfc5b109a..bbe701572 100644 --- a/src/libs/vwidgets/vsimplepoint.cpp +++ b/src/libs/vwidgets/vsimplepoint.cpp @@ -108,7 +108,7 @@ void VSimplePoint::RefreshGeometry(const VPointF &point) QRectF rec = QRectF(0, 0, radius*2, radius*2); rec.translate(-rec.center().x(), -rec.center().y()); this->setRect(rec); - this->setPos(point.toQPointF()); + this->setPos(point); this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); namePoint->blockSignals(true); QFont font = namePoint->font(); diff --git a/src/test/ValentinaTest/tst_varc.cpp b/src/test/ValentinaTest/tst_varc.cpp index 227d94ffd..ba2fbfb4c 100644 --- a/src/test/ValentinaTest/tst_varc.cpp +++ b/src/test/ValentinaTest/tst_varc.cpp @@ -181,7 +181,7 @@ void TST_VArc::TestGetPoints() for (int i=0; i < points.size(); ++i) { - QLineF rLine(center.toQPointF(), points.at(i)); + QLineF rLine(center, points.at(i)); const qreal value = qAbs(rLine.length() - radius); const QString errorMsg = QString("Broken the first rule. All points should be on the same distance from " "the center. Error ='%1'.").arg(value); @@ -199,7 +199,7 @@ void TST_VArc::TestGetPoints() else {// sector square gSquere = (M_PI * radius * radius) / 360.0 * arc.AngleArc(); - points.append(center.toQPointF()); + points.append(center); } // calculated square diff --git a/src/test/ValentinaTest/tst_vellipticalarc.cpp b/src/test/ValentinaTest/tst_vellipticalarc.cpp index b838d2c98..023884d47 100644 --- a/src/test/ValentinaTest/tst_vellipticalarc.cpp +++ b/src/test/ValentinaTest/tst_vellipticalarc.cpp @@ -299,13 +299,13 @@ void TST_VEllipticalArc::TestGetPoints2() const qreal c = qSqrt(qAbs(radius2*radius2 - radius1*radius1)); // distance from the center to the focus - QPointF focus1 = center.toQPointF(); - QPointF focus2 = center.toQPointF(); + QPointF focus1 = center; + QPointF focus2 = center; if (radius1 < radius2) { focus1.setY(focus1.ry() + c); - QLineF line(center.toQPointF(), focus1); + QLineF line(center, focus1); line.setAngle(line.angle() + rotationAngle); focus1 = line.p2(); @@ -317,7 +317,7 @@ void TST_VEllipticalArc::TestGetPoints2() else { focus1.setX(focus1.rx() + c); - QLineF line(center.toQPointF(), focus1); + QLineF line(center, focus1); line.setAngle(line.angle() + rotationAngle); focus1 = line.p2(); @@ -328,7 +328,7 @@ void TST_VEllipticalArc::TestGetPoints2() } QPointF ellipsePoint(center.x() + radius1, center.y()); - QLineF line(center.toQPointF(), ellipsePoint); + QLineF line(center, ellipsePoint); line.setAngle(line.angle() + rotationAngle); ellipsePoint = line.p2(); diff --git a/src/test/ValentinaTest/tst_vspline.cpp b/src/test/ValentinaTest/tst_vspline.cpp index 3b4098dd1..dd78a6754 100644 --- a/src/test/ValentinaTest/tst_vspline.cpp +++ b/src/test/ValentinaTest/tst_vspline.cpp @@ -326,8 +326,8 @@ void TST_VSpline::TestLengthByPoint_data() QTest::newRow("Point on spline") << spl << p << testLength; QTest::newRow("Wrong point") << spl << QPointF(-10000, -10000) << -1.0; - QTest::newRow("First point") << spl << p1.toQPointF() << 0.0; - QTest::newRow("Last point") << spl << p4.toQPointF() << length; + QTest::newRow("First point") << spl << p1 << 0.0; + QTest::newRow("Last point") << spl << p4 << length; } //--------------------------------------------------------------------------------------------------------------------- From e9d23a7a32772d47c5003b0e457db7cdbe1cce0f Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 14 May 2016 22:54:57 +0300 Subject: [PATCH 14/41] Refactoring. Each a static method has access to each method in a class. So, we can declare a constructor in private section for each a tool class that has "Create" methods. --HG-- branch : feature --- .../tools/drawTools/operation/vtoolrotation.h | 9 ++++--- .../tools/drawTools/toolcurve/vtoolarc.h | 7 +++-- .../drawTools/toolcurve/vtoolarcwithlength.h | 9 ++++--- .../drawTools/toolcurve/vtoolcubicbezier.h | 5 ++-- .../toolcurve/vtoolcubicbezierpath.h | 5 ++-- .../tools/drawTools/toolcurve/vtoolspline.h | 5 ++-- .../drawTools/toolcurve/vtoolsplinepath.h | 6 ++--- .../tooldoublepoint/vtooltruedarts.h | 26 +++++++++---------- .../toolsinglepoint/toolcut/vtoolcutarc.h | 7 ++--- .../toolsinglepoint/toolcut/vtoolcutspline.h | 8 +++--- .../toolcut/vtoolcutsplinepath.h | 8 +++--- .../toollinepoint/vtoolalongline.h | 12 +++++---- .../toollinepoint/vtoolbisector.h | 12 +++++---- .../toollinepoint/vtoolcurveintersectaxis.h | 7 ++--- .../toollinepoint/vtoolendline.h | 12 +++++---- .../toollinepoint/vtoolheight.h | 12 +++++---- .../toollinepoint/vtoollineintersectaxis.h | 10 ++++--- .../toollinepoint/vtoolnormal.h | 11 +++++--- .../toollinepoint/vtoolshoulderpoint.h | 9 ++++--- .../toolsinglepoint/vtoolbasepoint.h | 11 +++++--- .../toolsinglepoint/vtoollineintersect.h | 9 ++++--- .../vtoolpointfromarcandtangent.h | 7 ++--- .../vtoolpointfromcircleandtangent.h | 7 ++--- .../toolsinglepoint/vtoolpointofcontact.h | 9 ++++--- .../vtoolpointofintersection.h | 8 +++--- .../vtoolpointofintersectionarcs.h | 7 ++--- .../vtoolpointofintersectioncircles.h | 11 ++++---- .../vtoolpointofintersectioncurves.h | 9 ++++--- .../toolpoint/toolsinglepoint/vtooltriangle.h | 9 ++++--- src/libs/vtools/tools/drawTools/vtoolline.h | 9 ++++--- src/libs/vtools/tools/nodeDetails/vnodearc.h | 6 ++--- .../vtools/tools/nodeDetails/vnodepoint.h | 7 +++-- .../vtools/tools/nodeDetails/vnodespline.h | 6 ++--- .../tools/nodeDetails/vnodesplinepath.h | 5 ++-- src/libs/vtools/tools/vtooldetail.h | 5 ++-- src/libs/vtools/tools/vtooluniondetails.h | 7 ++--- 36 files changed, 180 insertions(+), 132 deletions(-) diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h index 34c78b9c9..5f36ade0f 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h @@ -45,10 +45,6 @@ class VToolRotation : public VDrawTool, public QGraphicsItem { Q_OBJECT public: - VToolRotation(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 origPointId, - const QString &angle, const QString &suffix, const QVector &source, - const QVector &destination, const Source &typeCreation, - QGraphicsItem *parent = nullptr); virtual ~VToolRotation(); virtual void setDialog() Q_DECL_OVERRIDE; static VToolRotation* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, @@ -125,6 +121,11 @@ private: QMap rObjects; + VToolRotation(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 origPointId, + const QString &angle, const QString &suffix, const QVector &source, + const QVector &destination, const Source &typeCreation, + QGraphicsItem *parent = nullptr); + void UpdateNamePosition(quint32 id); static DestinationItem CreatePoint(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h index cbcd0f33c..8f03a4cb6 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h @@ -40,8 +40,6 @@ class VToolArc :public VAbstractSpline { Q_OBJECT public: - VToolArc(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolArc* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolArc* Create(const quint32 _id, const quint32 ¢er, QString &radius, QString &f1, QString &f2, @@ -73,6 +71,11 @@ protected: virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolArc) + + VToolArc(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, const Source &typeCreation, + QGraphicsItem * parent = nullptr); + virtual void RefreshGeometry() Q_DECL_OVERRIDE; }; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h index e0446548a..0a8f89847 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h @@ -37,10 +37,6 @@ class VToolArcWithLength : public VAbstractSpline { Q_OBJECT public: - VToolArcWithLength(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, - QGraphicsItem * parent = nullptr); - virtual void setDialog() Q_DECL_OVERRIDE; static VToolArcWithLength* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -74,6 +70,11 @@ protected: virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolArcWithLength) + + VToolArcWithLength(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, + const Source &typeCreation, QGraphicsItem * parent = nullptr); + virtual void RefreshGeometry() Q_DECL_OVERRIDE; }; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.h index ca8d53ed8..aac2d5dcd 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.h @@ -37,8 +37,6 @@ class VToolCubicBezier : public VAbstractSpline { Q_OBJECT public: - VToolCubicBezier(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual ~VToolCubicBezier(); virtual void setDialog() Q_DECL_OVERRIDE; static VToolCubicBezier *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, @@ -63,6 +61,9 @@ protected: private: Q_DISABLE_COPY(VToolCubicBezier) + VToolCubicBezier(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, + const Source &typeCreation, QGraphicsItem * parent = nullptr); + virtual void RefreshGeometry() Q_DECL_OVERRIDE; void SetSplineAttributes(QDomElement &domElement, const VCubicBezier &spl); }; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.h index 29089fe2b..9bb438426 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.h @@ -37,8 +37,6 @@ class VToolCubicBezierPath:public VAbstractSpline { Q_OBJECT public: - VToolCubicBezierPath(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual ~VToolCubicBezierPath(); virtual void setDialog() Q_DECL_OVERRIDE; static VToolCubicBezierPath *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, @@ -65,6 +63,9 @@ protected: private: Q_DISABLE_COPY(VToolCubicBezierPath) + VToolCubicBezierPath(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, + const Source &typeCreation, QGraphicsItem * parent = nullptr); + virtual void RefreshGeometry() Q_DECL_OVERRIDE; static void AddPathPoint(VAbstractPattern *doc, QDomElement &domElement, const VPointF &splPoint); void SetSplinePathAttributes(QDomElement &domElement, const VCubicBezierPath &path); diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.h index e404087a6..183cbdf47 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.h @@ -40,8 +40,6 @@ class VToolSpline:public VAbstractSpline { Q_OBJECT public: - VToolSpline (VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, const Source &typeCreation, - QGraphicsItem * parent = nullptr ); virtual ~VToolSpline() Q_DECL_OVERRIDE; virtual void setDialog() Q_DECL_OVERRIDE; static VToolSpline *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -80,6 +78,9 @@ private: Q_DISABLE_COPY(VToolSpline) QPointF oldPosition; + VToolSpline (VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, const Source &typeCreation, + QGraphicsItem * parent = nullptr ); + bool IsMovable() const; virtual void RefreshGeometry() Q_DECL_OVERRIDE; void SetSplineAttributes(QDomElement &domElement, const VSpline &spl); diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.h index a7035225e..bb37395f2 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.h @@ -42,9 +42,6 @@ class VToolSplinePath:public VAbstractSpline { Q_OBJECT public: - VToolSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual ~VToolSplinePath() Q_DECL_OVERRIDE; virtual void setDialog() Q_DECL_OVERRIDE; static VToolSplinePath *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, @@ -104,6 +101,9 @@ private: QPointF oldPosition; int splIndex; + VToolSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, + const Source &typeCreation, QGraphicsItem * parent = nullptr); + bool IsMovable(int index) const; virtual void RefreshGeometry() Q_DECL_OVERRIDE; static void AddPathPoint(VAbstractPattern *doc, QDomElement &domElement, const VSplinePoint &splPoint); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.h b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.h index 4aa074f6d..4832d1a19 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.h @@ -35,19 +35,6 @@ class VToolTrueDarts : public VToolDoublePoint { Q_OBJECT public: - VToolTrueDarts(VAbstractPattern *doc, - VContainer *data, - const quint32 &id, - const quint32 &p1id, - const quint32 &p2id, - const quint32 &baseLineP1Id, - const quint32 &baseLineP2Id, - const quint32 &dartP1Id, - const quint32 &dartP2Id, - const quint32 &dartP3Id, - const Source &typeCreation, - QGraphicsItem * parent = nullptr); - static void FindPoint(const QPointF &baseLineP1, const QPointF &baseLineP2, const QPointF &dartP1, const QPointF &dartP2, const QPointF &dartP3, QPointF &p1, QPointF &p2); virtual void setDialog() Q_DECL_OVERRIDE; @@ -100,6 +87,19 @@ private: quint32 dartP1Id; quint32 dartP2Id; quint32 dartP3Id; + + VToolTrueDarts(VAbstractPattern *doc, + VContainer *data, + const quint32 &id, + const quint32 &p1id, + const quint32 &p2id, + const quint32 &baseLineP1Id, + const quint32 &baseLineP2Id, + const quint32 &dartP1Id, + const quint32 &dartP2Id, + const quint32 &dartP3Id, + const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLTRUEDARTS_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.h index 94d6944c5..fbed4e8fa 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.h @@ -38,9 +38,6 @@ class VToolCutArc : public VToolCut { Q_OBJECT public: - VToolCutArc(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &arcId, const QString &color, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolCutArc* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolCutArc* Create(const quint32 _id, const QString &pointName, QString &formula, const quint32 &arcId, @@ -59,6 +56,10 @@ protected: virtual void SetVisualization() Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(VToolCutArc) + + VToolCutArc(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, + const quint32 &arcId, const QString &color, const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLCUTARC_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.h index 84e0fc3bd..dd49e5667 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.h @@ -38,10 +38,6 @@ class VToolCutSpline : public VToolCut { Q_OBJECT public: - - VToolCutSpline(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &splineId, const QString &color, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolCutSpline *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -63,6 +59,10 @@ protected: virtual void SetVisualization() Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(VToolCutSpline) + + VToolCutSpline(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, + const quint32 &splineId, const QString &color, const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLCUTSPLINE_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.h index a0517d69c..09b4a1459 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.h @@ -42,10 +42,6 @@ class VToolCutSplinePath : public VToolCut { Q_OBJECT public: - - VToolCutSplinePath(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &splinePathId, const QString &color, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolCutSplinePath *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -71,6 +67,10 @@ protected: virtual void SetVisualization() Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(VToolCutSplinePath) + + VToolCutSplinePath(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, + const quint32 &splinePathId, const QString &color, const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLCUTSPLINEPATH_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.h index 97562c96c..826634b70 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.h @@ -38,11 +38,6 @@ class VToolAlongLine : public VToolLinePoint { Q_OBJECT public: - - VToolAlongLine(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &formula, - const quint32 &firstPointId, - const quint32 &secondPointId, const QString &typeLine, const QString &lineColor, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolAlongLine* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -69,8 +64,15 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolAlongLine) + /** @brief secondPointId id second point of line. */ quint32 secondPointId; + + VToolAlongLine(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &formula, + const quint32 &firstPointId, + const quint32 &secondPointId, const QString &typeLine, const QString &lineColor, + const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLALONGLINE_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.h index f95e92156..deab4d68f 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.h @@ -38,11 +38,6 @@ class VToolBisector : public VToolLinePoint { Q_OBJECT public: - - VToolBisector(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, - const QString &lineColor, - const QString &formula, const quint32 &firstPointId, const quint32 &secondPointId, - const quint32 &thirdPointId, const Source &typeCreation, QGraphicsItem * parent = nullptr); static qreal BisectorAngle(const QPointF &firstPoint, const QPointF &secondPoint, const QPointF &thirdPoint); static QPointF FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, const QPointF &thirdPoint, const qreal& length); @@ -76,11 +71,18 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolBisector) + /** @brief firstPointId id first point of angle. */ quint32 firstPointId; /** @brief thirdPointId id third point of angle. */ quint32 thirdPointId; + + VToolBisector(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, + const QString &lineColor, + const QString &formula, const quint32 &firstPointId, const quint32 &secondPointId, + const quint32 &thirdPointId, const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLBISECTOR_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h index 3821b9756..f83b41572 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h @@ -35,9 +35,6 @@ class VToolCurveIntersectAxis : public VToolLinePoint { Q_OBJECT public: - VToolCurveIntersectAxis(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, - const QString &lineColor, const QString &formulaAngle, const quint32 &basePointId, - const quint32 &curveId, const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual ~VToolCurveIntersectAxis() Q_DECL_OVERRIDE; virtual void setDialog() Q_DECL_OVERRIDE; @@ -73,6 +70,10 @@ private: QString formulaAngle; quint32 curveId; + VToolCurveIntersectAxis(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, + const QString &lineColor, const QString &formulaAngle, const quint32 &basePointId, + const quint32 &curveId, const Source &typeCreation, QGraphicsItem * parent = nullptr); + static void InitSegments(const GOType &curveType, qreal segLength, const VPointF *p, quint32 curveId, VContainer *data); }; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.h index 8242a86f9..052321933 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.h @@ -38,11 +38,6 @@ class VToolEndLine : public VToolLinePoint { Q_OBJECT public: - - VToolEndLine(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, - const QString &lineColor, - const QString &formulaLength, const QString &formulaAngle, const quint32 &basePointId, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual ~VToolEndLine() Q_DECL_OVERRIDE; virtual void setDialog() Q_DECL_OVERRIDE; static VToolEndLine *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, @@ -67,7 +62,14 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolEndLine) + QString formulaAngle; + + VToolEndLine(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, + const QString &lineColor, + const QString &formulaLength, const QString &formulaAngle, const quint32 &basePointId, + const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLENDLINE_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.h index 19b426fc3..d04faa996 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.h @@ -38,11 +38,6 @@ class VToolHeight: public VToolLinePoint { Q_OBJECT public: - - VToolHeight(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, - const QString &lineColor, - const quint32 &basePointId, const quint32 &p1LineId, const quint32 &p2LineId, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolHeight *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolHeight *Create(const quint32 _id, const QString &pointName, const QString &typeLine, @@ -69,11 +64,18 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolHeight) + /** @brief p1LineId id first point of line. */ quint32 p1LineId; /** @brief p2LineId id second point of line. */ quint32 p2LineId; + + VToolHeight(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, + const QString &lineColor, + const quint32 &basePointId, const quint32 &p1LineId, const quint32 &p2LineId, + const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLHEIGHT_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.h index 9a157d1b8..40e42d35a 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.h @@ -35,10 +35,6 @@ class VToolLineIntersectAxis : public VToolLinePoint { Q_OBJECT public: - VToolLineIntersectAxis(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, - const QString &lineColor, const QString &formulaAngle, const quint32 &basePointId, - const quint32 &firstPointId, const quint32 &secondPointId, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual ~VToolLineIntersectAxis() Q_DECL_OVERRIDE; virtual void setDialog() Q_DECL_OVERRIDE; @@ -75,9 +71,15 @@ protected: virtual void SetVisualization() Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(VToolLineIntersectAxis) + QString formulaAngle; quint32 firstPointId; quint32 secondPointId; + + VToolLineIntersectAxis(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, + const QString &lineColor, const QString &formulaAngle, const quint32 &basePointId, + const quint32 &firstPointId, const quint32 &secondPointId, const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLLINEINTERSECTAXIS_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.h index 9685b5c7d..cc188c977 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.h @@ -38,10 +38,6 @@ class VToolNormal : public VToolLinePoint { Q_OBJECT public: - VToolNormal(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, - const QString &lineColor, - const QString &formula, const qreal &angle, const quint32 &firstPointId, const quint32 &secondPointId, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolNormal* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolNormal* Create(const quint32 _id, QString &formula, const quint32 &firstPointId, @@ -70,8 +66,15 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolNormal) + /** @brief secondPointId id second line point. */ quint32 secondPointId; + + VToolNormal(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, + const QString &lineColor, + const QString &formula, const qreal &angle, const quint32 &firstPointId, const quint32 &secondPointId, + const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLNORMAL_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.h index 71bcf6d7a..ad2095cfc 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.h @@ -39,9 +39,6 @@ class VToolShoulderPoint : public VToolLinePoint { Q_OBJECT public: - VToolShoulderPoint(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, - const QString &lineColor, const QString &formula, const quint32 &p1Line, const quint32 &p2Line, - const quint32 &pShoulder, const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static QPointF FindPoint(const QPointF &p1Line, const QPointF &p2Line, const QPointF &pShoulder, const qreal &length); @@ -74,11 +71,17 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolShoulderPoint) + /** @brief p2Line id second line point. */ quint32 p2Line; /** @brief pShoulder id shoulder line point. */ quint32 pShoulder; + + VToolShoulderPoint(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, + const QString &lineColor, const QString &formula, const quint32 &p1Line, const quint32 &p2Line, + const quint32 &pShoulder, const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLSHOULDERPOINT_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.h index 5c6b57f60..326778fcc 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.h @@ -39,8 +39,6 @@ class VToolBasePoint : public VToolSinglePoint { Q_OBJECT public: - VToolBasePoint (VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, - const QString &namePP, QGraphicsItem * parent = nullptr ); virtual ~VToolBasePoint() Q_DECL_OVERRIDE; virtual void setDialog() Q_DECL_OVERRIDE; static VToolBasePoint *Create(quint32 _id, const QString &nameActivPP, VPointF *point, @@ -74,9 +72,14 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE {} private: - QString namePP; - void SetColorLabel(const Qt::GlobalColor & color); + Q_DISABLE_COPY(VToolBasePoint) + QString namePP; + + VToolBasePoint (VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, + const QString &namePP, QGraphicsItem * parent = nullptr ); + + void SetColorLabel(const Qt::GlobalColor & color); }; #endif // VTOOLBASEPOINT_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.h index f6e16c862..3e441a7c6 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.h @@ -38,9 +38,6 @@ class VToolLineIntersect:public VToolSinglePoint { Q_OBJECT public: - VToolLineIntersect(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &p1Line1, - const quint32 &p2Line1, const quint32 &p1Line2, const quint32 &p2Line2, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolLineIntersect *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -76,6 +73,8 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolLineIntersect) + /** @brief p1Line1 id first point first line. */ quint32 p1Line1; @@ -87,6 +86,10 @@ private: /** @brief p2Line2 id second point second line.*/ quint32 p2Line2; + + VToolLineIntersect(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &p1Line1, + const quint32 &p2Line1, const quint32 &p1Line2, const quint32 &p2Line2, + const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLLINEINTERSECT_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h index f128d7edc..43555895e 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h @@ -35,9 +35,6 @@ class VToolPointFromArcAndTangent : public VToolSinglePoint { Q_OBJECT public: - VToolPointFromArcAndTangent(VAbstractPattern *doc, VContainer *data, const quint32 &id, quint32 arcId, - quint32 tangentPointId, CrossCirclesPoint crossPoint, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolPointFromArcAndTangent *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -73,6 +70,10 @@ private: quint32 arcId; quint32 tangentPointId; CrossCirclesPoint crossPoint; + + VToolPointFromArcAndTangent(VAbstractPattern *doc, VContainer *data, const quint32 &id, quint32 arcId, + quint32 tangentPointId, CrossCirclesPoint crossPoint, const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLPOINTFROMARCANDTANGENT_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.h index 7b4bf670b..e5902f163 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.h @@ -37,9 +37,6 @@ class VToolPointFromCircleAndTangent : public VToolSinglePoint { Q_OBJECT public: - VToolPointFromCircleAndTangent(VAbstractPattern *doc, VContainer *data, const quint32 &id, quint32 circleCenterId, - const QString &circleRadius, quint32 tangentPointId, CrossCirclesPoint crossPoint, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolPointFromCircleAndTangent *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -80,6 +77,10 @@ private: quint32 tangentPointId; QString circleRadius; CrossCirclesPoint crossPoint; + + VToolPointFromCircleAndTangent(VAbstractPattern *doc, VContainer *data, const quint32 &id, quint32 circleCenterId, + const QString &circleRadius, quint32 tangentPointId, CrossCirclesPoint crossPoint, + const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLPOINTFROMCIRCLEANDTANGENT_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.h index 81f879a32..85655c32d 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.h @@ -40,9 +40,6 @@ class VToolPointOfContact : public VToolSinglePoint { Q_OBJECT public: - VToolPointOfContact(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &arcRadius, - const quint32 ¢er, const quint32 &firstPointId, const quint32 &secondPointId, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static QPointF FindPoint(const qreal &arcRadius, const QPointF ¢er, const QPointF &firstPoint, const QPointF &secondPoint); @@ -81,6 +78,8 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolPointOfContact) + /** @brief radius string with formula radius arc. */ QString arcRadius; @@ -92,6 +91,10 @@ private: /** @brief secondPointId id second line point. */ quint32 secondPointId; + + VToolPointOfContact(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &arcRadius, + const quint32 ¢er, const quint32 &firstPointId, const quint32 &secondPointId, + const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLPOINTOFCONTACT_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersection.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersection.h index 1e956da3b..29af360df 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersection.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersection.h @@ -38,9 +38,6 @@ class VToolPointOfIntersection : public VToolSinglePoint { Q_OBJECT public: - VToolPointOfIntersection(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &firstPointId, - const quint32 &secondPointId, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolPointOfIntersection *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -68,11 +65,16 @@ protected: virtual void SetVisualization() Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(VToolPointOfIntersection) + /** @brief firstPointId id first line point. */ quint32 firstPointId; /** @brief secondPointId id second line point. */ quint32 secondPointId; + + VToolPointOfIntersection(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &firstPointId, + const quint32 &secondPointId, const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLPOINTOFINTERSECTION_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.h index 11e5b70b6..46cd4d39e 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.h @@ -38,9 +38,6 @@ class VToolPointOfIntersectionArcs : public VToolSinglePoint Q_OBJECT public: - VToolPointOfIntersectionArcs(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &firstArcId, - const quint32 &secondArcId, CrossCirclesPoint crossPoint, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolPointOfIntersectionArcs *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -81,6 +78,10 @@ private: quint32 secondArcId; CrossCirclesPoint crossPoint; + + VToolPointOfIntersectionArcs(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &firstArcId, + const quint32 &secondArcId, CrossCirclesPoint crossPoint, const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLPOINTOFINTERSECTIONARCS_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.h index 4bee4764f..cacccfd20 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.h @@ -37,11 +37,6 @@ class VToolPointOfIntersectionCircles : public VToolSinglePoint { Q_OBJECT public: - VToolPointOfIntersectionCircles(VAbstractPattern *doc, VContainer *data, const quint32 &id, const - quint32 firstCircleCenterId, quint32 secondCircleCenterId, - const QString &firstCircleRadius, const QString &secondCircleRadius, - CrossCirclesPoint crossPoint, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolPointOfIntersectionCircles *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, @@ -92,6 +87,12 @@ private: QString secondCircleRadius; CrossCirclesPoint crossPoint; + + VToolPointOfIntersectionCircles(VAbstractPattern *doc, VContainer *data, const quint32 &id, const + quint32 firstCircleCenterId, quint32 secondCircleCenterId, + const QString &firstCircleRadius, const QString &secondCircleRadius, + CrossCirclesPoint crossPoint, const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLPOINTOFINTERSECTIONCIRCLES_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h index 891ba17a6..acea09333 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h @@ -35,10 +35,6 @@ class VToolPointOfIntersectionCurves : public VToolSinglePoint { Q_OBJECT public: - explicit VToolPointOfIntersectionCurves(VAbstractPattern *doc, VContainer *data, const quint32 &id, const - quint32 firstCurveId, quint32 secondCurveId, - VCrossCurvesPoint vCrossPoint, HCrossCurvesPoint hCrossPoint, - const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolPointOfIntersectionCurves *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -82,6 +78,11 @@ private: VCrossCurvesPoint vCrossPoint; HCrossCurvesPoint hCrossPoint; + + explicit VToolPointOfIntersectionCurves(VAbstractPattern *doc, VContainer *data, const quint32 &id, const + quint32 firstCurveId, quint32 secondCurveId, + VCrossCurvesPoint vCrossPoint, HCrossCurvesPoint hCrossPoint, + const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLPOINTOFINTERSECTIONCURVES_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.h index c9950b81b..e26024d67 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.h @@ -39,10 +39,6 @@ class VToolTriangle : public VToolSinglePoint { Q_OBJECT public: - VToolTriangle(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &axisP1Id, - const quint32 &axisP2Id, - const quint32 &firstPointId, const quint32 &secondPointId, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolTriangle *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); @@ -89,6 +85,11 @@ private: /** @brief secondPointId id second triangle point, what lies on the hypotenuse. */ quint32 secondPointId; + + VToolTriangle(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &axisP1Id, + const quint32 &axisP2Id, + const quint32 &firstPointId, const quint32 &secondPointId, const Source &typeCreation, + QGraphicsItem * parent = nullptr); }; #endif // VTOOLTRIANGLE_H diff --git a/src/libs/vtools/tools/drawTools/vtoolline.h b/src/libs/vtools/tools/drawTools/vtoolline.h index a554c4248..99dea64d4 100644 --- a/src/libs/vtools/tools/drawTools/vtoolline.h +++ b/src/libs/vtools/tools/drawTools/vtoolline.h @@ -39,9 +39,6 @@ class VToolLine: public VDrawTool, public QGraphicsLineItem { Q_OBJECT public: - VToolLine(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 firstPoint, quint32 secondPoint, - const QString &typeLine, const QString &lineColor, const Source &typeCreation, - QGraphicsItem * parent = nullptr); virtual void setDialog() Q_DECL_OVERRIDE; static VToolLine *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolLine *Create(const quint32 &_id, const quint32 &firstPoint, const quint32 &secondPoint, @@ -85,12 +82,18 @@ protected: virtual void ReadToolAttributes(const QDomElement &domElement) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE; private: + Q_DISABLE_COPY(VToolLine) + /** @brief firstPoint id first line point. */ quint32 firstPoint; /** @brief secondPoint id second line point. */ quint32 secondPoint; + VToolLine(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 firstPoint, quint32 secondPoint, + const QString &typeLine, const QString &lineColor, const Source &typeCreation, + QGraphicsItem * parent = nullptr); + void RefreshGeometry(); }; diff --git a/src/libs/vtools/tools/nodeDetails/vnodearc.h b/src/libs/vtools/tools/nodeDetails/vnodearc.h index 55d064e3f..5f5b82f9a 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodearc.h +++ b/src/libs/vtools/tools/nodeDetails/vnodearc.h @@ -39,9 +39,6 @@ class VNodeArc :public VAbstractNode { Q_OBJECT public: - VNodeArc(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idArc, const Source &typeCreation, - const quint32 &idTool = 0, QObject *qoParent = nullptr); - static void Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idArc, const Document &parse, const Source &typeCreation, const quint32 &idTool = 0); static const QString TagName; @@ -58,6 +55,9 @@ protected: virtual void HideNode() Q_DECL_OVERRIDE {} private: Q_DISABLE_COPY(VNodeArc) + + VNodeArc(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idArc, const Source &typeCreation, + const quint32 &idTool = 0, QObject *qoParent = nullptr); }; #endif // VNODEARC_H4 diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.h b/src/libs/vtools/tools/nodeDetails/vnodepoint.h index 246b249f2..0cb79c618 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.h +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.h @@ -44,10 +44,6 @@ class VNodePoint: public VAbstractNode, public QGraphicsEllipseItem { Q_OBJECT public: - - VNodePoint(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idPoint, const Source &typeCreation, - const quint32 &idTool = 0, QObject *qoParent = nullptr, QGraphicsItem * parent = nullptr ); - static void Create(VAbstractPattern *doc, VContainer *data, VMainGraphicsScene *scene, quint32 id, quint32 idPoint, const Document &parse, const Source &typeCreation, const quint32 &idTool = 0); @@ -91,6 +87,9 @@ protected: virtual void HideNode() Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(VNodePoint) + + VNodePoint(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idPoint, const Source &typeCreation, + const quint32 &idTool = 0, QObject *qoParent = nullptr, QGraphicsItem * parent = nullptr ); }; #endif // VNODEPOINT_H diff --git a/src/libs/vtools/tools/nodeDetails/vnodespline.h b/src/libs/vtools/tools/nodeDetails/vnodespline.h index 2339cffec..1e77447f0 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodespline.h +++ b/src/libs/vtools/tools/nodeDetails/vnodespline.h @@ -39,9 +39,6 @@ class VNodeSpline:public VAbstractNode { Q_OBJECT public: - VNodeSpline(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Source &typeCreation, - const quint32 &idTool = 0, QObject *qoParent = nullptr); - static VNodeSpline *Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Document &parse, const Source &typeCreation, const quint32 &idTool = 0); @@ -59,6 +56,9 @@ protected: virtual void HideNode() Q_DECL_OVERRIDE {} private: Q_DISABLE_COPY(VNodeSpline) + + VNodeSpline(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Source &typeCreation, + const quint32 &idTool = 0, QObject *qoParent = nullptr); }; #endif // VNODESPLINE_H diff --git a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h index 35e188f48..acb11f213 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h +++ b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h @@ -39,8 +39,6 @@ class VNodeSplinePath : public VAbstractNode { Q_OBJECT public: - VNodeSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Source &typeCreation, - const quint32 &idTool = 0, QObject *qoParent = nullptr); static void Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Document &parse, const Source &typeCreation, const quint32 &idTool = 0); @@ -58,6 +56,9 @@ protected: virtual void HideNode() Q_DECL_OVERRIDE {} private: Q_DISABLE_COPY(VNodeSplinePath) + + VNodeSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Source &typeCreation, + const quint32 &idTool = 0, QObject *qoParent = nullptr); }; #endif // VNODESPLINEPATH_H diff --git a/src/libs/vtools/tools/vtooldetail.h b/src/libs/vtools/tools/vtooldetail.h index c93769c1e..1b507b562 100644 --- a/src/libs/vtools/tools/vtooldetail.h +++ b/src/libs/vtools/tools/vtooldetail.h @@ -42,8 +42,6 @@ class VToolDetail: public VAbstractTool, public VNoBrushScalePathItem { Q_OBJECT public: - VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32 &id, const Source &typeCreation, - VMainGraphicsScene *scene, const QString &drawName, QGraphicsItem * parent = nullptr); ~VToolDetail(); virtual void setDialog(); @@ -116,6 +114,9 @@ private: VNoBrushScalePathItem *seamAllowance; + VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32 &id, const Source &typeCreation, + VMainGraphicsScene *scene, const QString &drawName, QGraphicsItem * parent = nullptr); + void RefreshGeometry (); template /** diff --git a/src/libs/vtools/tools/vtooluniondetails.h b/src/libs/vtools/tools/vtooluniondetails.h index af18419ac..63a7c3698 100644 --- a/src/libs/vtools/tools/vtooluniondetails.h +++ b/src/libs/vtools/tools/vtooluniondetails.h @@ -42,9 +42,6 @@ class VToolUnionDetails : public VAbstractTool { Q_OBJECT public: - VToolUnionDetails(VAbstractPattern *doc, VContainer *data, const quint32 &id, const VDetail &d1, const VDetail &d2, - const quint32 &indexD1, const quint32 &indexD2, const Source &typeCreation, - const QString &drawName, QObject *parent = nullptr); /** * @brief setDialog set dialog when user want change tool option. */ @@ -112,6 +109,10 @@ private: QString drawName; + VToolUnionDetails(VAbstractPattern *doc, VContainer *data, const quint32 &id, const VDetail &d1, const VDetail &d2, + const quint32 &indexD1, const quint32 &indexD2, const Source &typeCreation, + const QString &drawName, QObject *parent = nullptr); + void AddDetail(QDomElement &domElement, VDetail &d); void AddNode(QDomElement &domElement, const VNodeDetail &node); QDomNode UpdateDetail(const QDomNode &domNode, const VDetail &d); From 02eb12ba3eaa9fd476ed1c27c1e3d13f7d4aecc3 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 14 May 2016 22:58:00 +0300 Subject: [PATCH 15/41] Fix warning "Class implements the interface QGraphicsItem but does not list it in Q_INTERFACES. qobject_cast to QGraphicsItem will not work!" --HG-- branch : feature --- src/libs/vtools/tools/drawTools/operation/vtoolrotation.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h index 5f36ade0f..823aae5df 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h @@ -44,6 +44,9 @@ class VSimpleCurve; class VToolRotation : public VDrawTool, public QGraphicsItem { Q_OBJECT + // Fix warning "Class implements the interface QGraphicsItem but does not list it + // in Q_INTERFACES. qobject_cast to QGraphicsItem will not work!" + Q_INTERFACES(QGraphicsItem) public: virtual ~VToolRotation(); virtual void setDialog() Q_DECL_OVERRIDE; From 7dbba359197b333e47293b6bec343302609307a6 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 16 May 2016 20:27:51 +0300 Subject: [PATCH 16/41] Parse the tool in a file. --HG-- branch : feature --- src/app/valentina/xml/vpattern.cpp | 72 ++++++++++++++++++- src/app/valentina/xml/vpattern.h | 4 ++ src/libs/ifc/schema/pattern/v0.3.1.xsd | 1 + src/libs/ifc/xml/vabstractpattern.cpp | 1 + src/libs/ifc/xml/vabstractpattern.h | 1 + .../drawTools/operation/vtoolrotation.cpp | 54 ++++++++++++-- .../tools/drawTools/operation/vtoolrotation.h | 7 +- src/libs/vtools/tools/vtooldetail.cpp | 1 - src/libs/vtools/tools/vtooldetail.h | 1 - src/libs/vtools/tools/vtooluniondetails.cpp | 2 +- 10 files changed, 131 insertions(+), 13 deletions(-) diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index 74660b9b0..23e55eb8d 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -527,7 +527,7 @@ void VPattern::ParseDrawMode(const QDomNode &node, const Document &parse, const { scene = sceneDetail; } - QStringList tags = QStringList() << TagPoint << TagLine << TagSpline << TagArc << TagTools; + const QStringList tags = QStringList() << TagPoint << TagLine << TagSpline << TagArc << TagTools << TagOperation; const QDomNodeList nodeList = node.childNodes(); const qint32 num = nodeList.size(); for (qint32 i = 0; i < num; ++i) @@ -557,6 +557,10 @@ void VPattern::ParseDrawMode(const QDomNode &node, const Document &parse, const qCDebug(vXML, "Tag tools."); ParseToolsElement(scene, domElement, parse, domElement.attribute(AttrType, "")); break; + case 5: // TagOperation + qCDebug(vXML, "Tag operation."); + ParseOperationElement(scene, domElement, parse, domElement.attribute(AttrType, "")); + break; default: VException e(tr("Wrong tag name '%1'.").arg(domElement.tagName())); throw e; @@ -596,7 +600,7 @@ void VPattern::ParseDetailElement(const QDomElement &domElement, const Document { if (element.tagName() == VToolDetail::TagNode) { - const quint32 id = GetParametrUInt(element, VToolDetail::AttrIdObject, NULL_ID_STR); + const quint32 id = GetParametrUInt(element, AttrIdObject, NULL_ID_STR); const qreal mx = qApp->toPixel(GetParametrDouble(element, AttrMx, "0.0")); const qreal my = qApp->toPixel(GetParametrDouble(element, AttrMy, "0.0")); const bool reverse = GetParametrUInt(element, VToolDetail::AttrReverse, "0"); @@ -2400,6 +2404,49 @@ void VPattern::ParseToolArcWithLength(VMainGraphicsScene *scene, QDomElement &do } } +//--------------------------------------------------------------------------------------------------------------------- +void VPattern::ParseToolRotation(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse) +{ + SCASSERT(scene != nullptr); + Q_ASSERT_X(domElement.isNull() == false, Q_FUNC_INFO, "domElement is null"); + + try + { + quint32 id = NULL_ID; + + ToolsCommonAttributes(domElement, id); + const quint32 center = GetParametrUInt(domElement, AttrCenter, NULL_ID_STR); + const QString angle = GetParametrString(domElement, AttrAngle, "10"); + QString a = angle;//need for saving fixed formula; + const QString suffix = GetParametrString(domElement, AttrSuffix, ""); + + QVector source; + QVector destination; + VToolRotation::ExtractData(this, domElement, source, destination); + + VToolRotation::Create(id, center, a, suffix, source, destination, scene, this, data, parse, Source::FromFile); + //Rewrite attribute formula. Need for situation when we have wrong formula. + if (a != angle) + { + SetAttribute(domElement, AttrAngle, a); + modified = true; + haveLiteChange(); + } + } + catch (const VExceptionBadId &e) + { + VExceptionObjectError excep(tr("Error creating or updating operation of rotation"), domElement); + excep.AddMoreInformation(e.ErrorMessage()); + throw excep; + } + catch (qmu::QmuParserError &e) + { + VExceptionObjectError excep(tr("Error creating or updating operation of rotation"), domElement); + excep.AddMoreInformation(QString("Message: " + e.GetMsg() + "\n"+ "Expression: " + e.GetExpr())); + throw excep; + } +} + //--------------------------------------------------------------------------------------------------------------------- qreal VPattern::EvalFormula(VContainer *data, const QString &formula, bool *ok) const { @@ -2643,6 +2690,27 @@ void VPattern::ParseToolsElement(VMainGraphicsScene *scene, const QDomElement &d } } +//--------------------------------------------------------------------------------------------------------------------- +void VPattern::ParseOperationElement(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse, + const QString &type) +{ + SCASSERT(scene != nullptr); + Q_ASSERT_X(not domElement.isNull(), Q_FUNC_INFO, "domElement is null"); + Q_ASSERT_X(not type.isEmpty(), Q_FUNC_INFO, "type of operation is empty"); + + const QStringList opers = QStringList() << VToolRotation::ToolType; /*0*/ + + switch (opers.indexOf(type)) + { + case 0: //VToolRotation::ToolType + ParseToolRotation(scene, domElement, parse); + break; + default: + VException e(tr("Unknown operation type '%1'.").arg(type)); + throw e; + } +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief ParseIncrementsElement parse increments tag. diff --git a/src/app/valentina/xml/vpattern.h b/src/app/valentina/xml/vpattern.h index a08c7b362..604da69ff 100644 --- a/src/app/valentina/xml/vpattern.h +++ b/src/app/valentina/xml/vpattern.h @@ -125,6 +125,8 @@ private: const Document &parse, const QString& type); void ParseToolsElement(VMainGraphicsScene *scene, const QDomElement& domElement, const Document &parse, const QString& type); + void ParseOperationElement(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse, + const QString& type); void ParseIncrementsElement(const QDomNode& node); void PrepareForParse(const Document &parse); void ToolsCommonAttributes(const QDomElement &domElement, quint32 &id); @@ -185,6 +187,8 @@ private: void ParseNodeArc(const QDomElement &domElement, const Document &parse); void ParseToolArcWithLength(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse); + void ParseToolRotation(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse); + qreal EvalFormula(VContainer *data, const QString &formula, bool *ok) const; QDomElement MakeEmptyIncrement(const QString &name); diff --git a/src/libs/ifc/schema/pattern/v0.3.1.xsd b/src/libs/ifc/schema/pattern/v0.3.1.xsd index 17a0d72f1..d5af28adf 100644 --- a/src/libs/ifc/schema/pattern/v0.3.1.xsd +++ b/src/libs/ifc/schema/pattern/v0.3.1.xsd @@ -201,6 +201,7 @@ + diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index ca528a4ab..4b495c1e4 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -54,6 +54,7 @@ const QString VAbstractPattern::TagLine = QStringLiteral("line"); const QString VAbstractPattern::TagSpline = QStringLiteral("spline"); const QString VAbstractPattern::TagArc = QStringLiteral("arc"); const QString VAbstractPattern::TagTools = QStringLiteral("tools"); +const QString VAbstractPattern::TagOperation = QStringLiteral("operation"); const QString VAbstractPattern::TagGradation = QStringLiteral("gradation"); const QString VAbstractPattern::TagHeights = QStringLiteral("heights"); const QString VAbstractPattern::TagSizes = QStringLiteral("sizes"); diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index e50e98cd5..8bc3444fc 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -148,6 +148,7 @@ public: static const QString TagSpline; static const QString TagArc; static const QString TagTools; + static const QString TagOperation; static const QString TagGradation; static const QString TagHeights; static const QString TagSizes; diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 5095a80cf..c4858e135 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -40,7 +40,7 @@ #include "../vwidgets/vsimplecurve.h" #include "../../../undocommands/label/rotationmovelabel.h" -const QString VToolRotation::TagName = QStringLiteral("operation"); +const QString VToolRotation::ToolType = QStringLiteral("rotation"); const QString VToolRotation::TagItem = QStringLiteral("item"); const QString VToolRotation::TagSource = QStringLiteral("source"); const QString VToolRotation::TagDestination = QStringLiteral("destination"); @@ -308,13 +308,56 @@ VToolRotation *VToolRotation::Create(const quint32 _id, const quint32 &origin, Q } //--------------------------------------------------------------------------------------------------------------------- -QString VToolRotation::getTagName() const +void VToolRotation::ExtractData(VAbstractPattern *doc, const QDomElement &domElement, QVector &source, + QVector &destination) { - return VToolRotation::TagName; + SCASSERT(doc != nullptr) + const QDomNodeList nodeList = domElement.childNodes(); + for (qint32 i = 0; i < nodeList.size(); ++i) + { + const QDomElement dataElement = nodeList.at(i).toElement(); + if (not dataElement.isNull() && dataElement.tagName() == TagSource) + { + source.clear(); + const QDomNodeList srcList = dataElement.childNodes(); + for (qint32 j = 0; j < srcList.size(); ++j) + { + const QDomElement element = srcList.at(j).toElement(); + if (not element.isNull()) + { + source.append(doc->GetParametrUInt(element, AttrIdObject, NULL_ID_STR)); + } + } + } + + if (not dataElement.isNull() && dataElement.tagName() == TagDestination) + { + destination.clear(); + const QDomNodeList srcList = dataElement.childNodes(); + for (qint32 j = 0; j < srcList.size(); ++j) + { + const QDomElement element = srcList.at(j).toElement(); + if (not element.isNull()) + { + DestinationItem d; + d.id = doc->GetParametrUInt(element, AttrIdObject, NULL_ID_STR); + d.mx = qApp->toPixel(doc->GetParametrDouble(element, AttrMx, "0.0")); + d.my = qApp->toPixel(doc->GetParametrDouble(element, AttrMy, "0.0")); + destination.append(d); + } + } + } + } } //--------------------------------------------------------------------------------------------------------------------- -void VToolRotation::setEnabled(bool enabled) +QString VToolRotation::getTagName() const +{ + return VAbstractPattern::TagOperation; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::SetEnabled(bool enabled) { this->setEnabled(enabled); } @@ -585,7 +628,7 @@ void VToolRotation::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt void VToolRotation::Disable(bool disable, const QString &namePP) { enabled = !CorrectDisable(disable, namePP); - setEnabled(enabled); + SetEnabled(enabled); QMapIterator i(rObjects); while (i.hasNext()) @@ -661,6 +704,7 @@ void VToolRotation::SaveOptions(QDomElement &tag, QSharedPointer &obj) { VDrawTool::SaveOptions(tag, obj); + doc->SetAttribute(tag, AttrType, ToolType); doc->SetAttribute(tag, AttrCenter, QString().setNum(origPointId)); doc->SetAttribute(tag, AttrAngle, angle); doc->SetAttribute(tag, AttrSuffix, suffix); diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h index 823aae5df..1bbd57034 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h @@ -56,8 +56,9 @@ public: const QVector &source, const QVector &destination, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation); - // cppcheck-suppress duplInheritedMember - static const QString TagName; + static void ExtractData(VAbstractPattern *doc, const QDomElement &domElement, QVector &source, + QVector &destination); + static const QString ToolType; static const QString TagItem; static const QString TagSource; static const QString TagDestination; @@ -65,7 +66,7 @@ public: enum { Type = UserType + static_cast(Tool::Rotation)}; virtual QString getTagName() const Q_DECL_OVERRIDE; - void setEnabled(bool enabled); + void SetEnabled(bool enabled); QString Suffix() const; diff --git a/src/libs/vtools/tools/vtooldetail.cpp b/src/libs/vtools/tools/vtooldetail.cpp index 25cdede3c..b94a046c2 100644 --- a/src/libs/vtools/tools/vtooldetail.cpp +++ b/src/libs/vtools/tools/vtooldetail.cpp @@ -54,7 +54,6 @@ const QString VToolDetail::TagNode = QStringLiteral("node"); const QString VToolDetail::AttrSupplement = QStringLiteral("supplement"); const QString VToolDetail::AttrClosed = QStringLiteral("closed"); const QString VToolDetail::AttrWidth = QStringLiteral("width"); -const QString VToolDetail::AttrIdObject = QStringLiteral("idObject"); const QString VToolDetail::AttrNodeType = QStringLiteral("nodeType"); const QString VToolDetail::AttrReverse = QStringLiteral("reverse"); diff --git a/src/libs/vtools/tools/vtooldetail.h b/src/libs/vtools/tools/vtooldetail.h index 1b507b562..18bdccc05 100644 --- a/src/libs/vtools/tools/vtooldetail.h +++ b/src/libs/vtools/tools/vtooldetail.h @@ -69,7 +69,6 @@ public: static const QString AttrSupplement; static const QString AttrClosed; static const QString AttrWidth; - static const QString AttrIdObject; static const QString AttrNodeType; static const QString AttrReverse; static const QString NodeTypeContour; diff --git a/src/libs/vtools/tools/vtooluniondetails.cpp b/src/libs/vtools/tools/vtooluniondetails.cpp index 7f3f72baf..8e06df24c 100644 --- a/src/libs/vtools/tools/vtooluniondetails.cpp +++ b/src/libs/vtools/tools/vtooluniondetails.cpp @@ -738,7 +738,7 @@ QVector VToolUnionDetails::GetDetailFromFile(VAbstractPattern *doc, con { if (element.tagName() == VToolUnionDetails::TagNode) { - quint32 id = doc->GetParametrUInt(element, VToolDetail::AttrIdObject, NULL_ID_STR); + quint32 id = doc->GetParametrUInt(element, AttrIdObject, NULL_ID_STR); qreal mx = qApp->toPixel(doc->GetParametrDouble(element, AttrMx, "0.0")); qreal my = qApp->toPixel(doc->GetParametrDouble(element, AttrMy, "0.0")); const bool reversed = doc->GetParametrUInt(element, VToolDetail::AttrReverse, "0"); From ac49d298f8173e365ceea110de661ffbc4ef5c63 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 16 May 2016 20:59:04 +0300 Subject: [PATCH 17/41] Refactoring. Use tag names from class VAbstractPattern. --HG-- branch : feature --- src/app/valentina/xml/vpattern.cpp | 5 ++--- src/libs/ifc/xml/vabstractpattern.cpp | 1 + src/libs/ifc/xml/vabstractpattern.h | 1 + .../vtools/tools/drawTools/toolcurve/vabstractspline.cpp | 4 +--- src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h | 3 +-- src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.cpp | 3 +-- src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h | 2 +- .../vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp | 3 +-- .../vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h | 2 +- .../drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp | 2 +- .../vtools/tools/drawTools/toolpoint/vabstractpoint.cpp | 4 +--- src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h | 1 - src/libs/vtools/tools/drawTools/vtoolline.cpp | 6 ++---- src/libs/vtools/tools/drawTools/vtoolline.h | 1 - src/libs/vtools/tools/nodeDetails/vnodearc.cpp | 5 ++--- src/libs/vtools/tools/nodeDetails/vnodearc.h | 2 +- src/libs/vtools/tools/nodeDetails/vnodepoint.cpp | 5 ++--- src/libs/vtools/tools/nodeDetails/vnodepoint.h | 2 +- src/libs/vtools/tools/nodeDetails/vnodespline.cpp | 5 ++--- src/libs/vtools/tools/nodeDetails/vnodespline.h | 2 +- src/libs/vtools/tools/nodeDetails/vnodesplinepath.cpp | 5 ++--- src/libs/vtools/tools/nodeDetails/vnodesplinepath.h | 2 +- src/libs/vtools/tools/vtooldetail.cpp | 6 ++---- src/libs/vtools/tools/vtooldetail.h | 1 - src/libs/vtools/tools/vtooluniondetails.cpp | 5 ++--- src/libs/vtools/tools/vtooluniondetails.h | 2 +- 26 files changed, 31 insertions(+), 49 deletions(-) diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index 23e55eb8d..a34d332b5 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -305,8 +305,7 @@ quint32 VPattern::SPointActiveDraw() const QDomElement domElement = domNode.toElement(); if (domElement.isNull() == false) { - if (domElement.tagName() == VToolSinglePoint::TagName && - domElement.attribute(AttrType, "") == VToolBasePoint::ToolType) + if (domElement.tagName() == TagPoint && domElement.attribute(AttrType, "") == VToolBasePoint::ToolType) { return GetParametrId(domElement); } @@ -658,7 +657,7 @@ void VPattern::ParseDetails(const QDomElement &domElement, const Document &parse const QDomElement domElement = domNode.toElement(); if (domElement.isNull() == false) { - if (domElement.tagName() == VToolDetail::TagName) + if (domElement.tagName() == TagDetail) { ParseDetailElement(domElement, parse); } diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index 4b495c1e4..c0c6ea1f1 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -38,6 +38,7 @@ const QString VAbstractPattern::TagPattern = QStringLiteral("pattern"); const QString VAbstractPattern::TagCalculation = QStringLiteral("calculation"); const QString VAbstractPattern::TagModeling = QStringLiteral("modeling"); const QString VAbstractPattern::TagDetails = QStringLiteral("details"); +const QString VAbstractPattern::TagDetail = QStringLiteral("detail"); const QString VAbstractPattern::TagAuthor = QStringLiteral("author"); const QString VAbstractPattern::TagDescription = QStringLiteral("description"); const QString VAbstractPattern::TagNotes = QStringLiteral("notes"); diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index 8bc3444fc..8847ec6ab 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -132,6 +132,7 @@ public: static const QString TagCalculation; static const QString TagModeling; static const QString TagDetails; + static const QString TagDetail; static const QString TagAuthor; static const QString TagDescription; static const QString TagImage; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp index 48b1ca526..1339e5dec 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp @@ -32,8 +32,6 @@ #include -const QString VAbstractSpline::TagName = QStringLiteral("spline"); - //--------------------------------------------------------------------------------------------------------------------- VAbstractSpline::VAbstractSpline(VAbstractPattern *doc, VContainer *data, quint32 id, QGraphicsItem *parent) :VDrawTool(doc, data, id), QGraphicsPathItem(parent), controlPoints(QVector()), @@ -49,7 +47,7 @@ VAbstractSpline::~VAbstractSpline() //--------------------------------------------------------------------------------------------------------------------- QString VAbstractSpline::getTagName() const { - return VAbstractSpline::TagName; + return VAbstractPattern::TagSpline; } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h index 89f2548f2..656e65b50 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h @@ -42,8 +42,7 @@ class VAbstractSpline:public VDrawTool, public QGraphicsPathItem public: VAbstractSpline(VAbstractPattern *doc, VContainer *data, quint32 id, QGraphicsItem * parent = nullptr); virtual ~VAbstractSpline() Q_DECL_OVERRIDE; - // cppcheck-suppress duplInheritedMember - static const QString TagName; + virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Tool::AbstractSpline)}; virtual QString getTagName() const Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.cpp index c35e0f0f4..9ae207749 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.cpp @@ -36,7 +36,6 @@ #include -const QString VToolArc::TagName = QStringLiteral("arc"); const QString VToolArc::ToolType = QStringLiteral("simple"); //--------------------------------------------------------------------------------------------------------------------- @@ -165,7 +164,7 @@ VToolArc* VToolArc::Create(const quint32 _id, const quint32 ¢er, QString &ra //--------------------------------------------------------------------------------------------------------------------- QString VToolArc::getTagName() const { - return VToolArc::TagName; + return VAbstractPattern::TagArc; } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h index 8f03a4cb6..ac513f7c7 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h @@ -45,7 +45,7 @@ public: static VToolArc* Create(const quint32 _id, const quint32 ¢er, QString &radius, QString &f1, QString &f2, const QString &color, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation); - static const QString TagName; + static const QString ToolType; virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Tool::Arc)}; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp index 7b5ff3e6f..f872705a3 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp @@ -36,7 +36,6 @@ #include -const QString VToolArcWithLength::TagName = QStringLiteral("arc"); const QString VToolArcWithLength::ToolType = QStringLiteral("arcWithLength"); //--------------------------------------------------------------------------------------------------------------------- @@ -134,7 +133,7 @@ VToolArcWithLength *VToolArcWithLength::Create(const quint32 _id, const quint32 //--------------------------------------------------------------------------------------------------------------------- QString VToolArcWithLength::getTagName() const { - return VToolArcWithLength::TagName; + return VAbstractPattern::TagArc; } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h index 0a8f89847..13387a86c 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h @@ -44,7 +44,7 @@ public: QString &length, const QString &color, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation); - static const QString TagName; + static const QString ToolType; virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Tool::ArcWithLength)}; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp index 93781042f..238703690 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp @@ -125,7 +125,7 @@ void VToolBasePoint::AddToFile() { Q_ASSERT_X(not namePP.isEmpty(), Q_FUNC_INFO, "name pattern piece is empty"); - QDomElement sPoint = doc->createElement(TagName); + QDomElement sPoint = doc->createElement(getTagName()); // Create SPoint tag QSharedPointer obj = VAbstractTool::data.GetGObject(id); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.cpp index e7027800e..9d2e751fc 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.cpp @@ -29,8 +29,6 @@ #include "vabstractpoint.h" #include "../vgeometry/vpointf.h" -const QString VAbstractPoint::TagName = QStringLiteral("point"); - //--------------------------------------------------------------------------------------------------------------------- VAbstractPoint::VAbstractPoint(VAbstractPattern *doc, VContainer *data, quint32 id) :VDrawTool(doc, data, id) @@ -43,7 +41,7 @@ VAbstractPoint::~VAbstractPoint() //--------------------------------------------------------------------------------------------------------------------- QString VAbstractPoint::getTagName() const { - return VAbstractPoint::TagName; + return VAbstractPattern::TagPoint; } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h b/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h index c6ae7623e..ecb7e5c64 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h @@ -40,7 +40,6 @@ public: virtual ~VAbstractPoint() Q_DECL_OVERRIDE; virtual QString getTagName() const Q_DECL_OVERRIDE; - static const QString TagName; template void ShowToolVisualization(bool show); diff --git a/src/libs/vtools/tools/drawTools/vtoolline.cpp b/src/libs/vtools/tools/drawTools/vtoolline.cpp index 3b57cbb68..7b3604f8a 100644 --- a/src/libs/vtools/tools/drawTools/vtoolline.cpp +++ b/src/libs/vtools/tools/drawTools/vtoolline.cpp @@ -33,8 +33,6 @@ #include "../../dialogs/tools/dialogline.h" #include "../../visualization/line/vistoolline.h" -const QString VToolLine::TagName = QStringLiteral("line"); - //--------------------------------------------------------------------------------------------------------------------- /** * @brief VToolLine constructor. @@ -167,7 +165,7 @@ VToolLine * VToolLine::Create(const quint32 &_id, const quint32 &firstPoint, con //--------------------------------------------------------------------------------------------------------------------- QString VToolLine::getTagName() const { - return VToolLine::TagName; + return VAbstractPattern::TagLine; } //--------------------------------------------------------------------------------------------------------------------- @@ -249,7 +247,7 @@ void VToolLine::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) */ void VToolLine::AddToFile() { - QDomElement domElement = doc->createElement(TagName); + QDomElement domElement = doc->createElement(getTagName()); QSharedPointer obj = QSharedPointer (); SaveOptions(domElement, obj); AddToCalculation(domElement); diff --git a/src/libs/vtools/tools/drawTools/vtoolline.h b/src/libs/vtools/tools/drawTools/vtoolline.h index 99dea64d4..0e06e9777 100644 --- a/src/libs/vtools/tools/drawTools/vtoolline.h +++ b/src/libs/vtools/tools/drawTools/vtoolline.h @@ -45,7 +45,6 @@ public: const QString &typeLine, const QString &lineColor, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation); - static const QString TagName; virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Tool::Line)}; diff --git a/src/libs/vtools/tools/nodeDetails/vnodearc.cpp b/src/libs/vtools/tools/nodeDetails/vnodearc.cpp index a0f53931a..06922cbdc 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodearc.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodearc.cpp @@ -31,7 +31,6 @@ #include #include -const QString VNodeArc::TagName = QStringLiteral("arc"); const QString VNodeArc::ToolType = QStringLiteral("modeling"); //--------------------------------------------------------------------------------------------------------------------- @@ -94,7 +93,7 @@ void VNodeArc::Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint //--------------------------------------------------------------------------------------------------------------------- QString VNodeArc::getTagName() const { - return VNodeArc::TagName; + return VAbstractPattern::TagArc; } //--------------------------------------------------------------------------------------------------------------------- @@ -117,7 +116,7 @@ void VNodeArc::AllowSelecting(bool enabled) */ void VNodeArc::AddToFile() { - QDomElement domElement = doc->createElement(TagName); + QDomElement domElement = doc->createElement(getTagName()); doc->SetAttribute(domElement, VDomDocument::AttrId, id); doc->SetAttribute(domElement, AttrType, ToolType); diff --git a/src/libs/vtools/tools/nodeDetails/vnodearc.h b/src/libs/vtools/tools/nodeDetails/vnodearc.h index 5f5b82f9a..fc6597b68 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodearc.h +++ b/src/libs/vtools/tools/nodeDetails/vnodearc.h @@ -41,7 +41,7 @@ class VNodeArc :public VAbstractNode public: static void Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idArc, const Document &parse, const Source &typeCreation, const quint32 &idTool = 0); - static const QString TagName; + static const QString ToolType; virtual QString getTagName() const Q_DECL_OVERRIDE; public slots: diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp index e06ecd7e2..c3942b581 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp @@ -33,7 +33,6 @@ #include #include -const QString VNodePoint::TagName = QStringLiteral("point"); const QString VNodePoint::ToolType = QStringLiteral("modeling"); //--------------------------------------------------------------------------------------------------------------------- @@ -119,7 +118,7 @@ void VNodePoint::Create(VAbstractPattern *doc, VContainer *data, VMainGraphicsSc //--------------------------------------------------------------------------------------------------------------------- QString VNodePoint::getTagName() const { - return VNodePoint::TagName; + return VAbstractPattern::TagPoint; } //--------------------------------------------------------------------------------------------------------------------- @@ -195,7 +194,7 @@ void VNodePoint::FullUpdateFromFile() void VNodePoint::AddToFile() { const QSharedPointer point = VAbstractTool::data.GeometricObject(id); - QDomElement domElement = doc->createElement(TagName); + QDomElement domElement = doc->createElement(getTagName()); doc->SetAttribute(domElement, VDomDocument::AttrId, id); doc->SetAttribute(domElement, AttrType, ToolType); diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.h b/src/libs/vtools/tools/nodeDetails/vnodepoint.h index 0cb79c618..f2074f7b7 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.h +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.h @@ -47,7 +47,7 @@ public: static void Create(VAbstractPattern *doc, VContainer *data, VMainGraphicsScene *scene, quint32 id, quint32 idPoint, const Document &parse, const Source &typeCreation, const quint32 &idTool = 0); - static const QString TagName; + static const QString ToolType; virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Tool::NodePoint)}; diff --git a/src/libs/vtools/tools/nodeDetails/vnodespline.cpp b/src/libs/vtools/tools/nodeDetails/vnodespline.cpp index 2690e01df..5555bf0ba 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodespline.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodespline.cpp @@ -31,7 +31,6 @@ #include #include -const QString VNodeSpline::TagName = QStringLiteral("spline"); const QString VNodeSpline::ToolType = QStringLiteral("modelingSpline"); //--------------------------------------------------------------------------------------------------------------------- @@ -98,7 +97,7 @@ VNodeSpline *VNodeSpline::Create(VAbstractPattern *doc, VContainer *data, quint3 //--------------------------------------------------------------------------------------------------------------------- QString VNodeSpline::getTagName() const { - return VNodeSpline::TagName; + return VAbstractPattern::TagSpline; } //--------------------------------------------------------------------------------------------------------------------- @@ -121,7 +120,7 @@ void VNodeSpline::AllowSelecting(bool enabled) */ void VNodeSpline::AddToFile() { - QDomElement domElement = doc->createElement(TagName); + QDomElement domElement = doc->createElement(getTagName()); doc->SetAttribute(domElement, VDomDocument::AttrId, id); doc->SetAttribute(domElement, AttrType, ToolType); diff --git a/src/libs/vtools/tools/nodeDetails/vnodespline.h b/src/libs/vtools/tools/nodeDetails/vnodespline.h index 1e77447f0..08823b0d9 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodespline.h +++ b/src/libs/vtools/tools/nodeDetails/vnodespline.h @@ -42,7 +42,7 @@ public: static VNodeSpline *Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Document &parse, const Source &typeCreation, const quint32 &idTool = 0); - static const QString TagName; + static const QString ToolType; virtual QString getTagName() const Q_DECL_OVERRIDE; public slots: diff --git a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.cpp b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.cpp index 91a7f7e4d..4c16ce503 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.cpp @@ -32,7 +32,6 @@ #include #include -const QString VNodeSplinePath::TagName = QStringLiteral("spline"); const QString VNodeSplinePath::ToolType = QStringLiteral("modelingPath"); //--------------------------------------------------------------------------------------------------------------------- @@ -95,7 +94,7 @@ void VNodeSplinePath::Create(VAbstractPattern *doc, VContainer *data, quint32 id //--------------------------------------------------------------------------------------------------------------------- QString VNodeSplinePath::getTagName() const { - return VNodeSplinePath::TagName; + return VAbstractPattern::TagSpline; } //--------------------------------------------------------------------------------------------------------------------- @@ -118,7 +117,7 @@ void VNodeSplinePath::AllowSelecting(bool enabled) */ void VNodeSplinePath::AddToFile() { - QDomElement domElement = doc->createElement(TagName); + QDomElement domElement = doc->createElement(getTagName()); doc->SetAttribute(domElement, VDomDocument::AttrId, id); doc->SetAttribute(domElement, AttrType, ToolType); diff --git a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h index acb11f213..2976cc53b 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h +++ b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h @@ -42,7 +42,7 @@ public: static void Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Document &parse, const Source &typeCreation, const quint32 &idTool = 0); - static const QString TagName; + static const QString ToolType; virtual QString getTagName() const Q_DECL_OVERRIDE; public slots: diff --git a/src/libs/vtools/tools/vtooldetail.cpp b/src/libs/vtools/tools/vtooldetail.cpp index b94a046c2..8938d0904 100644 --- a/src/libs/vtools/tools/vtooldetail.cpp +++ b/src/libs/vtools/tools/vtooldetail.cpp @@ -47,8 +47,6 @@ #include #include - -const QString VToolDetail::TagName = QStringLiteral("detail"); const QString VToolDetail::TagNode = QStringLiteral("node"); const QString VToolDetail::AttrSupplement = QStringLiteral("supplement"); @@ -315,7 +313,7 @@ void VToolDetail::FullUpdateFromGuiOk(int result) void VToolDetail::AddToFile() { VDetail detail = VAbstractTool::data.GetDetail(id); - QDomElement domElement = doc->createElement(TagName); + QDomElement domElement = doc->createElement(getTagName()); doc->SetAttribute(domElement, VDomDocument::AttrId, id); doc->SetAttribute(domElement, AttrName, detail.getName()); @@ -619,7 +617,7 @@ void VToolDetail::AddNode(VAbstractPattern *doc, QDomElement &domElement, const //--------------------------------------------------------------------------------------------------------------------- QString VToolDetail::getTagName() const { - return VToolDetail::TagName; + return VAbstractPattern::TagDetail; } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/vtooldetail.h b/src/libs/vtools/tools/vtooldetail.h index 18bdccc05..0d989c0a5 100644 --- a/src/libs/vtools/tools/vtooldetail.h +++ b/src/libs/vtools/tools/vtooldetail.h @@ -64,7 +64,6 @@ public: static void Create(const quint32 &_id, const VDetail &newDetail, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation, const QString &drawName = QString()); - static const QString TagName; static const QString TagNode; static const QString AttrSupplement; static const QString AttrClosed; diff --git a/src/libs/vtools/tools/vtooluniondetails.cpp b/src/libs/vtools/tools/vtooluniondetails.cpp index 8e06df24c..2b1840e90 100644 --- a/src/libs/vtools/tools/vtooluniondetails.cpp +++ b/src/libs/vtools/tools/vtooluniondetails.cpp @@ -36,7 +36,6 @@ #include -const QString VToolUnionDetails::TagName = QStringLiteral("tools"); const QString VToolUnionDetails::ToolType = QStringLiteral("unionDetails"); const QString VToolUnionDetails::TagDetail = QStringLiteral("det"); const QString VToolUnionDetails::TagNode = QStringLiteral("node"); @@ -439,7 +438,7 @@ void VToolUnionDetails::BiasRotatePoint(VPointF *point, const qreal &dx, const q //--------------------------------------------------------------------------------------------------------------------- QString VToolUnionDetails::getTagName() const { - return VToolUnionDetails::TagName; + return VAbstractPattern::TagTools; } //--------------------------------------------------------------------------------------------------------------------- @@ -778,7 +777,7 @@ QVector VToolUnionDetails::GetDetailFromFile(VAbstractPattern *doc, con */ void VToolUnionDetails::AddToFile() { - QDomElement domElement = doc->createElement(TagName); + QDomElement domElement = doc->createElement(getTagName()); doc->SetAttribute(domElement, VDomDocument::AttrId, id); doc->SetAttribute(domElement, AttrType, ToolType); diff --git a/src/libs/vtools/tools/vtooluniondetails.h b/src/libs/vtools/tools/vtooluniondetails.h index 63a7c3698..4ba45ab19 100644 --- a/src/libs/vtools/tools/vtooluniondetails.h +++ b/src/libs/vtools/tools/vtooluniondetails.h @@ -56,7 +56,7 @@ public: static void PointsOnEdge(const VDetail &d, const quint32 &index, VPointF &p1, VPointF &p2, VContainer *data); static void FindIndexJ(const qint32 &pointsD2, const VDetail &d2, const quint32 &indexD2, qint32 &j); static QVector GetDetailFromFile(VAbstractPattern *doc, const QDomElement &domElement); - static const QString TagName; + static const QString ToolType; static const QString TagDetail; static const QString TagNode; From 048a49f78403baf25a293b2449aeb258234ae11b Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 16 May 2016 21:11:48 +0300 Subject: [PATCH 18/41] Return all formulas that provide tag Operation. --HG-- branch : feature --- src/libs/ifc/xml/vabstractpattern.cpp | 24 ++++++++++++++++++++++++ src/libs/ifc/xml/vabstractpattern.h | 1 + 2 files changed, 25 insertions(+) diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index c0c6ea1f1..5b4080c88 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -1203,6 +1203,7 @@ QStringList VAbstractPattern::ListExpressions() const list << ListArcExpressions(); list << ListSplineExpressions(); list << ListIncrementExpressions(); + list << ListOperationExpressions(); return list; } @@ -1393,6 +1394,29 @@ QStringList VAbstractPattern::ListIncrementExpressions() const return expressions; } +//--------------------------------------------------------------------------------------------------------------------- +QStringList VAbstractPattern::ListOperationExpressions() const +{ + QStringList expressions; + const QDomNodeList list = elementsByTagName(TagOperation); + for (int i=0; i < list.size(); ++i) + { + const QDomElement dom = list.at(i).toElement(); + + // Each tag can contains several attributes. + try + { + expressions.append(GetParametrString(dom, AttrAngle)); + } + catch (VExceptionEmptyParameter &e) + { + Q_UNUSED(e) + } + } + + return expressions; +} + //--------------------------------------------------------------------------------------------------------------------- bool VAbstractPattern::IsVariable(const QString &token) const { diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index 8847ec6ab..45a9901ad 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -294,6 +294,7 @@ private: QStringList ListSplineExpressions() const; QStringList ListPathPointExpressions() const; QStringList ListIncrementExpressions() const; + QStringList ListOperationExpressions() const; bool IsVariable(const QString& token) const; bool IsPostfixOperator(const QString& token) const; From 35c1267672080a47ab4e21c731316134d6c9d092 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 16 May 2016 22:14:59 +0300 Subject: [PATCH 19/41] Try catch more cases where adding new tool will produce issues. --HG-- branch : feature --- src/libs/ifc/xml/vabstractpattern.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index 5b4080c88..0f8c7ebea 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -1211,6 +1211,10 @@ QStringList VAbstractPattern::ListExpressions() const //--------------------------------------------------------------------------------------------------------------------- QStringList VAbstractPattern::ListPointExpressions() const { + // Check if new tool doesn't bring new attribute with a formula. + // If no just increment number + Q_STATIC_ASSERT(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43); + QStringList expressions; const QDomNodeList list = elementsByTagName(TagPoint); for (int i=0; i < list.size(); ++i) @@ -1278,6 +1282,10 @@ QStringList VAbstractPattern::ListPointExpressions() const //--------------------------------------------------------------------------------------------------------------------- QStringList VAbstractPattern::ListArcExpressions() const { + // Check if new tool doesn't bring new attribute with a formula. + // If no just increment number + Q_STATIC_ASSERT(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43); + QStringList expressions; const QDomNodeList list = elementsByTagName(TagArc); for (int i=0; i < list.size(); ++i) @@ -1335,6 +1343,10 @@ QStringList VAbstractPattern::ListSplineExpressions() const //--------------------------------------------------------------------------------------------------------------------- QStringList VAbstractPattern::ListPathPointExpressions() const { + // Check if new tool doesn't bring new attribute with a formula. + // If no just increment number + Q_STATIC_ASSERT(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43); + QStringList expressions; const QDomNodeList list = elementsByTagName(AttrPathPoint); for (int i=0; i < list.size(); ++i) @@ -1397,6 +1409,10 @@ QStringList VAbstractPattern::ListIncrementExpressions() const //--------------------------------------------------------------------------------------------------------------------- QStringList VAbstractPattern::ListOperationExpressions() const { + // Check if new tool doesn't bring new attribute with a formula. + // If no just increment number + Q_STATIC_ASSERT(static_cast(Tool::LAST_ONE_DO_NOT_USE) == 43); + QStringList expressions; const QDomNodeList list = elementsByTagName(TagOperation); for (int i=0; i < list.size(); ++i) From 18d3a297cd91280fd5ffe3e24976fb0dcd8b3f9c Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Tue, 17 May 2016 13:02:01 +0300 Subject: [PATCH 20/41] VToolRotation::SetFactor. --HG-- branch : feature --- .../drawTools/operation/vtoolrotation.cpp | 23 +++++++++++++++++++ .../tools/drawTools/operation/vtoolrotation.h | 1 + 2 files changed, 24 insertions(+) diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index c4858e135..512277f07 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -419,6 +419,29 @@ void VToolRotation::FullUpdateFromFile() SetVisualization(); } +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::SetFactor(qreal factor) +{ + VDrawTool::SetFactor(factor); + QMapIterator i(rObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() == GOType::Point) + { + VSimplePoint *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->RefreshGeometry(*VAbstractTool::data.GeometricObject(i.key())); + } + else + { + VSimpleCurve *item = qobject_cast(i.value()); + SCASSERT(item != nullptr); + item->RefreshGeometry(VAbstractTool::data.GeometricObject(i.key())); + } + } +} + //--------------------------------------------------------------------------------------------------------------------- void VToolRotation::AllowHover(bool enabled) { diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h index 1bbd57034..740d0c2ba 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h @@ -78,6 +78,7 @@ public: public slots: virtual void FullUpdateFromFile() Q_DECL_OVERRIDE; + virtual void SetFactor(qreal factor) Q_DECL_OVERRIDE; virtual void AllowHover(bool enabled) Q_DECL_OVERRIDE; virtual void AllowSelecting(bool enabled) Q_DECL_OVERRIDE; From 970b876cf7be0a9aae8c3415293968c1dd4b858f Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Tue, 17 May 2016 13:24:51 +0300 Subject: [PATCH 21/41] Show the tool visualization. --HG-- branch : feature --- src/app/valentina/core/vtooloptionspropertybrowser.cpp | 3 ++- src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp index 43c25233c..1a901204d 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp +++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp @@ -1925,7 +1925,8 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolCurveIntersectAxis(QGraphicsIte //--------------------------------------------------------------------------------------------------------------------- void VToolOptionsPropertyBrowser::ShowOptionsToolRotation(QGraphicsItem *item) { - + VToolRotation *i = qgraphicsitem_cast(item); + i->ShowVisualization(true); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 512277f07..ec1aaa9d0 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -620,7 +620,7 @@ void VToolRotation::SetVisualization() visual->SetObjects(source); visual->SetOriginPointId(origPointId); - visual->SetAngle(angle); + visual->SetAngle(qApp->TrVars()->FormulaToUser(angle)); visual->RefreshGeometry(); } } From 916598c86cca30e07284df34ad338ae096fc1691 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 May 2016 13:17:50 +0300 Subject: [PATCH 22/41] Show an arc between two lines that reprezent an angle. --HG-- branch : feature --- .../visualization/line/vistoolrotation.cpp | 36 ++++++++++--------- .../visualization/line/vistoolrotation.h | 1 + 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/libs/vtools/visualization/line/vistoolrotation.cpp b/src/libs/vtools/visualization/line/vistoolrotation.cpp index 9cd40790a..e5602e3eb 100644 --- a/src/libs/vtools/visualization/line/vistoolrotation.cpp +++ b/src/libs/vtools/visualization/line/vistoolrotation.cpp @@ -44,12 +44,14 @@ VisToolRotation::VisToolRotation(const VContainer *data, QGraphicsItem *parent) angle(INT_MIN), objects(), point(nullptr), + angleArc(nullptr), xAxis(nullptr), supportColor2(Qt::darkGreen), points(), curves() { point = InitPoint(supportColor2, this); + angleArc = InitItem(supportColor2, this); xAxis = InitItem(supportColor2, this); } @@ -75,31 +77,31 @@ void VisToolRotation::RefreshGeometry() if (object1Id != NULL_ID) { - const QPointF origin = *Visualization::data->GeometricObject(object1Id); - DrawPoint(point, origin, supportColor2); + const QSharedPointer origin = Visualization::data->GeometricObject(object1Id); + DrawPoint(point, *origin, supportColor2); QLineF rLine; if (VFuzzyComparePossibleNulls(angle, INT_MIN)) { - rLine = QLineF(origin, Visualization::scenePos); + rLine = QLineF(*origin, Visualization::scenePos); if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) { rLine.setAngle(CorrectAngle(rLine.angle())); } - rLine.setP2(Ray(origin, rLine.angle())); + rLine.setP2(Ray(*origin, rLine.angle())); } else { - rLine = QLineF(origin, Ray(origin, angle)); + rLine = QLineF(*origin, Ray(*origin, angle)); } - if (mode == Mode::Creation) - { - DrawLine(this, rLine, supportColor2, Qt::DashLine); - DrawLine(xAxis, QLineF(origin, Ray(origin, 0)), supportColor2, Qt::DashLine); - } + DrawLine(this, rLine, supportColor2, Qt::DashLine); + DrawLine(xAxis, QLineF(*origin, Ray(*origin, 0)), supportColor2, Qt::DashLine); + + VArc arc(*origin, ToPixel(DefPointRadius/*mm*/*2, Unit::Mm), 0, rLine.angle()); + DrawPath(angleArc, arc.GetPath(PathDirection::Hide), supportColor2, Qt::SolidLine, Qt::RoundCap); Visualization::toolTip = tr("Rotating angle = %1°, Shift - sticking angle, " "Mouse click - finish creation").arg(rLine.angle()); @@ -126,37 +128,37 @@ void VisToolRotation::RefreshGeometry() ++iPoint; point = GetPoint(iPoint); - DrawPoint(point, p->Rotate(origin, angle), supportColor); + DrawPoint(point, p->Rotate(*origin, angle), supportColor); break; } case GOType::Arc: { - iCurve = AddCurve(origin, id, iCurve); + iCurve = AddCurve(*origin, id, iCurve); break; } case GOType::EllipticalArc: { - iCurve = AddCurve(origin, id, iCurve); + iCurve = AddCurve(*origin, id, iCurve); break; } case GOType::Spline: { - iCurve = AddCurve(origin, id, iCurve); + iCurve = AddCurve(*origin, id, iCurve); break; } case GOType::SplinePath: { - iCurve = AddCurve(origin, id, iCurve); + iCurve = AddCurve(*origin, id, iCurve); break; } case GOType::CubicBezier: { - iCurve = AddCurve(origin, id, iCurve); + iCurve = AddCurve(*origin, id, iCurve); break; } case GOType::CubicBezierPath: { - iCurve = AddCurve(origin, id, iCurve); + iCurve = AddCurve(*origin, id, iCurve); break; } case GOType::Unknown: diff --git a/src/libs/vtools/visualization/line/vistoolrotation.h b/src/libs/vtools/visualization/line/vistoolrotation.h index 00f36202a..e7a660e8e 100644 --- a/src/libs/vtools/visualization/line/vistoolrotation.h +++ b/src/libs/vtools/visualization/line/vistoolrotation.h @@ -55,6 +55,7 @@ private: qreal angle; QVector objects; QGraphicsEllipseItem *point; + QGraphicsPathItem *angleArc; QGraphicsLineItem *xAxis; QColor supportColor2; From 291c19d5a27cb545527cd93a0ca8d6eaa0b0f073 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 May 2016 14:32:51 +0300 Subject: [PATCH 23/41] Property browser for tool Rotation. --HG-- branch : feature --- .../core/vtooloptionspropertybrowser.cpp | 79 ++++++++++++++++- .../core/vtooloptionspropertybrowser.h | 6 ++ .../drawTools/operation/vtoolrotation.cpp | 88 +++++++++++++++++-- .../tools/drawTools/operation/vtoolrotation.h | 32 ++++--- 4 files changed, 185 insertions(+), 20 deletions(-) diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp index 1a901204d..cdbc80c06 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp +++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp @@ -490,7 +490,6 @@ void VToolOptionsPropertyBrowser::AddPropertyObjectName(Tool *i, const QString & AddProperty(itemName, AttrName); } - //--------------------------------------------------------------------------------------------------------------------- template void VToolOptionsPropertyBrowser::AddPropertyPointName1(Tool *i, const QString &propertyName) @@ -511,6 +510,17 @@ void VToolOptionsPropertyBrowser::AddPropertyPointName2(Tool *i, const QString & AddProperty(itemName, AttrName2); } +//--------------------------------------------------------------------------------------------------------------------- +template +void VToolOptionsPropertyBrowser::AddPropertyOperationSuffix(Tool *i, const QString &propertyName, bool readOnly) +{ + auto itemSuffix = new VStringProperty(propertyName); + itemSuffix->setClearButtonEnable(true); + itemSuffix->setValue(i->Suffix()); + itemSuffix->setReadOnly(readOnly); + AddProperty(itemSuffix, AttrSuffix); +} + //--------------------------------------------------------------------------------------------------------------------- template void VToolOptionsPropertyBrowser::AddPropertyCrossPoint(Tool *i, const QString &propertyName) @@ -654,6 +664,43 @@ void VToolOptionsPropertyBrowser::SetPointName2(const QString &name) } } +//--------------------------------------------------------------------------------------------------------------------- +template +void VToolOptionsPropertyBrowser::SetOperationSuffix(const QString &suffix) +{ + if (Tool *item = qgraphicsitem_cast(currentItem)) + { + if (suffix == item->Suffix()) + { + return; + } + + if (suffix.isEmpty()) + { + idToProperty[AttrSuffix]->setValue(item->Suffix()); + return; + } + + QRegularExpression rx(NameRegExp()); + const QVector names = item->GetNames(suffix); + for (int i=0; i < names.size(); ++i) + { + if (not rx.match(names.at(i)).hasMatch() || not VContainer::IsUnique(names.at(i))) + { + idToProperty[AttrSuffix]->setValue(item->Suffix()); + } + else + { + item->SetSuffix(suffix); + } + } + } + else + { + qWarning()<<"Can't cast item"; + } +} + //--------------------------------------------------------------------------------------------------------------------- template Type VToolOptionsPropertyBrowser::GetCrossPoint(const QVariant &value) @@ -1538,6 +1585,24 @@ void VToolOptionsPropertyBrowser::ChangeDataToolCurveIntersectAxis(VProperty *pr void VToolOptionsPropertyBrowser::ChangeDataToolRotation(VProperty *property) { SCASSERT(property != nullptr) + + QVariant value = property->data(VProperty::DPC_Data, Qt::DisplayRole); + const QString id = propertyToId[property]; + + VToolRotation *i = qgraphicsitem_cast(currentItem); + SCASSERT(i != nullptr); + switch (PropertiesList().indexOf(id)) + { + case 38: // AttrSuffix + SetOperationSuffix(value.toString()); + break; + case 5: // AttrAngle + i->SetFormulaAngle(value.value()); + break; + default: + qWarning()<<"Unknown property type. id = "<(item); i->ShowVisualization(true); + formView->setTitle(tr("Tool rotation")); + + AddPropertyOperationSuffix(i, tr("Suffix")); + AddPropertyFormula(tr("Angle"), i->GetFormulaAngle(), AttrAngle); } //--------------------------------------------------------------------------------------------------------------------- @@ -2390,7 +2459,12 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolCurveIntersectAxis() //--------------------------------------------------------------------------------------------------------------------- void VToolOptionsPropertyBrowser::UpdateOptionsToolRotation() { + VToolRotation *i = qgraphicsitem_cast(currentItem); + idToProperty[AttrSuffix]->setValue(i->Suffix()); + QVariant valueAngle; + valueAngle.setValue(i->GetFormulaAngle()); + idToProperty[AttrAngle]->setValue(valueAngle); } //--------------------------------------------------------------------------------------------------------------------- @@ -2433,6 +2507,7 @@ QStringList VToolOptionsPropertyBrowser::PropertiesList() const << AttrVCrossPoint /* 34 */ << AttrHCrossPoint /* 35 */ << AttrLength1 /* 36 */ - << AttrLength2; /* 37 */ + << AttrLength2 /* 37 */ + << AttrSuffix; /* 38 */ return attr; } diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.h b/src/app/valentina/core/vtooloptionspropertybrowser.h index a0e44fef0..e8ba646e1 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.h +++ b/src/app/valentina/core/vtooloptionspropertybrowser.h @@ -74,6 +74,9 @@ private: template void SetPointName2(const QString &name); + template + void SetOperationSuffix(const QString &suffix); + template Type GetCrossPoint(const QVariant &value); @@ -95,6 +98,9 @@ private: template void AddPropertyPointName2(Tool *i, const QString &propertyName); + template + void AddPropertyOperationSuffix(Tool *i, const QString &propertyName, bool readOnly = false); + template void AddPropertyCrossPoint(Tool *i, const QString &propertyName); diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index ec1aaa9d0..4837ba21b 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -39,6 +39,7 @@ #include "../vwidgets/vsimplepoint.h" #include "../vwidgets/vsimplecurve.h" #include "../../../undocommands/label/rotationmovelabel.h" +#include "../vpatterndb/vformula.h" const QString VToolRotation::ToolType = QStringLiteral("rotation"); const QString VToolRotation::TagItem = QStringLiteral("item"); @@ -53,7 +54,7 @@ VToolRotation::VToolRotation(VAbstractPattern *doc, VContainer *data, quint32 id : VDrawTool(doc, data, id), QGraphicsItem(parent), origPointId(origPointId), - angle(angle), + formulaAngle(angle), suffix(suffix), source(source), destination(destination), @@ -142,7 +143,7 @@ void VToolRotation::setDialog() DialogRotation *dialogTool = qobject_cast(dialog); SCASSERT(dialogTool != nullptr); dialogTool->SetOrigPointId(origPointId); - dialogTool->SetAngle(angle); + dialogTool->SetAngle(formulaAngle); dialogTool->SetSuffix(suffix); } @@ -350,6 +351,52 @@ void VToolRotation::ExtractData(VAbstractPattern *doc, const QDomElement &domEle } } +//--------------------------------------------------------------------------------------------------------------------- +QVector VToolRotation::GetNames(const QString &suffix) const +{ + QVector names; + for (int i = 0; i < source.size(); ++i) + { + const QSharedPointer obj = VAbstractTool::data.GetGObject(source.at(i)); + + // This check helps to find missed objects in the switch + Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects were handled."); + +#if defined(Q_CC_GNU) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wswitch-default" +#endif + switch(static_cast(obj->getType())) + { + case GOType::Point: + { + const QSharedPointer point = VAbstractTool::data.GeometricObject(source.at(i)); + names.append(point->name() + suffix); + break; + } + case GOType::Arc: + case GOType::EllipticalArc: + case GOType::Spline: + case GOType::SplinePath: + case GOType::CubicBezier: + case GOType::CubicBezierPath: + { + const QSharedPointer curve = + VAbstractTool::data.GeometricObject(source.at(i)); + names.append(curve->name() + suffix); + break; + } + case GOType::Unknown: + break; + } +#if defined(Q_CC_GNU) +#pragma GCC diagnostic pop +#endif + } + + return names; +} + //--------------------------------------------------------------------------------------------------------------------- QString VToolRotation::getTagName() const { @@ -362,12 +409,43 @@ void VToolRotation::SetEnabled(bool enabled) this->setEnabled(enabled); } +//--------------------------------------------------------------------------------------------------------------------- +VFormula VToolRotation::GetFormulaAngle() const +{ + VFormula fAngle(formulaAngle, getData()); + fAngle.setCheckZero(false); + fAngle.setToolId(id); + fAngle.setPostfix(degreeSymbol); + return fAngle; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::SetFormulaAngle(const VFormula &value) +{ + if (value.error() == false) + { + formulaAngle = value.GetFormula(FormulaType::FromUser); + + QSharedPointer obj = VAbstractTool::data.GetFakeGObject(id); + SaveOption(obj); + } +} + //--------------------------------------------------------------------------------------------------------------------- QString VToolRotation::Suffix() const { return suffix; } +//--------------------------------------------------------------------------------------------------------------------- +void VToolRotation::SetSuffix(const QString &suffix) +{ + // Don't know if need check name here. + this->suffix = suffix; + QSharedPointer obj = VAbstractTool::data.GetFakeGObject(id); + SaveOption(obj); +} + //--------------------------------------------------------------------------------------------------------------------- void VToolRotation::GroupVisibility(quint32 object, bool visible) { @@ -620,7 +698,7 @@ void VToolRotation::SetVisualization() visual->SetObjects(source); visual->SetOriginPointId(origPointId); - visual->SetAngle(qApp->TrVars()->FormulaToUser(angle)); + visual->SetAngle(qApp->TrVars()->FormulaToUser(formulaAngle)); visual->RefreshGeometry(); } } @@ -718,7 +796,7 @@ void VToolRotation::SaveDialog(QDomElement &domElement) void VToolRotation::ReadToolAttributes(const QDomElement &domElement) { origPointId = doc->GetParametrUInt(domElement, AttrCenter, NULL_ID_STR); - angle = doc->GetParametrString(domElement, AttrAngle, "0"); + formulaAngle = doc->GetParametrString(domElement, AttrAngle, "0"); suffix = doc->GetParametrString(domElement, AttrSuffix); } @@ -729,7 +807,7 @@ void VToolRotation::SaveOptions(QDomElement &tag, QSharedPointer &obj) doc->SetAttribute(tag, AttrType, ToolType); doc->SetAttribute(tag, AttrCenter, QString().setNum(origPointId)); - doc->SetAttribute(tag, AttrAngle, angle); + doc->SetAttribute(tag, AttrAngle, formulaAngle); doc->SetAttribute(tag, AttrSuffix, suffix); QDomElement tagObjects = doc->createElement(TagSource); diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h index 740d0c2ba..9556b7d03 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h @@ -40,6 +40,7 @@ struct DestinationItem class VAbstractSimple; class VSimpleCurve; +class VFormula; class VToolRotation : public VDrawTool, public QGraphicsItem { @@ -52,12 +53,13 @@ public: virtual void setDialog() Q_DECL_OVERRIDE; static VToolRotation* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); - static VToolRotation* Create(const quint32 _id, const quint32 &origin, QString &angle, const QString &suffix, + static VToolRotation* Create(const quint32 _id, const quint32 &origin, QString &formulaAngle, const QString &suffix, const QVector &source, const QVector &destination, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation); static void ExtractData(VAbstractPattern *doc, const QDomElement &domElement, QVector &source, QVector &destination); + QVector GetNames(const QString &suffix) const; static const QString ToolType; static const QString TagItem; static const QString TagSource; @@ -68,7 +70,11 @@ public: void SetEnabled(bool enabled); + VFormula GetFormulaAngle() const; + void SetFormulaAngle(const VFormula &value); + QString Suffix() const; + void SetSuffix(const QString &suffix); virtual void GroupVisibility(quint32 object, bool visible) Q_DECL_OVERRIDE; virtual void ShowVisualization(bool show) Q_DECL_OVERRIDE; @@ -118,7 +124,7 @@ private slots: private: Q_DISABLE_COPY(VToolRotation) quint32 origPointId; - QString angle; + QString formulaAngle; QString suffix; QVector source; @@ -127,39 +133,39 @@ private: QMap rObjects; VToolRotation(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 origPointId, - const QString &angle, const QString &suffix, const QVector &source, + const QString &formulaAngle, const QString &suffix, const QVector &source, const QVector &destination, const Source &typeCreation, QGraphicsItem *parent = nullptr); void UpdateNamePosition(quint32 id); - static DestinationItem CreatePoint(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static DestinationItem CreatePoint(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data); template - static DestinationItem CreateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static DestinationItem CreateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data); - static DestinationItem CreateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static DestinationItem CreateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data); template - static DestinationItem CreateCurve(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static DestinationItem CreateCurve(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data); template - static DestinationItem CreateCurveWithSegments(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static DestinationItem CreateCurveWithSegments(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data); - static void UpdatePoint(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static void UpdatePoint(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data, quint32 id, qreal mx, qreal my); template - static void UpdateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static void UpdateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data, quint32 id); - static void UpdateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static void UpdateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data, quint32 id); template - static void UpdateCurve(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static void UpdateCurve(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data, quint32 id); template - static void UpdateCurveWithSegments(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, + static void UpdateCurveWithSegments(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data, quint32 id); template From 180903b807e6e610db982da8d426993f8a92b969 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 May 2016 15:35:07 +0300 Subject: [PATCH 24/41] Automatically generate suffix. --HG-- branch : feature --- src/app/tape/vlitepattern.cpp | 6 ++ src/app/tape/vlitepattern.h | 1 + src/app/valentina/xml/vpattern.cpp | 57 ++++++++++++------- src/app/valentina/xml/vpattern.h | 1 + src/libs/ifc/xml/vabstractpattern.cpp | 22 +++++++ src/libs/ifc/xml/vabstractpattern.h | 2 + src/libs/vpatterndb/vcontainer.cpp | 10 +++- src/libs/vpatterndb/vcontainer.h | 3 +- .../vtools/dialogs/tools/dialogrotation.cpp | 2 +- 9 files changed, 80 insertions(+), 24 deletions(-) diff --git a/src/app/tape/vlitepattern.cpp b/src/app/tape/vlitepattern.cpp index 1908979a2..1b55e5cfe 100644 --- a/src/app/tape/vlitepattern.cpp +++ b/src/app/tape/vlitepattern.cpp @@ -59,6 +59,12 @@ QString VLitePattern::GenerateLabel(const LabelType &type, const QString &reserv return QString(); } +//--------------------------------------------------------------------------------------------------------------------- +QString VLitePattern::GenerateSuffix() const +{ + return QString(); +} + //--------------------------------------------------------------------------------------------------------------------- void VLitePattern::UpdateToolData(const quint32 &id, VContainer *data) { diff --git a/src/app/tape/vlitepattern.h b/src/app/tape/vlitepattern.h index 170178298..a4ee1b2f0 100644 --- a/src/app/tape/vlitepattern.h +++ b/src/app/tape/vlitepattern.h @@ -43,6 +43,7 @@ public: virtual void DecrementReferens(quint32 id) const Q_DECL_OVERRIDE; virtual QString GenerateLabel(const LabelType &type, const QString &reservedName = QString())const Q_DECL_OVERRIDE; + virtual QString GenerateSuffix() const Q_DECL_OVERRIDE; virtual void UpdateToolData(const quint32 &id, VContainer *data) Q_DECL_OVERRIDE; diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index a34d332b5..1bfdd01af 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -2880,10 +2880,9 @@ void VPattern::SetIncrementDescription(const QString &name, const QString &text) */ QString VPattern::GenerateLabel(const LabelType &type, const QString &reservedName) const { - QDomNodeList drawList = elementsByTagName(TagDraw); - if (type == LabelType::NewPatternPiece) { + const QDomNodeList drawList = elementsByTagName(TagDraw); QString name; int i = 0; for (;;) @@ -2904,25 +2903,7 @@ QString VPattern::GenerateLabel(const LabelType &type, const QString &reservedNa } else if (type == LabelType::NewLabel) { - if (drawList.isEmpty()) - { - const QString label = GetLabelBase(0); - qCDebug(vXML, "Point label: %s", qUtf8Printable(label)); - return label; - } - - int index = 0; - for (int i = 0; i < drawList.size(); ++i) - { - QDomElement node = drawList.at(i).toElement(); - if (node.attribute(AttrName) == nameActivPP) - { - index = i; - break; - } - } - - QString labelBase = GetLabelBase(static_cast(index)); + const QString labelBase = GetLabelBase(static_cast(GetIndexActivPP())); qint32 num = 1; QString name; @@ -2942,6 +2923,40 @@ QString VPattern::GenerateLabel(const LabelType &type, const QString &reservedNa return QString(); } +//--------------------------------------------------------------------------------------------------------------------- +QString VPattern::GenerateSuffix() const +{ + const QString suffixBase = GetLabelBase(static_cast(GetIndexActivPP())).toLower(); + const QStringList uniqueNames = data->AllUniqueNames(); + qint32 num = 1; + QString suffix; + for (;;) + { + suffix = QString("%1%2").arg(suffixBase).arg(num); + + for (int i=0; i < uniqueNames.size(); ++i) + { + if (not data->IsUnique(uniqueNames.at(i) + suffix)) + { + break; + } + + if (i == uniqueNames.size()-1) + { + qCDebug(vXML, "Suffix is: %s", qUtf8Printable(suffix)); + return suffix; + } + } + + if (num == INT_MAX) + { + break; + } + ++num; + } + return QString(); +} + //--------------------------------------------------------------------------------------------------------------------- bool VPattern::IsDefCustom() const { diff --git a/src/app/valentina/xml/vpattern.h b/src/app/valentina/xml/vpattern.h index 604da69ff..c23accf08 100644 --- a/src/app/valentina/xml/vpattern.h +++ b/src/app/valentina/xml/vpattern.h @@ -77,6 +77,7 @@ public: void SetIncrementDescription(const QString &name, const QString &text); virtual QString GenerateLabel(const LabelType &type, const QString &reservedName = QString())const Q_DECL_OVERRIDE; + virtual QString GenerateSuffix() const Q_DECL_OVERRIDE; bool IsDefCustom() const; void SetDefCustom(bool value); diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index 0f8c7ebea..a8bc66609 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -1172,6 +1172,28 @@ void VAbstractPattern::InsertTag(const QStringList &tags, const QDomElement &ele SetVersion(); } +//--------------------------------------------------------------------------------------------------------------------- +int VAbstractPattern::GetIndexActivPP() const +{ + const QDomNodeList drawList = elementsByTagName(TagDraw); + + int index = 0; + if (not drawList.isEmpty()) + { + for (int i = 0; i < drawList.size(); ++i) + { + QDomElement node = drawList.at(i).toElement(); + if (node.attribute(AttrName) == nameActivPP) + { + index = i; + break; + } + } + } + + return index; +} + //--------------------------------------------------------------------------------------------------------------------- QStringList VAbstractPattern::ListIncrements() const { diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index 45a9901ad..172f7cce3 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -74,6 +74,7 @@ public: virtual void DecrementReferens(quint32 id) const=0; virtual QString GenerateLabel(const LabelType &type, const QString &reservedName = QString())const=0; + virtual QString GenerateSuffix() const=0; virtual void UpdateToolData(const quint32 &id, VContainer *data)=0; @@ -284,6 +285,7 @@ protected: QDomElement CheckTagExists(const QString &tag); void InsertTag(const QStringList &tags, const QDomElement &element); + int GetIndexActivPP() const; private: Q_DISABLE_COPY(VAbstractPattern) diff --git a/src/libs/vpatterndb/vcontainer.cpp b/src/libs/vpatterndb/vcontainer.cpp index 29d084499..b28ca3120 100644 --- a/src/libs/vpatterndb/vcontainer.cpp +++ b/src/libs/vpatterndb/vcontainer.cpp @@ -56,7 +56,7 @@ Q_LOGGING_CATEGORY(vCon, "v.container") quint32 VContainer::_id = NULL_ID; qreal VContainer::_size = 50; qreal VContainer::_height = 176; -QSet VContainer::uniqueNames = QSet(); +QSet VContainer::uniqueNames = QSet(); //--------------------------------------------------------------------------------------------------------------------- /** @@ -557,6 +557,14 @@ bool VContainer::IsUnique(const QString &name) return (!uniqueNames.contains(name) && !builInFunctions.contains(name)); } +//--------------------------------------------------------------------------------------------------------------------- +QStringList VContainer::AllUniqueNames() +{ + QStringList names = builInFunctions; + names.append(uniqueNames.toList()); + return names; +} + //--------------------------------------------------------------------------------------------------------------------- const Unit *VContainer::GetPatternUnit() const { diff --git a/src/libs/vpatterndb/vcontainer.h b/src/libs/vpatterndb/vcontainer.h index 645c6f3b6..dce71b92f 100644 --- a/src/libs/vpatterndb/vcontainer.h +++ b/src/libs/vpatterndb/vcontainer.h @@ -167,6 +167,7 @@ public: const QHash PlainVariables() const; static bool IsUnique(const QString &name); + static QStringList AllUniqueNames(); const Unit *GetPatternUnit() const; const VTranslateVars *GetTrVars() const; @@ -178,7 +179,7 @@ private: static quint32 _id; static qreal _size; static qreal _height; - static QSet uniqueNames; + static QSet uniqueNames; QSharedDataPointer d; diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 64d412e1c..4f9eff2b2 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -54,7 +54,7 @@ DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QW this->formulaBaseHeightAngle = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); -// ui->lineEditSuffix->setText(/*qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)*/); + ui->lineEditSuffix->setText(qApp->getCurrentDocument()->GenerateSuffix()); timerAngle = new QTimer(this); connect(timerAngle, &QTimer::timeout, this, &DialogRotation::EvalAngle); From 702245f9fbc0c2d4bbe2c2683ae13afb68ed433c Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 May 2016 16:38:04 +0300 Subject: [PATCH 25/41] Check suffix in a dialog. --HG-- branch : feature --- .../vtools/dialogs/tools/dialogrotation.cpp | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 4f9eff2b2..9b93477ff 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -37,6 +37,7 @@ #include "../ifc/xml/vdomdocument.h" #include "../../visualization/line/vistoolrotation.h" #include "../support/dialogeditwrongformula.h" +#include "../qmuparser/qmudef.h" //--------------------------------------------------------------------------------------------------------------------- DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QWidget *parent) @@ -263,18 +264,33 @@ void DialogRotation::SuffixChanged() QLineEdit* edit = qobject_cast(sender()); if (edit) { - const QString name = edit->text(); -// QRegularExpression rx(NameRegExp()); - if (name.isEmpty()/* || (pointName != name && not data->IsUnique(name)) || not rx.match(name).hasMatch()*/) + const QString suffix = edit->text(); + if (suffix.isEmpty()) { flagName = false; ChangeColor(ui->labelSuffix, Qt::red); + CheckState(); + return; } else { - flagName = true; - ChangeColor(ui->labelSuffix, okColor); + QRegularExpression rx(NameRegExp()); + const QStringList uniqueNames = data->AllUniqueNames(); + for (int i=0; i < uniqueNames.size(); ++i) + { + const QString name = uniqueNames.at(i) + suffix; + if (not rx.match(name).hasMatch() || not data->IsUnique(name)) + { + flagName = false; + ChangeColor(ui->labelSuffix, Qt::red); + CheckState(); + return; + } + } } + + flagName = true; + ChangeColor(ui->labelSuffix, okColor); } CheckState(); } From 0052a883a45c62fcf6302bef349c60c6d86ae3a6 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 May 2016 16:44:23 +0300 Subject: [PATCH 26/41] Better way to check suffix. --HG-- branch : feature --- .../core/vtooloptionspropertybrowser.cpp | 14 +++--- .../drawTools/operation/vtoolrotation.cpp | 46 ------------------- .../tools/drawTools/operation/vtoolrotation.h | 1 - 3 files changed, 7 insertions(+), 54 deletions(-) diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp index cdbc80c06..b67b0f1d0 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp +++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp @@ -682,18 +682,18 @@ void VToolOptionsPropertyBrowser::SetOperationSuffix(const QString &suffix) } QRegularExpression rx(NameRegExp()); - const QVector names = item->GetNames(suffix); - for (int i=0; i < names.size(); ++i) + const QStringList uniqueNames = VContainer::AllUniqueNames(); + for (int i=0; i < uniqueNames.size(); ++i) { - if (not rx.match(names.at(i)).hasMatch() || not VContainer::IsUnique(names.at(i))) + const QString name = uniqueNames.at(i) + suffix; + if (not rx.match(name).hasMatch() || not VContainer::IsUnique(name)) { idToProperty[AttrSuffix]->setValue(item->Suffix()); - } - else - { - item->SetSuffix(suffix); + return; } } + + item->SetSuffix(suffix); } else { diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 4837ba21b..1a8a65a83 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -351,52 +351,6 @@ void VToolRotation::ExtractData(VAbstractPattern *doc, const QDomElement &domEle } } -//--------------------------------------------------------------------------------------------------------------------- -QVector VToolRotation::GetNames(const QString &suffix) const -{ - QVector names; - for (int i = 0; i < source.size(); ++i) - { - const QSharedPointer obj = VAbstractTool::data.GetGObject(source.at(i)); - - // This check helps to find missed objects in the switch - Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects were handled."); - -#if defined(Q_CC_GNU) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wswitch-default" -#endif - switch(static_cast(obj->getType())) - { - case GOType::Point: - { - const QSharedPointer point = VAbstractTool::data.GeometricObject(source.at(i)); - names.append(point->name() + suffix); - break; - } - case GOType::Arc: - case GOType::EllipticalArc: - case GOType::Spline: - case GOType::SplinePath: - case GOType::CubicBezier: - case GOType::CubicBezierPath: - { - const QSharedPointer curve = - VAbstractTool::data.GeometricObject(source.at(i)); - names.append(curve->name() + suffix); - break; - } - case GOType::Unknown: - break; - } -#if defined(Q_CC_GNU) -#pragma GCC diagnostic pop -#endif - } - - return names; -} - //--------------------------------------------------------------------------------------------------------------------- QString VToolRotation::getTagName() const { diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h index 9556b7d03..ca6fb4d7f 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h @@ -59,7 +59,6 @@ public: const Document &parse, const Source &typeCreation); static void ExtractData(VAbstractPattern *doc, const QDomElement &domElement, QVector &source, QVector &destination); - QVector GetNames(const QString &suffix) const; static const QString ToolType; static const QString TagItem; static const QString TagSource; From ba76ba2746cb983effec68db80950955110f52a8 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 May 2016 16:57:17 +0300 Subject: [PATCH 27/41] Origin point shouldn't be in a rotation list. --HG-- branch : feature --- .../vtools/dialogs/tools/dialogrotation.cpp | 27 ++++++++++++++++++- .../vtools/dialogs/tools/dialogrotation.h | 3 +++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 9b93477ff..0800ed6fd 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -64,13 +64,15 @@ DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QW FillComboBoxPoints(ui->comboBoxOriginPoint); -// flagName = true; + flagName = true; CheckState(); connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogRotation::SuffixChanged); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogRotation::FXAngle); connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogRotation::AngleChanged); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogRotation::DeployAngleTextEdit); + connect(ui->comboBoxOriginPoint, static_cast(&QComboBox::currentIndexChanged), + this, &DialogRotation::PointChanged); vis = new VisToolRotation(data); } @@ -195,6 +197,11 @@ void DialogRotation::ChosenObject(quint32 id, const SceneObject &type) { if (type == SceneObject::Point) { + if (objects.contains(id)) + { + return; + } + if (SetObject(id, ui->comboBoxOriginPoint, "")) { VisToolRotation *operation = qobject_cast(vis); @@ -332,6 +339,24 @@ void DialogRotation::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::PointChanged() +{ + QColor color = okColor; + if (objects.contains(getCurrentObjectId(ui->comboBoxOriginPoint))) + { + flagError = false; + color = errorColor; + } + else + { + flagError = true; + color = okColor; + } + ChangeColor(ui->labelOriginPoint, color); + CheckState(); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::EvalAngle() { diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.h b/src/libs/vtools/dialogs/tools/dialogrotation.h index 2f30ccfc4..8dce24d2a 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.h +++ b/src/libs/vtools/dialogs/tools/dialogrotation.h @@ -75,6 +75,9 @@ protected: virtual void SaveData() Q_DECL_OVERRIDE; virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; +private slots: + void PointChanged(); + private: Q_DISABLE_COPY(DialogRotation) Ui::DialogRotation *ui; From 19df01be2e1bc133f63bba4e80ec5289e0608194 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 May 2016 19:07:43 +0300 Subject: [PATCH 28/41] Correct selection and hovering. Line can't be selected. --HG-- branch : feature --- src/app/valentina/mainwindow.cpp | 2 +- src/libs/vtools/dialogs/tools/dialogrotation.cpp | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 57d813b59..1b8c4f7f6 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -1013,7 +1013,7 @@ void MainWindow::ToolGroup(bool checked) //--------------------------------------------------------------------------------------------------------------------- void MainWindow::ToolRotation(bool checked) { - ToolSelectGroupObjects(); + ToolSelectOperationObjects(); SetToolButtonWithApply(checked, Tool::Rotation, ":/cursor/rotation_cursor.png", tr("Select one or more objects, Enter - confirm selection"), diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 0800ed6fd..381df8896 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -153,7 +153,7 @@ void DialogRotation::ShowDialog(bool click) stage1 = false; - auto scene = qApp->getCurrentScene(); + VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); SCASSERT(scene != nullptr); scene->clearSelection(); @@ -162,6 +162,14 @@ void DialogRotation::ShowDialog(bool click) operation->SetObjects(objects.toVector()); operation->VisualMode(); + scene->ToggleArcSelection(false); + scene->ToggleSplineSelection(false); + scene->ToggleSplinePathSelection(false); + + scene->ToggleArcHover(false); + scene->ToggleSplineHover(false); + scene->ToggleSplinePathHover(false); + emit ToolTip("Select origin point"); } else if (not stage1 && prepare && click) From fd39c19da065753afeb72180ad557de7c93b5a47 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 May 2016 19:13:48 +0300 Subject: [PATCH 29/41] Show selected objects even before selecting origin point. --HG-- branch : feature --- .../visualization/line/vistoolrotation.cpp | 119 ++++++++++-------- 1 file changed, 64 insertions(+), 55 deletions(-) diff --git a/src/libs/vtools/visualization/line/vistoolrotation.cpp b/src/libs/vtools/visualization/line/vistoolrotation.cpp index e5602e3eb..70173feb3 100644 --- a/src/libs/vtools/visualization/line/vistoolrotation.cpp +++ b/src/libs/vtools/visualization/line/vistoolrotation.cpp @@ -75,9 +75,11 @@ void VisToolRotation::RefreshGeometry() return; } + QSharedPointer origin; + if (object1Id != NULL_ID) { - const QSharedPointer origin = Visualization::data->GeometricObject(object1Id); + origin = Visualization::data->GeometricObject(object1Id); DrawPoint(point, *origin, supportColor2); QLineF rLine; @@ -105,65 +107,69 @@ void VisToolRotation::RefreshGeometry() Visualization::toolTip = tr("Rotating angle = %1°, Shift - sticking angle, " "Mouse click - finish creation").arg(rLine.angle()); + } - int iPoint = -1; - int iCurve = -1; - for (int i = 0; i < objects.size(); ++i) + int iPoint = -1; + int iCurve = -1; + for (int i = 0; i < objects.size(); ++i) + { + const quint32 id = objects.at(i); + const QSharedPointer obj = Visualization::data->GetGObject(id); + + // This check helps to find missed objects in the switch + Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects was handled."); + + switch(static_cast(obj->getType())) { - const quint32 id = objects.at(i); - const QSharedPointer obj = Visualization::data->GetGObject(id); - - // This check helps to find missed objects in the switch - Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 7, "Not all objects was handled."); - - switch(static_cast(obj->getType())) + case GOType::Point: { - case GOType::Point: + const QSharedPointer p = Visualization::data->GeometricObject(id); + + ++iPoint; + QGraphicsEllipseItem *point = GetPoint(iPoint); + DrawPoint(point, *p, supportColor); + + ++iPoint; + point = GetPoint(iPoint); + + if (object1Id != NULL_ID) { - const QSharedPointer p = Visualization::data->GeometricObject(id); - - ++iPoint; - QGraphicsEllipseItem *point = GetPoint(iPoint); - DrawPoint(point, *p, supportColor); - - ++iPoint; - point = GetPoint(iPoint); DrawPoint(point, p->Rotate(*origin, angle), supportColor); - break; } - case GOType::Arc: - { - iCurve = AddCurve(*origin, id, iCurve); - break; - } - case GOType::EllipticalArc: - { - iCurve = AddCurve(*origin, id, iCurve); - break; - } - case GOType::Spline: - { - iCurve = AddCurve(*origin, id, iCurve); - break; - } - case GOType::SplinePath: - { - iCurve = AddCurve(*origin, id, iCurve); - break; - } - case GOType::CubicBezier: - { - iCurve = AddCurve(*origin, id, iCurve); - break; - } - case GOType::CubicBezierPath: - { - iCurve = AddCurve(*origin, id, iCurve); - break; - } - case GOType::Unknown: - break; + break; } + case GOType::Arc: + { + iCurve = AddCurve(*origin, id, iCurve); + break; + } + case GOType::EllipticalArc: + { + iCurve = AddCurve(*origin, id, iCurve); + break; + } + case GOType::Spline: + { + iCurve = AddCurve(*origin, id, iCurve); + break; + } + case GOType::SplinePath: + { + iCurve = AddCurve(*origin, id, iCurve); + break; + } + case GOType::CubicBezier: + { + iCurve = AddCurve(*origin, id, iCurve); + break; + } + case GOType::CubicBezierPath: + { + iCurve = AddCurve(*origin, id, iCurve); + break; + } + case GOType::Unknown: + break; } } } @@ -253,8 +259,11 @@ int VisToolRotation::AddCurve(const QPointF &origin, quint32 id, int i) ++i; path = GetCurve(i); - const Item rotated = curve->Rotate(origin, angle); - DrawPath(path, rotated.GetPath(PathDirection::Hide), mainColor, Qt::SolidLine, Qt::RoundCap); + if (object1Id != NULL_ID) + { + const Item rotated = curve->Rotate(origin, angle); + DrawPath(path, rotated.GetPath(PathDirection::Hide), mainColor, Qt::SolidLine, Qt::RoundCap); + } return i; } From efb852a63e1bfeb14fe6ae1bd49b296e834a80bd Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 May 2016 19:34:34 +0300 Subject: [PATCH 30/41] Call the property browser to update state each time a user call undo/redo command. --HG-- branch : feature --- src/app/valentina/mainwindow.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 1b8c4f7f6..9803a5753 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -130,17 +130,8 @@ MainWindow::MainWindow(QWidget *parent) } CreateActions(); - CreateMenus(); - ToolBarDraws(); - ToolBarStages(); - InitToolButtons(); InitScenes(); - helpLabel = new QLabel(QObject::tr("Create new pattern piece to start working.")); - ui->statusBar->addWidget(helpLabel); - - ToolBarTools(); - doc = new VPattern(pattern, &mode, sceneDraw, sceneDetails); connect(doc, &VPattern::ClearMainWindow, this, &MainWindow::Clear); connect(doc, &VPattern::patternChanged, this, &MainWindow::PatternWasModified); @@ -150,6 +141,17 @@ MainWindow::MainWindow(QWidget *parent) connect(doc, &VPattern::SetCurrentPP, this, &MainWindow::GlobalChangePP); qApp->setCurrentDocument(doc); + InitDocksContain(); + CreateMenus(); + ToolBarDraws(); + ToolBarStages(); + InitToolButtons(); + + helpLabel = new QLabel(QObject::tr("Create new pattern piece to start working.")); + ui->statusBar->addWidget(helpLabel); + + ToolBarTools(); + connect(qApp->getUndoStack(), &QUndoStack::cleanChanged, this, &MainWindow::PatternWasModified); InitAutoSave(); @@ -157,7 +159,6 @@ MainWindow::MainWindow(QWidget *parent) ui->toolBox->setCurrentIndex(0); ReadSettings(); - InitDocksContain(); setCurrentFile(""); WindowsLocale(); @@ -3371,12 +3372,14 @@ void MainWindow::CreateMenus() //Add Undo/Redo actions. undoAction = qApp->getUndoStack()->createUndoAction(this, tr("&Undo")); + connect(undoAction, &QAction::triggered, toolOptions, &VToolOptionsPropertyBrowser::RefreshOptions); undoAction->setShortcuts(QKeySequence::Undo); undoAction->setIcon(QIcon::fromTheme("edit-undo")); ui->menuPatternPiece->insertAction(ui->actionLast_tool, undoAction); ui->toolBarTools->addAction(undoAction); redoAction = qApp->getUndoStack()->createRedoAction(this, tr("&Redo")); + connect(redoAction, &QAction::triggered, toolOptions, &VToolOptionsPropertyBrowser::RefreshOptions); redoAction->setShortcuts(QKeySequence::Redo); redoAction->setIcon(QIcon::fromTheme("edit-redo")); ui->menuPatternPiece->insertAction(ui->actionLast_tool, redoAction); From 0266b27b3691d45f44e436e0bd820de83ebbf9d2 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 13:11:50 +0300 Subject: [PATCH 31/41] Save information about curve color inside geometric objects. Help to copy this data to copy objects after rotation. --HG-- branch : feature --- .../core/vtooloptionspropertybrowser.cpp | 21 ------------ src/app/valentina/xml/vpattern.cpp | 13 ++------ src/libs/vgeometry/vabstractcurve.cpp | 12 +++++++ src/libs/vgeometry/vabstractcurve.h | 3 ++ src/libs/vgeometry/vabstractcurve_p.h | 8 +++-- .../vtools/dialogs/tools/dialogcutarc.cpp | 13 -------- src/libs/vtools/dialogs/tools/dialogcutarc.h | 3 -- src/libs/vtools/dialogs/tools/dialogcutarc.ui | 12 +------ .../vtools/dialogs/tools/dialogcutspline.cpp | 13 -------- .../vtools/dialogs/tools/dialogcutspline.h | 3 -- .../vtools/dialogs/tools/dialogcutspline.ui | 12 +------ .../dialogs/tools/dialogcutsplinepath.cpp | 13 -------- .../dialogs/tools/dialogcutsplinepath.h | 3 -- .../dialogs/tools/dialogcutsplinepath.ui | 18 +--------- .../drawTools/toolcurve/vabstractspline.cpp | 33 +++++++++++++++---- .../drawTools/toolcurve/vabstractspline.h | 3 ++ .../tools/drawTools/toolcurve/vtoolarc.cpp | 12 +++---- .../tools/drawTools/toolcurve/vtoolarc.h | 2 +- .../toolcurve/vtoolarcwithlength.cpp | 13 ++++---- .../drawTools/toolcurve/vtoolarcwithlength.h | 10 +++--- .../drawTools/toolcurve/vtoolcubicbezier.cpp | 11 ++++--- .../drawTools/toolcurve/vtoolcubicbezier.h | 4 +-- .../toolcurve/vtoolcubicbezierpath.cpp | 11 ++++--- .../toolcurve/vtoolcubicbezierpath.h | 2 +- .../tools/drawTools/toolcurve/vtoolspline.cpp | 21 ++++++------ .../tools/drawTools/toolcurve/vtoolspline.h | 2 +- .../drawTools/toolcurve/vtoolsplinepath.cpp | 18 +++++----- .../drawTools/toolcurve/vtoolsplinepath.h | 10 +++--- .../toolsinglepoint/toolcut/vtoolcut.cpp | 12 +------ .../toolsinglepoint/toolcut/vtoolcut.h | 3 +- .../toolsinglepoint/toolcut/vtoolcutarc.cpp | 19 ++++------- .../toolsinglepoint/toolcut/vtoolcutarc.h | 5 ++- .../toolcut/vtoolcutspline.cpp | 16 +++------ .../toolsinglepoint/toolcut/vtoolcutspline.h | 5 ++- .../toolcut/vtoolcutsplinepath.cpp | 15 +++------ .../toolcut/vtoolcutsplinepath.h | 6 ++-- .../toollinepoint/vtoollinepoint.cpp | 17 +++++++++- .../toollinepoint/vtoollinepoint.h | 21 ++++++++---- src/libs/vtools/tools/drawTools/vdrawtool.cpp | 18 +--------- src/libs/vtools/tools/drawTools/vdrawtool.h | 6 ---- src/libs/vtools/tools/drawTools/vtoolline.cpp | 9 ++++- src/libs/vtools/tools/drawTools/vtoolline.h | 7 +++- 42 files changed, 184 insertions(+), 274 deletions(-) diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp index b67b0f1d0..c55328f53 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp +++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp @@ -990,9 +990,6 @@ void VToolOptionsPropertyBrowser::ChangeDataToolCutArc(VProperty *property) case 4: // AttrLength i->SetFormula(value.value()); break; - case 27: // AttrTypeColor - i->SetLineColor(value.toString()); - break; default: qWarning()<<"Unknown property type. id = "<SetFormula(value.value()); break; - case 27: // AttrTypeColor - i->SetLineColor(value.toString()); - break; default: qWarning()<<"Unknown property type. id = "<SetFormula(value.value()); break; - case 27: // AttrTypeColor - i->SetLineColor(value.toString()); - break; default: qWarning()<<"Unknown property type. id = "<GetFormula(), AttrLength); - AddPropertyLineColor(i, tr("Color"), VAbstractTool::ColorsList(), AttrColor); } //--------------------------------------------------------------------------------------------------------------------- @@ -1717,7 +1707,6 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolCutSpline(QGraphicsItem *item) AddPropertyObjectName(i, tr("Point label")); AddPropertyFormula(tr("Length"), i->GetFormula(), AttrLength); - AddPropertyLineColor(i, tr("Color"), VAbstractTool::ColorsList(), AttrColor); } //--------------------------------------------------------------------------------------------------------------------- @@ -1729,7 +1718,6 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolCutSplinePath(QGraphicsItem *it AddPropertyObjectName(i, tr("Point label")); AddPropertyFormula(tr("Length"), i->GetFormula(), AttrLength); - AddPropertyLineColor(i, tr("Color"), VAbstractTool::ColorsList(), AttrColor); } //--------------------------------------------------------------------------------------------------------------------- @@ -2135,9 +2123,6 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolCutArc() QVariant valueFormula; valueFormula.setValue(i->GetFormula()); idToProperty[AttrLength]->setValue(valueFormula); - - const qint32 index = VLineColorProperty::IndexOfColor(VAbstractTool::ColorsList(), i->GetLineColor()); - idToProperty[AttrColor]->setValue(index); } //--------------------------------------------------------------------------------------------------------------------- @@ -2150,9 +2135,6 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolCutSpline() QVariant valueFormula; valueFormula.setValue(i->GetFormula()); idToProperty[AttrLength]->setValue(valueFormula); - - const qint32 index = VLineColorProperty::IndexOfColor(VAbstractTool::ColorsList(), i->GetLineColor()); - idToProperty[AttrColor]->setValue(index); } //--------------------------------------------------------------------------------------------------------------------- @@ -2165,9 +2147,6 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolCutSplinePath() QVariant valueFormula; valueFormula.setValue(i->GetFormula()); idToProperty[AttrLength]->setValue(valueFormula); - - const qint32 index = VLineColorProperty::IndexOfColor(VAbstractTool::ColorsList(), i->GetLineColor()); - idToProperty[AttrColor]->setValue(index); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index 1bfdd01af..6f19e9272 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -1412,11 +1412,8 @@ void VPattern::ParseToolCutSpline(VMainGraphicsScene *scene, QDomElement &domEle const QString formula = GetParametrString(domElement, AttrLength, "0"); QString f = formula;//need for saving fixed formula; const quint32 splineId = GetParametrUInt(domElement, VToolCutSpline::AttrSpline, NULL_ID_STR); - const QString color = GetParametrString(domElement, AttrColor, - ColorBlack); - VToolCutSpline::Create(id, name, f, splineId, mx, my, color, scene, this, data, parse, - Source::FromFile); + VToolCutSpline::Create(id, name, f, splineId, mx, my, scene, this, data, parse, Source::FromFile); //Rewrite attribute formula. Need for situation when we have wrong formula. if (f != formula) { @@ -1457,11 +1454,8 @@ void VPattern::ParseToolCutSplinePath(VMainGraphicsScene *scene, QDomElement &do QString f = formula;//need for saving fixed formula; const quint32 splinePathId = GetParametrUInt(domElement, VToolCutSplinePath::AttrSplinePath, NULL_ID_STR); - const QString color = GetParametrString(domElement, AttrColor, - ColorBlack); - VToolCutSplinePath::Create(id, name, f, splinePathId, mx, my, color, scene, this, data, parse, - Source::FromFile); + VToolCutSplinePath::Create(id, name, f, splinePathId, mx, my, scene, this, data, parse, Source::FromFile); //Rewrite attribute formula. Need for situation when we have wrong formula. if (f != formula) { @@ -1501,9 +1495,8 @@ void VPattern::ParseToolCutArc(VMainGraphicsScene *scene, QDomElement &domElemen const QString formula = GetParametrString(domElement, AttrLength, "0"); QString f = formula;//need for saving fixed formula; const quint32 arcId = GetParametrUInt(domElement, AttrArc, NULL_ID_STR); - const QString color = GetParametrString(domElement, AttrColor, ColorBlack); - VToolCutArc::Create(id, name, f, arcId, mx, my, color, scene, this, data, parse, Source::FromFile); + VToolCutArc::Create(id, name, f, arcId, mx, my, scene, this, data, parse, Source::FromFile); //Rewrite attribute formula. Need for situation when we have wrong formula. if (f != formula) { diff --git a/src/libs/vgeometry/vabstractcurve.cpp b/src/libs/vgeometry/vabstractcurve.cpp index ec79e104c..cca2f7a61 100644 --- a/src/libs/vgeometry/vabstractcurve.cpp +++ b/src/libs/vgeometry/vabstractcurve.cpp @@ -244,6 +244,18 @@ void VAbstractCurve::SetDuplicate(quint32 number) CreateName(); } +//--------------------------------------------------------------------------------------------------------------------- +QString VAbstractCurve::GetColor() const +{ + return d->color; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractCurve::SetColor(const QString &color) +{ + d->color = color; +} + //--------------------------------------------------------------------------------------------------------------------- QVector VAbstractCurve::CurveIntersectLine(const QVector &points, const QLineF &line) { diff --git a/src/libs/vgeometry/vabstractcurve.h b/src/libs/vgeometry/vabstractcurve.h index 1b3f5c8a5..19ad0331b 100644 --- a/src/libs/vgeometry/vabstractcurve.h +++ b/src/libs/vgeometry/vabstractcurve.h @@ -69,6 +69,9 @@ public: quint32 GetDuplicate() const; void SetDuplicate(quint32 number); + QString GetColor() const; + void SetColor(const QString &color); + static QVector CurveIntersectLine(const QVector &points, const QLineF &line); virtual QString NameForHistory(const QString &toolName) const=0; diff --git a/src/libs/vgeometry/vabstractcurve_p.h b/src/libs/vgeometry/vabstractcurve_p.h index 0bcdbc26c..3d5920bb5 100644 --- a/src/libs/vgeometry/vabstractcurve_p.h +++ b/src/libs/vgeometry/vabstractcurve_p.h @@ -31,6 +31,8 @@ #include +#include "../ifc/ifcdef.h" + #ifdef Q_CC_GNU #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" @@ -41,11 +43,11 @@ class VAbstractCurveData : public QSharedData public: VAbstractCurveData () - : duplicate(0) + : duplicate(0), color(ColorBlack) {} VAbstractCurveData(const VAbstractCurveData &curve) - : QSharedData(curve), duplicate(curve.duplicate) + : QSharedData(curve), duplicate(curve.duplicate), color(curve.color) {} virtual ~VAbstractCurveData(); @@ -53,6 +55,8 @@ public: /** @brief duplicate helps create unique name for curves that connects the same start and finish points. */ quint32 duplicate; + QString color; + private: VAbstractCurveData &operator=(const VAbstractCurveData &) Q_DECL_EQ_DELETE; }; diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp index 03f0cc852..936175f1a 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp @@ -62,7 +62,6 @@ DialogCutArc::DialogCutArc(const VContainer *data, const quint32 &toolId, QWidge CheckState(); FillComboBoxArcs(ui->comboBoxArc); - FillComboBoxLineColors(ui->comboBoxColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogCutArc::FXLength); connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogCutArc::NamePointChanged); @@ -170,18 +169,6 @@ void DialogCutArc::setArcId(const quint32 &value) path->setObject1Id(value); } -//--------------------------------------------------------------------------------------------------------------------- -QString DialogCutArc::GetColor() const -{ - return GetComboBoxCurrentData(ui->comboBoxColor); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogCutArc::SetColor(const QString &value) -{ - ChangeCurrentData(ui->comboBoxColor, value); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetFormula set string with formula length diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.h b/src/libs/vtools/dialogs/tools/dialogcutarc.h index fd219a3f3..28ecd4479 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.h +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.h @@ -54,9 +54,6 @@ public: quint32 getArcId() const; void setArcId(const quint32 &value); - - QString GetColor() const; - void SetColor(const QString &value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) Q_DECL_OVERRIDE; /** diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.ui b/src/libs/vtools/dialogs/tools/dialogcutarc.ui index 76379aeab..823af7217 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.ui +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.ui @@ -7,7 +7,7 @@ 0 0 412 - 222 + 189 @@ -246,16 +246,6 @@ - - - - Color: - - - - - - diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp index a52257a6c..2ab83fc38 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp @@ -61,7 +61,6 @@ DialogCutSpline::DialogCutSpline(const VContainer *data, const quint32 &toolId, CheckState(); FillComboBoxSplines(ui->comboBoxSpline); - FillComboBoxLineColors(ui->comboBoxColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogCutSpline::FXLength); connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogCutSpline::NamePointChanged); @@ -126,18 +125,6 @@ void DialogCutSpline::setSplineId(const quint32 &value) path->setObject1Id(value); } -//--------------------------------------------------------------------------------------------------------------------- -QString DialogCutSpline::GetColor() const -{ - return GetComboBoxCurrentData(ui->comboBoxColor); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogCutSpline::SetColor(const QString &value) -{ - ChangeCurrentData(ui->comboBoxColor, value); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief ChoosedObject gets id and type of selected object. Save right data and ignore wrong. diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.h b/src/libs/vtools/dialogs/tools/dialogcutspline.h index ff472d927..e52d505f0 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.h +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.h @@ -53,9 +53,6 @@ public: quint32 getSplineId() const; void setSplineId(const quint32 &value); - - QString GetColor() const; - void SetColor(const QString &value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) Q_DECL_OVERRIDE; /** diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.ui b/src/libs/vtools/dialogs/tools/dialogcutspline.ui index 805d4f727..4f792a299 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.ui +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.ui @@ -7,7 +7,7 @@ 0 0 412 - 222 + 189 @@ -246,16 +246,6 @@ - - - - Color: - - - - - - diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp index 0b94b5fad..116ba4a24 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp @@ -61,7 +61,6 @@ DialogCutSplinePath::DialogCutSplinePath(const VContainer *data, const quint32 & CheckState(); FillComboBoxSplinesPath(ui->comboBoxSplinePath); - FillComboBoxLineColors(ui->comboBoxColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogCutSplinePath::FXLength); connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogCutSplinePath::NamePointChanged); @@ -126,18 +125,6 @@ void DialogCutSplinePath::setSplinePathId(const quint32 &value) path->setObject1Id(value); } -//--------------------------------------------------------------------------------------------------------------------- -QString DialogCutSplinePath::GetColor() const -{ - return GetComboBoxCurrentData(ui->comboBoxColor); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogCutSplinePath::SetColor(const QString &value) -{ - ChangeCurrentData(ui->comboBoxColor, value); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief ChoosedObject gets id and type of selected object. Save right data and ignore wrong. diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h index 167d74eae..5a667e16c 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h @@ -53,9 +53,6 @@ public: quint32 getSplinePathId() const; void setSplinePathId(const quint32 &value); - - QString GetColor() const; - void SetColor(const QString &value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) Q_DECL_OVERRIDE; /** diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.ui b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.ui index 9fd940a71..e0dc93b76 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.ui +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.ui @@ -7,7 +7,7 @@ 0 0 412 - 222 + 189 @@ -246,22 +246,6 @@ - - - - - 0 - 0 - - - - Color: - - - - - - diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp index 1339e5dec..5a50181b7 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp @@ -65,7 +65,8 @@ void VAbstractSpline::Disable(bool disable, const QString &namePP) { enabled = !CorrectDisable(disable, namePP); this->setEnabled(enabled); - this->setPen(QPen(CorrectColor(lineColor), + const QSharedPointer curve = VAbstractTool::data.GeometricObject(id); + this->setPen(QPen(CorrectColor(curve->GetColor()), qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor, Qt::SolidLine, Qt::RoundCap)); emit setEnabledPoint(enabled); @@ -122,7 +123,8 @@ void VAbstractSpline::SetFactor(qreal factor) void VAbstractSpline::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event); - this->setPen(QPen(CorrectColor(lineColor), + const QSharedPointer curve = VAbstractTool::data.GeometricObject(id); + this->setPen(QPen(CorrectColor(curve->GetColor()), qApp->toPixel(WidthMainLine(*VAbstractTool::data.GetPatternUnit()))/factor, Qt::SolidLine, Qt::RoundCap)); this->setPath(ToolPath(PathDirection::Show)); @@ -139,7 +141,8 @@ void VAbstractSpline::hoverEnterEvent(QGraphicsSceneHoverEvent *event) void VAbstractSpline::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event); - this->setPen(QPen(CorrectColor(lineColor), + const QSharedPointer curve = VAbstractTool::data.GeometricObject(id); + this->setPen(QPen(CorrectColor(curve->GetColor()), qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); if (detailsMode) { @@ -231,7 +234,7 @@ QPainterPath VAbstractSpline::ToolPath(PathDirection direction) const //--------------------------------------------------------------------------------------------------------------------- void VAbstractSpline::ReadToolAttributes(const QDomElement &domElement) { - lineColor = doc->GetParametrString(domElement, AttrColor, ColorBlack); + Q_UNUSED(domElement) } //--------------------------------------------------------------------------------------------------------------------- @@ -239,7 +242,8 @@ void VAbstractSpline::SaveOptions(QDomElement &tag, QSharedPointer &ob { VDrawTool::SaveOptions(tag, obj); - doc->SetAttribute(tag, AttrColor, lineColor); + const QSharedPointer curve = qSharedPointerCast(obj); + doc->SetAttribute(tag, AttrColor, curve->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -317,7 +321,8 @@ void VAbstractSpline::setEnabled(bool enabled) QGraphicsPathItem::setEnabled(enabled); if (enabled) { - setPen(QPen(QColor(lineColor), + const QSharedPointer curve = VAbstractTool::data.GeometricObject(id); + setPen(QPen(QColor(curve->GetColor()), qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); } else @@ -327,6 +332,22 @@ void VAbstractSpline::setEnabled(bool enabled) } } +//--------------------------------------------------------------------------------------------------------------------- +QString VAbstractSpline::GetLineColor() const +{ + const QSharedPointer curve = VAbstractTool::data.GeometricObject(id); + return curve->GetColor(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractSpline::SetLineColor(const QString &value) +{ + QSharedPointer curve = VAbstractTool::data.GeometricObject(id); + curve->SetColor(value); + QSharedPointer obj = qSharedPointerCast(curve); + SaveOption(obj); +} + //--------------------------------------------------------------------------------------------------------------------- QString VAbstractSpline::name() const { diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h index 656e65b50..148d499b0 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h @@ -50,6 +50,9 @@ public: void setEnabled(bool enabled); + QString GetLineColor() const; + void SetLineColor(const QString &value); + QString name() const; virtual void GroupVisibility(quint32 object, bool visible) Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.cpp index 9ae207749..11b059691 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.cpp @@ -47,13 +47,11 @@ const QString VToolArc::ToolType = QStringLiteral("simple"); * @param typeCreation way we create this tool. * @param parent parent object */ -VToolArc::VToolArc(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, +VToolArc::VToolArc(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, QGraphicsItem *parent) :VAbstractSpline(doc, data, id, parent) { sceneType = SceneObject::Arc; - lineColor = color; this->setPath(ToolPath()); this->setPen(QPen(Qt::black, qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); @@ -76,7 +74,7 @@ void VToolArc::setDialog() dialogTool->SetF1(arc->GetFormulaF1()); dialogTool->SetF2(arc->GetFormulaF2()); dialogTool->SetRadius(arc->GetFormulaRadius()); - dialogTool->SetColor(lineColor); + dialogTool->SetColor(arc->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -133,6 +131,7 @@ VToolArc* VToolArc::Create(const quint32 _id, const quint32 ¢er, QString &ra const VPointF c = *data->GeometricObject(center); VArc *arc = new VArc(c, calcRadius, radius, calcF1, f1, calcF2, f2 ); + arc->SetColor(color); quint32 id = _id; if (typeCreation == Source::FromGui) { @@ -151,7 +150,7 @@ VToolArc* VToolArc::Create(const quint32 _id, const quint32 ¢er, QString &ra VDrawTool::AddRecord(id, Tool::Arc, doc); if (parse == Document::FullParse) { - VToolArc *toolArc = new VToolArc(doc, data, id, color, typeCreation); + VToolArc *toolArc = new VToolArc(doc, data, id, typeCreation); scene->addItem(toolArc); InitArcToolConnections(scene, toolArc); doc->AddTool(id, toolArc); @@ -364,7 +363,8 @@ void VToolArc::SetVisualization() */ void VToolArc::RefreshGeometry() { - this->setPen(QPen(CorrectColor(lineColor), + const QSharedPointer arc = VAbstractTool::data.GeometricObject(id); + this->setPen(QPen(CorrectColor(arc->GetColor()), qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); this->setPath(ToolPath()); diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h index ac513f7c7..27e040b45 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarc.h @@ -73,7 +73,7 @@ protected: private: Q_DISABLE_COPY(VToolArc) - VToolArc(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, const Source &typeCreation, + VToolArc(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void RefreshGeometry() Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp index f872705a3..a57d12830 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp @@ -39,12 +39,11 @@ const QString VToolArcWithLength::ToolType = QStringLiteral("arcWithLength"); //--------------------------------------------------------------------------------------------------------------------- -VToolArcWithLength::VToolArcWithLength(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, QGraphicsItem *parent) +VToolArcWithLength::VToolArcWithLength(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, + QGraphicsItem *parent) :VAbstractSpline(doc, data, id, parent) { sceneType = SceneObject::Arc; - lineColor = color; this->setPath(ToolPath()); this->setPen(QPen(Qt::black, qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); @@ -64,7 +63,7 @@ void VToolArcWithLength::setDialog() dialogTool->SetF1(arc->GetFormulaF1()); dialogTool->SetLength(arc->GetFormulaLength()); dialogTool->SetRadius(arc->GetFormulaRadius()); - dialogTool->SetColor(lineColor); + dialogTool->SetColor(arc->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -102,6 +101,7 @@ VToolArcWithLength *VToolArcWithLength::Create(const quint32 _id, const quint32 const VPointF c = *data->GeometricObject(center); VArc *arc = new VArc(calcLength, length, c, calcRadius, radius, calcF1, f1); + arc->SetColor(color); quint32 id = _id; if (typeCreation == Source::FromGui) { @@ -120,7 +120,7 @@ VToolArcWithLength *VToolArcWithLength::Create(const quint32 _id, const quint32 VDrawTool::AddRecord(id, Tool::ArcWithLength, doc); if (parse == Document::FullParse) { - VToolArcWithLength *toolArc = new VToolArcWithLength(doc, data, id, color, typeCreation); + VToolArcWithLength *toolArc = new VToolArcWithLength(doc, data, id, typeCreation); scene->addItem(toolArc); InitArcToolConnections(scene, toolArc); doc->AddTool(id, toolArc); @@ -317,7 +317,8 @@ void VToolArcWithLength::SetVisualization() //--------------------------------------------------------------------------------------------------------------------- void VToolArcWithLength::RefreshGeometry() { - this->setPen(QPen(CorrectColor(lineColor), + QSharedPointer arc = VAbstractTool::data.GeometricObject(id); + this->setPen(QPen(CorrectColor(arc->GetColor()), qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); this->setPath(ToolPath()); diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h index 13387a86c..ee0d718e5 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.h @@ -41,9 +41,9 @@ public: static VToolArcWithLength* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolArcWithLength* Create(const quint32 _id, const quint32 ¢er, QString &radius, QString &f1, - QString &length, const QString &color, VMainGraphicsScene *scene, - VAbstractPattern *doc, - VContainer *data, const Document &parse, const Source &typeCreation); + QString &length, const QString &color, VMainGraphicsScene *scene, + VAbstractPattern *doc, VContainer *data, const Document &parse, + const Source &typeCreation); static const QString ToolType; virtual int type() const Q_DECL_OVERRIDE {return Type;} @@ -72,8 +72,8 @@ protected: private: Q_DISABLE_COPY(VToolArcWithLength) - VToolArcWithLength(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, QGraphicsItem * parent = nullptr); + VToolArcWithLength(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, + QGraphicsItem * parent = nullptr); virtual void RefreshGeometry() Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.cpp index 35f000c6a..ab3e81eb6 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.cpp @@ -35,12 +35,11 @@ const QString VToolCubicBezier::ToolType = QStringLiteral("cubicBezier"); //--------------------------------------------------------------------------------------------------------------------- -VToolCubicBezier::VToolCubicBezier(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, +VToolCubicBezier::VToolCubicBezier(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, QGraphicsItem *parent) :VAbstractSpline(doc, data, id, parent) { sceneType = SceneObject::Spline; - lineColor = color; this->setPen(QPen(Qt::black, qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); this->setPath(ToolPath()); @@ -62,7 +61,7 @@ void VToolCubicBezier::setDialog() SCASSERT(dialogTool != nullptr); const auto spl = VAbstractTool::data.GeometricObject(id); dialogTool->SetSpline(*spl); - dialogTool->SetColor(lineColor); + dialogTool->SetColor(spl->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -89,6 +88,7 @@ VToolCubicBezier *VToolCubicBezier::Create(const quint32 _id, VCubicBezier *spli const Document &parse, const Source &typeCreation) { quint32 id = _id; + spline->SetColor(color); if (typeCreation == Source::FromGui) { id = data->AddGObject(spline); @@ -106,7 +106,7 @@ VToolCubicBezier *VToolCubicBezier::Create(const quint32 _id, VCubicBezier *spli VDrawTool::AddRecord(id, Tool::CubicBezier, doc); if (parse == Document::FullParse) { - auto _spl = new VToolCubicBezier(doc, data, id, color, typeCreation); + auto _spl = new VToolCubicBezier(doc, data, id, typeCreation); scene->addItem(_spl); InitSplineToolConnections(scene, _spl); doc->AddTool(id, _spl); @@ -209,7 +209,8 @@ void VToolCubicBezier::SetVisualization() //--------------------------------------------------------------------------------------------------------------------- void VToolCubicBezier::RefreshGeometry() { - this->setPen(QPen(CorrectColor(lineColor), + const QSharedPointer spl = VAbstractTool::data.GeometricObject(id); + this->setPen(QPen(CorrectColor(spl->GetColor()), qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); if (isHovered || detailsMode) { diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.h index aac2d5dcd..53be60915 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.h @@ -61,8 +61,8 @@ protected: private: Q_DISABLE_COPY(VToolCubicBezier) - VToolCubicBezier(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, QGraphicsItem * parent = nullptr); + VToolCubicBezier(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, + QGraphicsItem * parent = nullptr); virtual void RefreshGeometry() Q_DECL_OVERRIDE; void SetSplineAttributes(QDomElement &domElement, const VCubicBezier &spl); diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.cpp index a5febd61e..db00f4325 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.cpp @@ -33,12 +33,11 @@ const QString VToolCubicBezierPath::ToolType = QStringLiteral("cubicBezierPath"); //--------------------------------------------------------------------------------------------------------------------- -VToolCubicBezierPath::VToolCubicBezierPath(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, +VToolCubicBezierPath::VToolCubicBezierPath(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, QGraphicsItem *parent) : VAbstractSpline(doc, data, id, parent) { sceneType = SceneObject::SplinePath; - lineColor = color; this->setPath(ToolPath()); this->setPen(QPen(Qt::black, qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); @@ -60,7 +59,7 @@ void VToolCubicBezierPath::setDialog() SCASSERT(dialogTool != nullptr); const QSharedPointer splPath = VAbstractTool::data.GeometricObject(id); dialogTool->SetPath(*splPath); - dialogTool->SetColor(lineColor); + dialogTool->SetColor(splPath->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -90,6 +89,7 @@ VToolCubicBezierPath *VToolCubicBezierPath::Create(const quint32 _id, VCubicBezi const Document &parse, const Source &typeCreation) { quint32 id = _id; + path->SetColor(color); if (typeCreation == Source::FromGui) { id = data->AddGObject(path); @@ -107,7 +107,7 @@ VToolCubicBezierPath *VToolCubicBezierPath::Create(const quint32 _id, VCubicBezi VDrawTool::AddRecord(id, Tool::CubicBezierPath, doc); if (parse == Document::FullParse) { - VToolCubicBezierPath *spl = new VToolCubicBezierPath(doc, data, id, color, typeCreation); + VToolCubicBezierPath *spl = new VToolCubicBezierPath(doc, data, id, typeCreation); scene->addItem(spl); InitSplinePathToolConnections(scene, spl); doc->AddTool(id, spl); @@ -214,7 +214,8 @@ void VToolCubicBezierPath::RefreshGeometry() { isHovered || detailsMode ? setPath(ToolPath(PathDirection::Show)) : setPath(ToolPath()); - this->setPen(QPen(CorrectColor(lineColor), + QSharedPointer splPath = VAbstractTool::data.GeometricObject(id); + this->setPen(QPen(CorrectColor(splPath->GetColor()), qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); SetVisualization(); diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.h index 9bb438426..7761f8dee 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.h @@ -63,7 +63,7 @@ protected: private: Q_DISABLE_COPY(VToolCubicBezierPath) - VToolCubicBezierPath(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, + VToolCubicBezierPath(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, QGraphicsItem * parent = nullptr); virtual void RefreshGeometry() Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp index 79438841d..b074d6260 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp @@ -52,13 +52,11 @@ const QString VToolSpline::OldToolType = QStringLiteral("simple"); * @param typeCreation way we create this tool. * @param parent parent object. */ -VToolSpline::VToolSpline(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, +VToolSpline::VToolSpline(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, QGraphicsItem *parent) :VAbstractSpline(doc, data, id, parent), oldPosition() { sceneType = SceneObject::Spline; - lineColor = color; this->setPen(QPen(Qt::black, qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); this->setFlag(QGraphicsItem::ItemIsMovable, true); @@ -114,7 +112,7 @@ void VToolSpline::setDialog() SCASSERT(dialogTool != nullptr); const auto spl = VAbstractTool::data.GeometricObject(id); dialogTool->SetSpline(*spl); - dialogTool->SetColor(lineColor); + dialogTool->SetColor(spl->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -132,8 +130,9 @@ VToolSpline* VToolSpline::Create(DialogTool *dialog, VMainGraphicsScene *scene, auto dialogTool = qobject_cast(dialog); SCASSERT(dialogTool != nullptr); - auto spl = Create(0, new VSpline(dialogTool->GetSpline()), dialogTool->GetColor(), scene, doc, data, - Document::FullParse, Source::FromGui); + VSpline *spline = new VSpline(dialogTool->GetSpline()); + + auto spl = Create(0, spline, dialogTool->GetColor(), scene, doc, data, Document::FullParse, Source::FromGui); if (spl != nullptr) { @@ -147,7 +146,6 @@ VToolSpline* VToolSpline::Create(DialogTool *dialog, VMainGraphicsScene *scene, * @brief Create help create tool. * @param _id tool id, 0 if tool doesn't exist yet. * @param spline spline. - * @param color spline color. * @param scene pointer to scene. * @param doc dom document container. * @param data container with variables. @@ -160,6 +158,7 @@ VToolSpline* VToolSpline::Create(const quint32 _id, VSpline *spline, const QStri const Source &typeCreation) { quint32 id = _id; + spline->SetColor(color); if (typeCreation == Source::FromGui) { id = data->AddGObject(spline); @@ -177,7 +176,7 @@ VToolSpline* VToolSpline::Create(const quint32 _id, VSpline *spline, const QStri VDrawTool::AddRecord(id, Tool::Spline, doc); if (parse == Document::FullParse) { - auto _spl = new VToolSpline(doc, data, id, color, typeCreation); + auto _spl = new VToolSpline(doc, data, id, typeCreation); scene->addItem(_spl); InitSplineToolConnections(scene, _spl); doc->AddTool(id, _spl); @@ -508,7 +507,9 @@ void VToolSpline::RefreshGeometry() point->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false); } - this->setPen(QPen(CorrectColor(lineColor), + const auto spl = VAbstractTool::data.GeometricObject(id); + + this->setPen(QPen(CorrectColor(spl->GetColor()), qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); if (isHovered || detailsMode) { @@ -522,8 +523,6 @@ void VToolSpline::RefreshGeometry() controlPoints[0]->blockSignals(true); controlPoints[1]->blockSignals(true); - const auto spl = VAbstractTool::data.GeometricObject(id); - { const bool freeAngle1 = qmu::QmuTokenParser::IsSingle(spl->GetStartAngleFormula()); const bool freeLength1 = qmu::QmuTokenParser::IsSingle(spl->GetC1LengthFormula()); diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.h index 183cbdf47..344e9542f 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.h @@ -78,7 +78,7 @@ private: Q_DISABLE_COPY(VToolSpline) QPointF oldPosition; - VToolSpline (VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, const Source &typeCreation, + VToolSpline (VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, QGraphicsItem * parent = nullptr ); bool IsMovable() const; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp index f51dee600..917b2757c 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp @@ -51,14 +51,13 @@ const QString VToolSplinePath::OldToolType = QStringLiteral("path"); * @param typeCreation way we create this tool. * @param parent parent object. */ -VToolSplinePath::VToolSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, QGraphicsItem *parent) +VToolSplinePath::VToolSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, + QGraphicsItem *parent) : VAbstractSpline(doc, data, id, parent), oldPosition(), splIndex(-1) { sceneType = SceneObject::SplinePath; - lineColor = color; this->setPath(ToolPath()); this->setPen(QPen(Qt::black, qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); @@ -117,7 +116,7 @@ void VToolSplinePath::setDialog() SCASSERT(dialogTool != nullptr); const QSharedPointer splPath = VAbstractTool::data.GeometricObject(id); dialogTool->SetPath(*splPath); - dialogTool->SetColor(lineColor); + dialogTool->SetColor(splPath->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -135,12 +134,12 @@ VToolSplinePath* VToolSplinePath::Create(DialogTool *dialog, VMainGraphicsScene DialogSplinePath *dialogTool = qobject_cast(dialog); SCASSERT(dialogTool != nullptr); VSplinePath *path = new VSplinePath(dialogTool->GetPath()); - const QString color = dialogTool->GetColor(); for (qint32 i = 0; i < path->CountPoints(); ++i) { doc->IncrementReferens((*path)[i].P().getIdTool()); } - VToolSplinePath* spl = Create(0, path, color, scene, doc, data, Document::FullParse, Source::FromGui); + VToolSplinePath* spl = Create(0, path, dialogTool->GetColor(), scene, doc, data, Document::FullParse, + Source::FromGui); if (spl != nullptr) { spl->dialog=dialogTool; @@ -164,6 +163,7 @@ VToolSplinePath* VToolSplinePath::Create(const quint32 _id, VSplinePath *path, c const Document &parse, const Source &typeCreation) { quint32 id = _id; + path->SetColor(color); if (typeCreation == Source::FromGui) { id = data->AddGObject(path); @@ -181,7 +181,7 @@ VToolSplinePath* VToolSplinePath::Create(const quint32 _id, VSplinePath *path, c VDrawTool::AddRecord(id, Tool::SplinePath, doc); if (parse == Document::FullParse) { - VToolSplinePath *spl = new VToolSplinePath(doc, data, id, color, typeCreation); + VToolSplinePath *spl = new VToolSplinePath(doc, data, id, typeCreation); scene->addItem(spl); InitSplinePathToolConnections(scene, spl); doc->AddTool(id, spl); @@ -631,10 +631,10 @@ void VToolSplinePath::RefreshGeometry() this->setPath(ToolPath()); } - this->setPen(QPen(CorrectColor(lineColor), + const auto splPath = VAbstractTool::data.GeometricObject(id); + this->setPen(QPen(CorrectColor(splPath->GetColor()), qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); - const auto splPath = VAbstractTool::data.GeometricObject(id); for (qint32 i = 1; i<=splPath->CountSubSpl(); ++i) { const qint32 j = i*2; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.h index bb37395f2..b6e963332 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.h @@ -47,10 +47,8 @@ public: static VToolSplinePath *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolSplinePath *Create(const quint32 _id, VSplinePath *path, const QString &color, - VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, - const Document &parse, - const Source &typeCreation); - + VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, + const Document &parse, const Source &typeCreation); static VToolSplinePath *Create(const quint32 _id, const QVector &points, QVector &a1, QVector &a2, QVector &l1, QVector &l2, const QString &color, VMainGraphicsScene *scene, VAbstractPattern *doc, @@ -101,8 +99,8 @@ private: QPointF oldPosition; int splIndex; - VToolSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &color, - const Source &typeCreation, QGraphicsItem * parent = nullptr); + VToolSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, const Source &typeCreation, + QGraphicsItem *parent = nullptr); bool IsMovable(int index) const; virtual void RefreshGeometry() Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcut.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcut.cpp index d78c488e3..4082a8e76 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcut.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcut.cpp @@ -32,12 +32,10 @@ //--------------------------------------------------------------------------------------------------------------------- VToolCut::VToolCut(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &curveCutId, const QString &color, QGraphicsItem *parent) + const quint32 &curveCutId, QGraphicsItem *parent) :VToolSinglePoint(doc, data, id, parent), formula(formula), curveCutId(curveCutId), detailsMode(false) { Q_ASSERT_X(curveCutId != 0, Q_FUNC_INFO, "curveCutId == 0"); //-V654 //-V712 - - lineColor = color; } //--------------------------------------------------------------------------------------------------------------------- @@ -137,11 +135,3 @@ void VToolCut::FullUpdateCurveFromFile(const QString &attrCurve) curveCutId = domElement.attribute(attrCurve, "").toUInt(); } } - -//--------------------------------------------------------------------------------------------------------------------- -void VToolCut::SaveOptions(QDomElement &tag, QSharedPointer &obj) -{ - VToolSinglePoint::SaveOptions(tag, obj); - - doc->SetAttribute(tag, AttrColor, lineColor); -} diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcut.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcut.h index 8e580a250..a44a7a72d 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcut.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcut.h @@ -39,7 +39,7 @@ class VToolCut : public VToolSinglePoint Q_OBJECT public: VToolCut(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &curveCutId, const QString &color, QGraphicsItem * parent = nullptr); + const quint32 &curveCutId, QGraphicsItem * parent = nullptr); virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Tool::Cut)}; @@ -63,7 +63,6 @@ protected: void RefreshGeometry(); virtual void RemoveReferens() Q_DECL_OVERRIDE; void FullUpdateCurveFromFile(const QString &attrCurve); - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) Q_DECL_OVERRIDE; template void ShowToolVisualization(bool show); 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 181a464e5..b01ce84ec 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp @@ -44,14 +44,12 @@ const QString VToolCutArc::ToolType = QStringLiteral("cutArc"); * @param id object id in container. * @param formula string with formula length first arc. * @param arcId id arc in data container. - * @param color arc color. * @param typeCreation way we create this tool. * @param parent parent object. */ VToolCutArc::VToolCutArc(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &arcId, const QString &color, const Source &typeCreation, - QGraphicsItem * parent) - :VToolCut(doc, data, id, formula, arcId, color, parent) + const quint32 &arcId, const Source &typeCreation, QGraphicsItem * parent) + :VToolCut(doc, data, id, formula, arcId, parent) { ToolCreation(typeCreation); } @@ -69,7 +67,6 @@ void VToolCutArc::setDialog() dialogTool->SetFormula(formula); dialogTool->setArcId(curveCutId); dialogTool->SetPointName(point->name()); - dialogTool->SetColor(lineColor); } //--------------------------------------------------------------------------------------------------------------------- @@ -88,8 +85,7 @@ VToolCutArc* VToolCutArc::Create(DialogTool *dialog, VMainGraphicsScene *scene, const QString pointName = dialogTool->getPointName(); QString formula = dialogTool->GetFormula(); const quint32 arcId = dialogTool->getArcId(); - const QString color = dialogTool->GetColor(); - VToolCutArc* point = Create(0, pointName, formula, arcId, 5, 10, color, scene, doc, data, Document::FullParse, + VToolCutArc* point = Create(0, pointName, formula, arcId, 5, 10, scene, doc, data, Document::FullParse, Source::FromGui); if (point != nullptr) { @@ -114,9 +110,8 @@ VToolCutArc* VToolCutArc::Create(DialogTool *dialog, VMainGraphicsScene *scene, * @param typeCreation way we create this tool. */ VToolCutArc* VToolCutArc::Create(const quint32 _id, const QString &pointName, QString &formula, const quint32 &arcId, - const qreal &mx, const qreal &my, const QString &color, VMainGraphicsScene *scene, - VAbstractPattern *doc, VContainer *data, const Document &parse, - const Source &typeCreation) + const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VAbstractPattern *doc, + VContainer *data, const Document &parse, const Source &typeCreation) { const QSharedPointer arc = data->GeometricObject(arcId); @@ -155,7 +150,7 @@ VToolCutArc* VToolCutArc::Create(const quint32 _id, const QString &pointName, QS VDrawTool::AddRecord(id, Tool::CutArc, doc); if (parse == Document::FullParse) { - VToolCutArc *point = new VToolCutArc(doc, data, id, formula, arcId, color, typeCreation); + VToolCutArc *point = new VToolCutArc(doc, data, id, formula, arcId, typeCreation); scene->addItem(point); InitToolConnections(scene, point); doc->AddTool(id, point); @@ -201,7 +196,6 @@ void VToolCutArc::SaveDialog(QDomElement &domElement) doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); doc->SetAttribute(domElement, AttrArc, QString().setNum(dialogTool->getArcId())); - doc->SetAttribute(domElement, AttrColor, dialogTool->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -219,7 +213,6 @@ void VToolCutArc::ReadToolAttributes(const QDomElement &domElement) { formula = doc->GetParametrString(domElement, AttrLength, ""); curveCutId = doc->GetParametrUInt(domElement, AttrArc, NULL_ID_STR); - lineColor = doc->GetParametrString(domElement, AttrColor, ColorBlack); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.h index fbed4e8fa..de0140e92 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.h @@ -41,7 +41,7 @@ public: virtual void setDialog() Q_DECL_OVERRIDE; static VToolCutArc* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolCutArc* Create(const quint32 _id, const QString &pointName, QString &formula, const quint32 &arcId, - const qreal &mx, const qreal &my, const QString &color, VMainGraphicsScene *scene, + const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation); static const QString ToolType; @@ -58,8 +58,7 @@ private: Q_DISABLE_COPY(VToolCutArc) VToolCutArc(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &arcId, const QString &color, const Source &typeCreation, - QGraphicsItem * parent = nullptr); + const quint32 &arcId, const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLCUTARC_H 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 2f959f3bc..4bcea1f65 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp @@ -45,14 +45,12 @@ const QString VToolCutSpline::AttrSpline = QStringLiteral("spline"); * @param id object id in container. * @param formula string with formula length first spline. * @param splineId id spline in data container. - * @param color spline color. * @param typeCreation way we create this tool. * @param parent parent object. */ VToolCutSpline::VToolCutSpline(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &splineId, const QString &color, const Source &typeCreation, - QGraphicsItem *parent) - :VToolCut(doc, data, id, formula, splineId, color, parent) + const quint32 &splineId, const Source &typeCreation, QGraphicsItem *parent) + :VToolCut(doc, data, id, formula, splineId, parent) { ToolCreation(typeCreation); } @@ -70,7 +68,6 @@ void VToolCutSpline::setDialog() dialogTool->SetFormula(formula); dialogTool->setSplineId(curveCutId); dialogTool->SetPointName(point->name()); - dialogTool->SetColor(lineColor); } //--------------------------------------------------------------------------------------------------------------------- @@ -90,8 +87,7 @@ VToolCutSpline* VToolCutSpline::Create(DialogTool *dialog, VMainGraphicsScene *s const QString pointName = dialogTool->getPointName(); QString formula = dialogTool->GetFormula(); const quint32 splineId = dialogTool->getSplineId(); - const QString color = dialogTool->GetColor(); - VToolCutSpline* point = Create(0, pointName, formula, splineId, 5, 10, color, scene, doc, data, Document::FullParse, + VToolCutSpline* point = Create(0, pointName, formula, splineId, 5, 10, scene, doc, data, Document::FullParse, Source::FromGui); if (point != nullptr) { @@ -116,7 +112,7 @@ VToolCutSpline* VToolCutSpline::Create(DialogTool *dialog, VMainGraphicsScene *s * @param typeCreation way we create this tool. */ VToolCutSpline* VToolCutSpline::Create(const quint32 _id, const QString &pointName, QString &formula, - const quint32 &splineId, const qreal &mx, const qreal &my, const QString &color, + const quint32 &splineId, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation) { @@ -152,7 +148,7 @@ VToolCutSpline* VToolCutSpline::Create(const quint32 _id, const QString &pointNa VDrawTool::AddRecord(id, Tool::CutSpline, doc); if (parse == Document::FullParse) { - VToolCutSpline *point = new VToolCutSpline(doc, data, id, formula, splineId, color, typeCreation); + VToolCutSpline *point = new VToolCutSpline(doc, data, id, formula, splineId, typeCreation); scene->addItem(point); InitToolConnections(scene, point); doc->AddTool(id, point); @@ -198,7 +194,6 @@ void VToolCutSpline::SaveDialog(QDomElement &domElement) doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); doc->SetAttribute(domElement, AttrSpline, QString().setNum(dialogTool->getSplineId())); - doc->SetAttribute(domElement, AttrColor, dialogTool->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -216,7 +211,6 @@ void VToolCutSpline::ReadToolAttributes(const QDomElement &domElement) { formula = doc->GetParametrString(domElement, AttrLength, ""); curveCutId = doc->GetParametrUInt(domElement, AttrSpline, NULL_ID_STR); - lineColor = doc->GetParametrString(domElement, AttrColor, ColorBlack); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.h index dd49e5667..7f614aadf 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.h @@ -42,7 +42,7 @@ public: static VToolCutSpline *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolCutSpline *Create(const quint32 _id, const QString &pointName, QString &formula, - const quint32 &splineId, const qreal &mx, const qreal &my, const QString &color, + const quint32 &splineId, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation); @@ -61,8 +61,7 @@ private: Q_DISABLE_COPY(VToolCutSpline) VToolCutSpline(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &splineId, const QString &color, const Source &typeCreation, - QGraphicsItem * parent = nullptr); + const quint32 &splineId, const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLCUTSPLINE_H 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 dec424071..df8264140 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp @@ -45,14 +45,13 @@ const QString VToolCutSplinePath::AttrSplinePath = QStringLiteral("splinePath"); * @param id object id in container. * @param formula string with formula length first splinePath. * @param splinePathId id splinePath (we cut this splinePath) in data container. - * @param color spline path color. * @param typeCreation way we create this tool. * @param parent parent object. */ VToolCutSplinePath::VToolCutSplinePath(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, const quint32 &splinePathId, - const QString &color, const Source &typeCreation, QGraphicsItem *parent) - :VToolCut(doc, data, id, formula, splinePathId, color, parent) + const Source &typeCreation, QGraphicsItem *parent) + :VToolCut(doc, data, id, formula, splinePathId, parent) { ToolCreation(typeCreation); } @@ -70,7 +69,6 @@ void VToolCutSplinePath::setDialog() dialogTool->SetFormula(formula); dialogTool->setSplinePathId(curveCutId); dialogTool->SetPointName(point->name()); - dialogTool->SetColor(lineColor); } //--------------------------------------------------------------------------------------------------------------------- @@ -90,8 +88,7 @@ VToolCutSplinePath* VToolCutSplinePath::Create(DialogTool *dialog, VMainGraphics const QString pointName = dialogTool->getPointName(); QString formula = dialogTool->GetFormula(); const quint32 splinePathId = dialogTool->getSplinePathId(); - const QString color = dialogTool->GetColor(); - VToolCutSplinePath* point = Create(0, pointName, formula, splinePathId, 5, 10, color, scene, doc, data, + VToolCutSplinePath* point = Create(0, pointName, formula, splinePathId, 5, 10, scene, doc, data, Document::FullParse, Source::FromGui); if (point != nullptr) { @@ -117,7 +114,7 @@ VToolCutSplinePath* VToolCutSplinePath::Create(DialogTool *dialog, VMainGraphics */ VToolCutSplinePath* VToolCutSplinePath::Create(const quint32 _id, const QString &pointName, QString &formula, const quint32 &splinePathId, const qreal &mx, const qreal &my, - const QString &color, VMainGraphicsScene *scene, VAbstractPattern *doc, + VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation) { const auto splPath = data->GeometricObject(splinePathId); @@ -160,7 +157,7 @@ VToolCutSplinePath* VToolCutSplinePath::Create(const quint32 _id, const QString VDrawTool::AddRecord(id, Tool::CutSplinePath, doc); if (parse == Document::FullParse) { - VToolCutSplinePath *point = new VToolCutSplinePath(doc, data, id, formula, splinePathId, color, typeCreation); + VToolCutSplinePath *point = new VToolCutSplinePath(doc, data, id, formula, splinePathId, typeCreation); scene->addItem(point); InitToolConnections(scene, point); doc->AddTool(id, point); @@ -282,7 +279,6 @@ void VToolCutSplinePath::SaveDialog(QDomElement &domElement) doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); doc->SetAttribute(domElement, AttrSplinePath, QString().setNum(dialogTool->getSplinePathId())); - doc->SetAttribute(domElement, AttrColor, dialogTool->GetColor()); } //--------------------------------------------------------------------------------------------------------------------- @@ -300,7 +296,6 @@ void VToolCutSplinePath::ReadToolAttributes(const QDomElement &domElement) { formula = doc->GetParametrString(domElement, AttrLength, ""); curveCutId = doc->GetParametrUInt(domElement, AttrSplinePath, NULL_ID_STR); - lineColor = doc->GetParametrString(domElement, AttrColor, ColorBlack); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.h index 09b4a1459..8b5dbb593 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.h @@ -47,8 +47,7 @@ public: VContainer *data); static VToolCutSplinePath *Create(const quint32 _id, const QString &pointName, QString &formula, const quint32 &splinePathId, const qreal &mx, const qreal &my, - const QString &color, VMainGraphicsScene *scene, VAbstractPattern *doc, - VContainer *data, + VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation); static const QString ToolType; static const QString AttrSplinePath; @@ -69,8 +68,7 @@ private: Q_DISABLE_COPY(VToolCutSplinePath) VToolCutSplinePath(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &formula, - const quint32 &splinePathId, const QString &color, const Source &typeCreation, - QGraphicsItem * parent = nullptr); + const quint32 &splinePathId, const Source &typeCreation, QGraphicsItem * parent = nullptr); }; #endif // VTOOLCUTSPLINEPATH_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp index e5396e600..85405cf8e 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp @@ -46,7 +46,7 @@ VToolLinePoint::VToolLinePoint(VAbstractPattern *doc, VContainer *data, const qu const QString &lineColor, const QString &formula, const quint32 &basePointId, const qreal &angle, QGraphicsItem *parent) :VToolSinglePoint(doc, data, id, parent), formulaLength(formula), angle(angle), basePointId(basePointId), - mainLine(nullptr) + mainLine(nullptr), lineColor(ColorBlack) { this->typeLine = typeLine; this->lineColor = lineColor; @@ -145,6 +145,21 @@ void VToolLinePoint::SetAngle(const qreal &value) SaveOption(obj); } +//--------------------------------------------------------------------------------------------------------------------- +QString VToolLinePoint::GetLineColor() const +{ + return lineColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolLinePoint::SetLineColor(const QString &value) +{ + lineColor = value; + + QSharedPointer obj = VAbstractTool::data.GetGObject(id); + SaveOption(obj); +} + //--------------------------------------------------------------------------------------------------------------------- quint32 VToolLinePoint::GetBasePointId() const { diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.h index 225691dd7..e9ca4a01b 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.h @@ -45,14 +45,18 @@ public: virtual ~VToolLinePoint() Q_DECL_OVERRIDE; virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Tool::LinePoint)}; - VFormula GetFormulaLength() const; - void SetFormulaLength(const VFormula &value); - quint32 GetBasePointId() const; - void SetBasePointId(const quint32 &value); + VFormula GetFormulaLength() const; + void SetFormulaLength(const VFormula &value); - qreal GetAngle() const; - void SetAngle(const qreal &value); + quint32 GetBasePointId() const; + void SetBasePointId(const quint32 &value); + + qreal GetAngle() const; + void SetAngle(const qreal &value); + + QString GetLineColor() const; + void SetLineColor(const QString &value); public slots: virtual void SetFactor(qreal factor) Q_DECL_OVERRIDE; @@ -66,11 +70,14 @@ protected: qreal angle; /** @brief basePointId id base line point. */ - quint32 basePointId; + quint32 basePointId; /** @brief mainLine line item. */ QGraphicsLineItem *mainLine; + /** @brief lineColor color of a line. */ + QString lineColor; + virtual void RefreshGeometry(); virtual void RemoveReferens() Q_DECL_OVERRIDE; virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/tools/drawTools/vdrawtool.cpp b/src/libs/vtools/tools/drawTools/vdrawtool.cpp index 96dec91e1..bd4596537 100644 --- a/src/libs/vtools/tools/drawTools/vdrawtool.cpp +++ b/src/libs/vtools/tools/drawTools/vdrawtool.cpp @@ -47,7 +47,7 @@ qreal VDrawTool::factor = 1; */ VDrawTool::VDrawTool(VAbstractPattern *doc, VContainer *data, quint32 id, QObject *parent) :VAbstractTool(doc, data, id, parent), nameActivDraw(doc->GetNameActivPP()), - dialog(nullptr), typeLine(TypeLineLine), lineColor(ColorBlack), enabled(true) + dialog(nullptr), typeLine(TypeLineLine), enabled(true) { connect(this->doc, &VAbstractPattern::ChangedActivPP, this, &VDrawTool::ChangedActivDraw); connect(this->doc, &VAbstractPattern::ChangedNameDraw, this, &VDrawTool::ChangedNameDraw); @@ -384,19 +384,3 @@ void VDrawTool::SetTypeLine(const QString &value) QSharedPointer obj = VAbstractTool::data.GetGObject(id); SaveOption(obj); } - -//--------------------------------------------------------------------------------------------------------------------- -QString VDrawTool::GetLineColor() const -{ - return lineColor; -} - - -//--------------------------------------------------------------------------------------------------------------------- -void VDrawTool::SetLineColor(const QString &value) -{ - lineColor = value; - - QSharedPointer obj = VAbstractTool::data.GetGObject(id); - SaveOption(obj); -} diff --git a/src/libs/vtools/tools/drawTools/vdrawtool.h b/src/libs/vtools/tools/drawTools/vdrawtool.h index 76e8adfa3..3d6588eb4 100644 --- a/src/libs/vtools/tools/drawTools/vdrawtool.h +++ b/src/libs/vtools/tools/drawTools/vdrawtool.h @@ -58,9 +58,6 @@ public: QString getLineType() const; virtual void SetTypeLine(const QString &value); - QString GetLineColor() const; - virtual void SetLineColor(const QString &value); - signals: void ChangedToolSelection(bool selected, quint32 object, quint32 tool); @@ -88,9 +85,6 @@ protected: /** @brief typeLine line type. */ QString typeLine; - /** @brief lineColor color line or curve, but not a point. */ - QString lineColor; - bool enabled; void AddToCalculation(const QDomElement &domElement); diff --git a/src/libs/vtools/tools/drawTools/vtoolline.cpp b/src/libs/vtools/tools/drawTools/vtoolline.cpp index 7b3604f8a..2839801dd 100644 --- a/src/libs/vtools/tools/drawTools/vtoolline.cpp +++ b/src/libs/vtools/tools/drawTools/vtoolline.cpp @@ -48,7 +48,8 @@ VToolLine::VToolLine(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 firstPoint, quint32 secondPoint, const QString &typeLine, const QString &lineColor, const Source &typeCreation, QGraphicsItem *parent) - :VDrawTool(doc, data, id), QGraphicsLineItem(parent), firstPoint(firstPoint), secondPoint(secondPoint) + :VDrawTool(doc, data, id), QGraphicsLineItem(parent), firstPoint(firstPoint), secondPoint(secondPoint), + lineColor(ColorBlack) { this->typeLine = typeLine; this->lineColor = lineColor; @@ -459,6 +460,12 @@ void VToolLine::SetTypeLine(const QString &value) SaveOption(obj); } +//--------------------------------------------------------------------------------------------------------------------- +QString VToolLine::GetLineColor() const +{ + return lineColor; +} + //--------------------------------------------------------------------------------------------------------------------- void VToolLine::SetLineColor(const QString &value) { diff --git a/src/libs/vtools/tools/drawTools/vtoolline.h b/src/libs/vtools/tools/drawTools/vtoolline.h index 0e06e9777..ebbf96e74 100644 --- a/src/libs/vtools/tools/drawTools/vtoolline.h +++ b/src/libs/vtools/tools/drawTools/vtoolline.h @@ -55,10 +55,12 @@ public: quint32 GetSecondPoint() const; void SetSecondPoint(const quint32 &value); + QString GetLineColor() const; + void SetLineColor(const QString &value); + virtual void ShowVisualization(bool show) Q_DECL_OVERRIDE; virtual void SetTypeLine(const QString &value) Q_DECL_OVERRIDE; - virtual void SetLineColor(const QString &value) Q_DECL_OVERRIDE; virtual void GroupVisibility(quint32 object, bool visible) Q_DECL_OVERRIDE; public slots: virtual void FullUpdateFromFile() Q_DECL_OVERRIDE; @@ -89,6 +91,9 @@ private: /** @brief secondPoint id second line point. */ quint32 secondPoint; + /** @brief lineColor color of a line. */ + QString lineColor; + VToolLine(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 firstPoint, quint32 secondPoint, const QString &typeLine, const QString &lineColor, const Source &typeCreation, QGraphicsItem * parent = nullptr); From 60ad8d2fd12995a489ac337751aac0f86acc904f Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 13:16:33 +0300 Subject: [PATCH 32/41] Fixed test. Wrong conversion to QPointF. --HG-- branch : feature --- src/test/ValentinaTest/tst_vspline.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/ValentinaTest/tst_vspline.cpp b/src/test/ValentinaTest/tst_vspline.cpp index dd78a6754..3b4098dd1 100644 --- a/src/test/ValentinaTest/tst_vspline.cpp +++ b/src/test/ValentinaTest/tst_vspline.cpp @@ -326,8 +326,8 @@ void TST_VSpline::TestLengthByPoint_data() QTest::newRow("Point on spline") << spl << p << testLength; QTest::newRow("Wrong point") << spl << QPointF(-10000, -10000) << -1.0; - QTest::newRow("First point") << spl << p1 << 0.0; - QTest::newRow("Last point") << spl << p4 << length; + QTest::newRow("First point") << spl << p1.toQPointF() << 0.0; + QTest::newRow("Last point") << spl << p4.toQPointF() << length; } //--------------------------------------------------------------------------------------------------------------------- From d7b4cbf8604e21067e7f57b01ebb438e9d813a70 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 15:01:49 +0300 Subject: [PATCH 33/41] Remove all children before update. --HG-- branch : feature --- src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 1a8a65a83..2e8dcb0df 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -764,6 +764,8 @@ void VToolRotation::SaveOptions(QDomElement &tag, QSharedPointer &obj) doc->SetAttribute(tag, AttrAngle, formulaAngle); doc->SetAttribute(tag, AttrSuffix, suffix); + doc->RemoveAllChildren(tag); + QDomElement tagObjects = doc->createElement(TagSource); for (int i = 0; i < source.size(); ++i) { From 948d3848683191ec13f8b8d5f0154cf18896f15b Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 15:13:38 +0300 Subject: [PATCH 34/41] Fixed moving labels. --HG-- branch : feature --- .../tools/drawTools/operation/vtoolrotation.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 2e8dcb0df..9269ea5eb 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -725,12 +725,6 @@ void VToolRotation::LabelChangePosition(const QPointF &pos, quint32 labelId) SCASSERT(item != nullptr); ChangePosition(item, labelId, pos); } - else - { - VSimpleCurve *item = qobject_cast(obj); - SCASSERT(item != nullptr); - ChangePosition(item, labelId, pos); - } } } @@ -814,10 +808,7 @@ void VToolRotation::DoChangePosition(quint32 id, qreal mx, qreal my) VSimplePoint *item = qobject_cast(rObjects.value(id)); SCASSERT(item != nullptr); - item->blockSignals(true); - item->setPos(QPointF(mx, my)); - item->blockSignals(false); - item->RefreshLine(); + item->RefreshGeometry(*point); } } From 123434f806f33780f9a5c01563517c7597274216 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 15:23:37 +0300 Subject: [PATCH 35/41] Mark with different color base objects and rotated objects. --HG-- branch : feature --- .../visualization/line/vistoolrotation.cpp | 20 +++++++++---------- .../visualization/line/vistoolrotation.h | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/libs/vtools/visualization/line/vistoolrotation.cpp b/src/libs/vtools/visualization/line/vistoolrotation.cpp index 70173feb3..4d3736ec8 100644 --- a/src/libs/vtools/visualization/line/vistoolrotation.cpp +++ b/src/libs/vtools/visualization/line/vistoolrotation.cpp @@ -126,11 +126,11 @@ void VisToolRotation::RefreshGeometry() const QSharedPointer p = Visualization::data->GeometricObject(id); ++iPoint; - QGraphicsEllipseItem *point = GetPoint(iPoint); - DrawPoint(point, *p, supportColor); + QGraphicsEllipseItem *point = GetPoint(iPoint, supportColor2); + DrawPoint(point, *p, supportColor2); ++iPoint; - point = GetPoint(iPoint); + point = GetPoint(iPoint, supportColor); if (object1Id != NULL_ID) { @@ -216,7 +216,7 @@ void VisToolRotation::VisualMode(const quint32 &pointId) } //--------------------------------------------------------------------------------------------------------------------- -QGraphicsEllipseItem *VisToolRotation::GetPoint(quint32 i) +QGraphicsEllipseItem *VisToolRotation::GetPoint(quint32 i, const QColor &color) { if (not points.isEmpty() && static_cast(points.size() - 1) >= i) { @@ -224,7 +224,7 @@ QGraphicsEllipseItem *VisToolRotation::GetPoint(quint32 i) } else { - auto point = InitPoint(supportColor, this); + auto point = InitPoint(color, this); points.append(point); return point; } @@ -232,7 +232,7 @@ QGraphicsEllipseItem *VisToolRotation::GetPoint(quint32 i) } //--------------------------------------------------------------------------------------------------------------------- -QGraphicsPathItem *VisToolRotation::GetCurve(quint32 i) +QGraphicsPathItem *VisToolRotation::GetCurve(quint32 i, const QColor &color) { if (not curves.isEmpty() && static_cast(curves.size() - 1) >= i) { @@ -254,15 +254,15 @@ int VisToolRotation::AddCurve(const QPointF &origin, quint32 id, int i) const QSharedPointer curve = Visualization::data->GeometricObject(id); ++i; - QGraphicsPathItem *path = GetCurve(i); - DrawPath(path, curve->GetPath(PathDirection::Hide), mainColor, Qt::SolidLine, Qt::RoundCap); + QGraphicsPathItem *path = GetCurve(i, supportColor2); + DrawPath(path, curve->GetPath(PathDirection::Hide), supportColor2, Qt::SolidLine, Qt::RoundCap); ++i; - path = GetCurve(i); + path = GetCurve(i, supportColor); if (object1Id != NULL_ID) { const Item rotated = curve->Rotate(origin, angle); - DrawPath(path, rotated.GetPath(PathDirection::Hide), mainColor, Qt::SolidLine, Qt::RoundCap); + DrawPath(path, rotated.GetPath(PathDirection::Hide), supportColor, Qt::SolidLine, Qt::RoundCap); } return i; diff --git a/src/libs/vtools/visualization/line/vistoolrotation.h b/src/libs/vtools/visualization/line/vistoolrotation.h index e7a660e8e..42005ea5d 100644 --- a/src/libs/vtools/visualization/line/vistoolrotation.h +++ b/src/libs/vtools/visualization/line/vistoolrotation.h @@ -62,8 +62,8 @@ private: QVector points; QVector curves; - QGraphicsEllipseItem * GetPoint(quint32 i); - QGraphicsPathItem * GetCurve(quint32 i); + QGraphicsEllipseItem * GetPoint(quint32 i, const QColor &color); + QGraphicsPathItem * GetCurve(quint32 i, const QColor &color); template int AddCurve(const QPointF &origin, quint32 id, int i); From f046624b368c1d3a95e39327daa3aa210259d618 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 15:40:55 +0300 Subject: [PATCH 36/41] Clean a file. Tool Cut doesn't need color attribute anymore. --HG-- branch : feature --- src/libs/ifc/xml/vpatternconverter.cpp | 21 +++++++++++++++++++++ src/libs/ifc/xml/vpatternconverter.h | 2 ++ 2 files changed, 23 insertions(+) diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index 961d1251c..5068702ef 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -318,6 +318,7 @@ void VPatternConverter::ToV0_3_0() void VPatternConverter::ToV0_3_1() { SetVersion(QStringLiteral("0.3.1")); + RemoveColorToolCutV0_3_1(); Save(); } @@ -782,6 +783,26 @@ void VPatternConverter::ConvertMeasurementsToV0_2_1() ConvertPathPointExpressionsToV0_2_0(names); } +//--------------------------------------------------------------------------------------------------------------------- +void VPatternConverter::RemoveColorToolCutV0_3_1() +{ + const QDomNodeList list = elementsByTagName("point"); + for (int i=0; i < list.size(); ++i) + { + QDomElement element = list.at(i).toElement(); + if (not element.isNull()) + { + const QString type = element.attribute(QStringLiteral("type")); + if (type == QStringLiteral("cutArc") || + type == QStringLiteral("cutSpline") || + type == QStringLiteral("cutSplinePath")) + { + element.removeAttribute(QStringLiteral("color")); + } + } + } +} + //--------------------------------------------------------------------------------------------------------------------- QString VPatternConverter::MUnitV0_1_4() const { diff --git a/src/libs/ifc/xml/vpatternconverter.h b/src/libs/ifc/xml/vpatternconverter.h index 96bdcd864..55be6f196 100644 --- a/src/libs/ifc/xml/vpatternconverter.h +++ b/src/libs/ifc/xml/vpatternconverter.h @@ -78,6 +78,8 @@ private: void ConvertMeasurementsToV0_2_1(); + void RemoveColorToolCutV0_3_1(); + QSet FixIncrementsToV0_2_0(); QString FixIncrementInFormulaToV0_2_0(const QString &formula, const QSet &names); void FixPointExpressionsToV0_2_0(const QSet &names); From 7665402d6478d3994242044ef61e29118d1abb73 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 15:48:56 +0300 Subject: [PATCH 37/41] Fixed crash. --HG-- branch : feature --- src/libs/vtools/visualization/line/vistoolrotation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/vtools/visualization/line/vistoolrotation.cpp b/src/libs/vtools/visualization/line/vistoolrotation.cpp index 4d3736ec8..9ff3edf06 100644 --- a/src/libs/vtools/visualization/line/vistoolrotation.cpp +++ b/src/libs/vtools/visualization/line/vistoolrotation.cpp @@ -75,7 +75,7 @@ void VisToolRotation::RefreshGeometry() return; } - QSharedPointer origin; + QSharedPointer origin = QSharedPointer(new VPointF()); if (object1Id != NULL_ID) { From e2a059287eeae33f387fea3146d82edc64619051 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 15:56:50 +0300 Subject: [PATCH 38/41] Update an angle during processing editing rotation. --HG-- branch : feature --- .../visualization/line/vistoolrotation.cpp | 24 +++++++++++-------- .../visualization/line/vistoolrotation.h | 2 +- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/libs/vtools/visualization/line/vistoolrotation.cpp b/src/libs/vtools/visualization/line/vistoolrotation.cpp index 9ff3edf06..8f2c329f2 100644 --- a/src/libs/vtools/visualization/line/vistoolrotation.cpp +++ b/src/libs/vtools/visualization/line/vistoolrotation.cpp @@ -77,6 +77,8 @@ void VisToolRotation::RefreshGeometry() QSharedPointer origin = QSharedPointer(new VPointF()); + qreal tempAngle = 0; + if (object1Id != NULL_ID) { origin = Visualization::data->GeometricObject(object1Id); @@ -93,20 +95,22 @@ void VisToolRotation::RefreshGeometry() } rLine.setP2(Ray(*origin, rLine.angle())); + tempAngle = rLine.angle(); } else { rLine = QLineF(*origin, Ray(*origin, angle)); + tempAngle = angle; } DrawLine(this, rLine, supportColor2, Qt::DashLine); DrawLine(xAxis, QLineF(*origin, Ray(*origin, 0)), supportColor2, Qt::DashLine); - VArc arc(*origin, ToPixel(DefPointRadius/*mm*/*2, Unit::Mm), 0, rLine.angle()); + VArc arc(*origin, ToPixel(DefPointRadius/*mm*/*2, Unit::Mm), 0, tempAngle); DrawPath(angleArc, arc.GetPath(PathDirection::Hide), supportColor2, Qt::SolidLine, Qt::RoundCap); Visualization::toolTip = tr("Rotating angle = %1°, Shift - sticking angle, " - "Mouse click - finish creation").arg(rLine.angle()); + "Mouse click - finish creation").arg(tempAngle); } int iPoint = -1; @@ -134,38 +138,38 @@ void VisToolRotation::RefreshGeometry() if (object1Id != NULL_ID) { - DrawPoint(point, p->Rotate(*origin, angle), supportColor); + DrawPoint(point, p->Rotate(*origin, tempAngle), supportColor); } break; } case GOType::Arc: { - iCurve = AddCurve(*origin, id, iCurve); + iCurve = AddCurve(tempAngle, *origin, id, iCurve); break; } case GOType::EllipticalArc: { - iCurve = AddCurve(*origin, id, iCurve); + iCurve = AddCurve(tempAngle, *origin, id, iCurve); break; } case GOType::Spline: { - iCurve = AddCurve(*origin, id, iCurve); + iCurve = AddCurve(tempAngle, *origin, id, iCurve); break; } case GOType::SplinePath: { - iCurve = AddCurve(*origin, id, iCurve); + iCurve = AddCurve(tempAngle, *origin, id, iCurve); break; } case GOType::CubicBezier: { - iCurve = AddCurve(*origin, id, iCurve); + iCurve = AddCurve(tempAngle, *origin, id, iCurve); break; } case GOType::CubicBezierPath: { - iCurve = AddCurve(*origin, id, iCurve); + iCurve = AddCurve(tempAngle, *origin, id, iCurve); break; } case GOType::Unknown: @@ -249,7 +253,7 @@ QGraphicsPathItem *VisToolRotation::GetCurve(quint32 i, const QColor &color) //--------------------------------------------------------------------------------------------------------------------- template -int VisToolRotation::AddCurve(const QPointF &origin, quint32 id, int i) +int VisToolRotation::AddCurve(qreal angle, const QPointF &origin, quint32 id, int i) { const QSharedPointer curve = Visualization::data->GeometricObject(id); diff --git a/src/libs/vtools/visualization/line/vistoolrotation.h b/src/libs/vtools/visualization/line/vistoolrotation.h index 42005ea5d..66030149c 100644 --- a/src/libs/vtools/visualization/line/vistoolrotation.h +++ b/src/libs/vtools/visualization/line/vistoolrotation.h @@ -66,7 +66,7 @@ private: QGraphicsPathItem * GetCurve(quint32 i, const QColor &color); template - int AddCurve(const QPointF &origin, quint32 id, int i); + int AddCurve(qreal angle, const QPointF &origin, quint32 id, int i); }; #endif // VISTOOLROTATION_H From 182d07f761f770a252c36178d1912e957e7b00f4 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 16:46:40 +0300 Subject: [PATCH 39/41] Fixed wrong incrementing references to objects. --HG-- branch : feature --- src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 9269ea5eb..963c34d36 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -298,11 +298,6 @@ VToolRotation *VToolRotation::Create(const quint32 _id, const quint32 &origin, Q { doc->IncrementReferens(data->GetGObject(source.at(i))->getIdTool()); } - - for (int i = 0; i < dest.size(); ++i) - { - doc->IncrementReferens(data->GetGObject(dest.at(i).id)->getIdTool()); - } return tool; } return nullptr; From bcec0658724990abd353cf218698528c17e39b5a Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 17:11:02 +0300 Subject: [PATCH 40/41] Correct support for Tool Group. --HG-- branch : feature --- src/libs/vwidgets/vsimplecurve.cpp | 11 +++++++++++ src/libs/vwidgets/vsimplecurve.h | 1 + src/libs/vwidgets/vsimplepoint.cpp | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/libs/vwidgets/vsimplecurve.cpp b/src/libs/vwidgets/vsimplecurve.cpp index 6e93d62a1..ea7f95c97 100644 --- a/src/libs/vwidgets/vsimplecurve.cpp +++ b/src/libs/vwidgets/vsimplecurve.cpp @@ -131,3 +131,14 @@ void VSimpleCurve::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) SetPen(this, currentColor, WidthHairLine(patternUnit)); QGraphicsPathItem::hoverLeaveEvent(event); } + +//--------------------------------------------------------------------------------------------------------------------- +QVariant VSimpleCurve::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) +{ + if (change == QGraphicsItem::ItemSelectedChange) + { + emit Selected(value.toBool(), id); + } + + return QGraphicsPathItem::itemChange(change, value); +} diff --git a/src/libs/vwidgets/vsimplecurve.h b/src/libs/vwidgets/vsimplecurve.h index 8fb35fe8c..7beba37f8 100644 --- a/src/libs/vwidgets/vsimplecurve.h +++ b/src/libs/vwidgets/vsimplecurve.h @@ -68,6 +68,7 @@ protected: virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) Q_DECL_OVERRIDE; virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent * event ) Q_DECL_OVERRIDE; virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ) Q_DECL_OVERRIDE; + virtual QVariant itemChange ( GraphicsItemChange change, const QVariant &value ) Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(VSimpleCurve) diff --git a/src/libs/vwidgets/vsimplepoint.cpp b/src/libs/vwidgets/vsimplepoint.cpp index bbe701572..a4748d61f 100644 --- a/src/libs/vwidgets/vsimplepoint.cpp +++ b/src/libs/vwidgets/vsimplepoint.cpp @@ -174,7 +174,7 @@ void VSimplePoint::PointChoosed() //--------------------------------------------------------------------------------------------------------------------- void VSimplePoint::PointSelected(bool selected) { - emit Selected(selected, id); + setSelected(selected); } //--------------------------------------------------------------------------------------------------------------------- From e22ff556a731ea22793ed2c86aba92e4dfbcb234 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 19 May 2016 17:19:54 +0300 Subject: [PATCH 41/41] Resolved issue #128. New Tool: Slash and Spread. --HG-- branch : feature --- ChangeLog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog.txt b/ChangeLog.txt index 70efd9b7b..e124a13e0 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -23,6 +23,7 @@ - [#478] Rename 'Print preview tiled' to 'Preview Tiled PDF'. - [#472] Add 'Full Name' column to Formula dialog. - [#487] True dart point always goes to origin when the label is moved. +- [#128] New Tool: Slash and Spread. # Version 0.4.5 - [#435] Valentina doesn't change the cursor.