From a2561bc7da9334c574a7cf69ae2a6d95368ad862 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 27 Feb 2016 12:28:15 +0200 Subject: [PATCH] Updated property dialog for tool Spline. --HG-- branch : feature --- .../core/vtooloptionspropertybrowser.cpp | 117 ++++++++++++++++-- src/libs/vgeometry/vspline.cpp | 40 ++++++ src/libs/vgeometry/vspline.h | 11 ++ .../tools/drawTools/toolcurve/vtoolspline.cpp | 2 +- 4 files changed, 157 insertions(+), 13 deletions(-) diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp index 552ebbd17..d58c9a087 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp +++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp @@ -1298,20 +1298,52 @@ void VToolOptionsPropertyBrowser::ChangeDataToolSpline(VProperty *property) QVariant value = property->data(VProperty::DPC_Data, Qt::DisplayRole); const QString id = propertyToId[property]; - VToolSpline *i = qgraphicsitem_cast(currentItem); + auto i = qgraphicsitem_cast(currentItem); SCASSERT(i != nullptr); + + VSpline spl = i->getSpline(); + const VFormula f = value.value(); + switch (PropertiesList().indexOf(id)) { case 0: // AttrName Q_UNREACHABLE();//The attribute is read only break; - case 25: // AttrKCurve - { - VSpline spl = i->getSpline(); - spl.SetKcurve(value.toDouble()); - i->setSpline(spl); + case 9: // AttrAngle1 + if (not f.error()) + { + spl.SetStartAngle(f.getDoubleValue(), f.GetFormula(FormulaType::FromUser)); + i->setSpline(spl); + } + break; + case 10: // AttrAngle2 + if (not f.error()) + { + spl.SetEndAngle(f.getDoubleValue(), f.GetFormula(FormulaType::FromUser)); + i->setSpline(spl); + } + break; + case 36: // AttrLength1 + if (not f.error() && f.getDoubleValue() >= 0) + { + spl.SetC1Length(qApp->toPixel(f.getDoubleValue()), f.GetFormula(FormulaType::FromUser)); + i->setSpline(spl); + } + break; + case 37: // AttrLength2 + if (not f.error() && f.getDoubleValue() >= 0) + { + spl.SetC2Length(qApp->toPixel(f.getDoubleValue()), f.GetFormula(FormulaType::FromUser)); + i->setSpline(spl); + } + break; + case 25: // AttrKCurve + if (value.toDouble() > 0) + { + spl.SetKcurve(value.toDouble()); + i->setSpline(spl); + } break; - } case 27: // AttrTypeColor i->SetLineColor(value.toString()); break; @@ -1709,14 +1741,39 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolShoulderPoint(QGraphicsItem *it //--------------------------------------------------------------------------------------------------------------------- void VToolOptionsPropertyBrowser::ShowOptionsToolSpline(QGraphicsItem *item) { - VToolSpline *i = qgraphicsitem_cast(item); + auto i = qgraphicsitem_cast(item); i->ShowVisualization(true); formView->setTitle(tr("Curve tool")); + const auto spl = i->getSpline(); + AddPropertyObjectName(i, tr("Name"), true); - VDoubleProperty* itemFactor = new VDoubleProperty(tr("Curve factor")); - VSpline spl = i->getSpline(); + VFormula angle1(spl.GetStartAngleFormula(), i->getData()); + angle1.setCheckZero(false); + angle1.setToolId(i->getId()); + angle1.setPostfix(degreeSymbol); + AddPropertyFormula(tr("C1: angle"), angle1, AttrAngle1); + + VFormula length1(spl.GetC1LengthFormula(), i->getData()); + length1.setCheckZero(false); + length1.setToolId(i->getId()); + length1.setPostfix(VDomDocument::UnitsToStr(qApp->patternUnit())); + AddPropertyFormula(tr("C1: length"), length1, AttrLength1); + + VFormula angle2(spl.GetEndAngleFormula(), i->getData()); + angle2.setCheckZero(false); + angle2.setToolId(i->getId()); + angle2.setPostfix(degreeSymbol); + AddPropertyFormula(tr("C2: angle"), angle2, AttrAngle2); + + VFormula length2(spl.GetC2LengthFormula(), i->getData()); + length2.setCheckZero(false); + length2.setToolId(i->getId()); + length2.setPostfix(VDomDocument::UnitsToStr(qApp->patternUnit())); + AddPropertyFormula(tr("C2: length"), length2, AttrLength2); + + auto itemFactor = new VDoubleProperty(tr("Curve factor")); itemFactor->setSetting("Min", 0.1); itemFactor->setSetting("Max", 1000); itemFactor->setSetting("Step", 0.01); @@ -2124,9 +2181,43 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolShoulderPoint() void VToolOptionsPropertyBrowser::UpdateOptionsToolSpline() { auto i = qgraphicsitem_cast(currentItem); + const VSpline spl = i->getSpline(); idToProperty[AttrName]->setValue(i->name()); - idToProperty[AttrKCurve]->setValue(i->getSpline().GetKcurve()); + + VFormula angle1F(spl.GetStartAngleFormula(), i->getData()); + angle1F.setCheckZero(false); + angle1F.setToolId(i->getId()); + angle1F.setPostfix(degreeSymbol); + QVariant angle1; + angle1.setValue(angle1F); + idToProperty[AttrAngle1]->setValue(angle1); + + VFormula length1F(spl.GetC1LengthFormula(), i->getData()); + length1F.setCheckZero(false); + length1F.setToolId(i->getId()); + length1F.setPostfix(VDomDocument::UnitsToStr(qApp->patternUnit())); + QVariant length1; + length1.setValue(length1F); + idToProperty[AttrLength1]->setValue(length1); + + VFormula angle2F(spl.GetEndAngleFormula(), i->getData()); + angle2F.setCheckZero(false); + angle2F.setToolId(i->getId()); + angle2F.setPostfix(degreeSymbol); + QVariant angle2; + angle2.setValue(angle2F); + idToProperty[AttrAngle2]->setValue(angle2); + + VFormula length2F(spl.GetC2LengthFormula(), i->getData()); + length2F.setCheckZero(false); + length2F.setToolId(i->getId()); + length2F.setPostfix(VDomDocument::UnitsToStr(qApp->patternUnit())); + QVariant length2; + length2.setValue(length2F); + idToProperty[AttrLength2]->setValue(length2); + + idToProperty[AttrKCurve]->setValue(spl.GetKcurve()); idToProperty[AttrColor]->setValue(VLineColorProperty::IndexOfColor(VAbstractTool::ColorsList(), i->GetLineColor())); } @@ -2228,6 +2319,8 @@ QStringList VToolOptionsPropertyBrowser::PropertiesList() const << AttrName1 /* 32 */ << AttrName2 /* 33 */ << AttrVCrossPoint /* 34 */ - << AttrHCrossPoint; /* 35 */ + << AttrHCrossPoint /* 35 */ + << AttrLength1 /* 36 */ + << AttrLength2; /* 37 */ return attr; } diff --git a/src/libs/vgeometry/vspline.cpp b/src/libs/vgeometry/vspline.cpp index d4fc3350c..22ac82640 100644 --- a/src/libs/vgeometry/vspline.cpp +++ b/src/libs/vgeometry/vspline.cpp @@ -689,6 +689,12 @@ VPointF VSpline::GetP1() const return d->p1; } +//--------------------------------------------------------------------------------------------------------------------- +void VSpline::SetP1(const VPointF &p) +{ + d->p1 = p; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetP2 return first control point. @@ -723,6 +729,12 @@ VPointF VSpline::GetP4() const return d->p4; } +//--------------------------------------------------------------------------------------------------------------------- +void VSpline::SetP4(const VPointF &p) +{ + d->p4 = p; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetAngle1 return first angle control line. @@ -755,6 +767,20 @@ QString VSpline::GetEndAngleFormula() const return d->angle2F; } +//--------------------------------------------------------------------------------------------------------------------- +void VSpline::SetStartAngle(qreal angle, const QString &formula) +{ + d->angle1 = angle; + d->angle1F = formula; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSpline::SetEndAngle(qreal angle, const QString &formula) +{ + d->angle2 = angle; + d->angle2F = formula; +} + //--------------------------------------------------------------------------------------------------------------------- qreal VSpline::GetC1Length() const { @@ -779,6 +805,20 @@ QString VSpline::GetC2LengthFormula() const return d->c2LengthF; } +//--------------------------------------------------------------------------------------------------------------------- +void VSpline::SetC1Length(qreal length, const QString &formula) +{ + d->c1Length = length; + d->c1LengthF = formula; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSpline::SetC2Length(qreal length, const QString &formula) +{ + d->c2Length = length; + d->c2LengthF = formula; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetKasm1 return coefficient of length first control line. diff --git a/src/libs/vgeometry/vspline.h b/src/libs/vgeometry/vspline.h index 410890c02..bd05f1ae4 100644 --- a/src/libs/vgeometry/vspline.h +++ b/src/libs/vgeometry/vspline.h @@ -56,10 +56,15 @@ public: const QString &c2LengthFormula, qreal kCurve, quint32 idObject = 0, Draw mode = Draw::Calculation); virtual ~VSpline() Q_DECL_OVERRIDE; VSpline &operator=(const VSpline &spl); + VPointF GetP1 () const; + void SetP1 (const VPointF &p); + QPointF GetP2 () const; QPointF GetP3 () const; + VPointF GetP4 () const; + void SetP4 (const VPointF &p); virtual qreal GetStartAngle () const Q_DECL_OVERRIDE; virtual qreal GetEndAngle() const Q_DECL_OVERRIDE; @@ -67,12 +72,18 @@ public: QString GetStartAngleFormula () const; QString GetEndAngleFormula() const; + void SetStartAngle(qreal angle, const QString &formula); + void SetEndAngle(qreal angle, const QString &formula); + qreal GetC1Length() const; qreal GetC2Length() const; QString GetC1LengthFormula() const; QString GetC2LengthFormula() const; + void SetC1Length(qreal length, const QString &formula); + void SetC2Length(qreal length, const QString &formula); + qreal GetLength () const; qreal GetKasm1() const; qreal GetKasm2() const; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp index cce351134..39e99c307 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp @@ -221,7 +221,7 @@ VToolSpline *VToolSpline::Create(const quint32 _id, quint32 point1, quint32 poin //--------------------------------------------------------------------------------------------------------------------- VSpline VToolSpline::getSpline() const { - QSharedPointer spline = VAbstractTool::data.GeometricObject(id); + auto spline = VAbstractTool::data.GeometricObject(id); return *spline.data(); }