From f56ea24810ad4c3dcf206fbd74d0697ca1ce3c28 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 28 Nov 2016 11:58:44 +0200 Subject: [PATCH] Custom Path will work in two modes. The first extend automatic seam allowance, the second show custom deam allowance. In this case a path must have options for controling seam allowance. --HG-- branch : feature --- src/app/valentina/xml/vpattern.cpp | 112 +++++++----------- src/app/valentina/xml/vpattern.h | 2 + src/libs/ifc/schema/pattern/v0.4.0.xsd | 3 + src/libs/ifc/xml/vabstractpattern.cpp | 2 + src/libs/ifc/xml/vabstractpattern.h | 2 + .../tools/nodeDetails/vtoolpiecepath.cpp | 31 +---- src/libs/vtools/tools/vabstracttool.cpp | 57 +++++++++ src/libs/vtools/tools/vabstracttool.h | 6 +- src/libs/vtools/tools/vtoolseamallowance.cpp | 48 +------- src/libs/vtools/tools/vtoolseamallowance.h | 2 - 10 files changed, 117 insertions(+), 148 deletions(-) diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index e9f9ae6ba..a5f58cf22 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -520,6 +520,49 @@ void VPattern::customEvent(QEvent *event) } } +//--------------------------------------------------------------------------------------------------------------------- +VPieceNode VPattern::ParseSANode(const QDomElement &domElement) const +{ + const quint32 id = GetParametrUInt(domElement, AttrIdObject, NULL_ID_STR); + const bool reverse = GetParametrUInt(domElement, VAbstractPattern::AttrNodeReverse, "0"); + const qreal saBefore = GetParametrDouble(domElement, VAbstractPattern::AttrSABefore, "-1"); + const qreal saAfter = GetParametrDouble(domElement, VAbstractPattern::AttrSAAfter, "-1"); + const PieceNodeAngle angle = static_cast(GetParametrUInt(domElement, AttrAngle, "0")); + + const QString t = GetParametrString(domElement, AttrType, VAbstractPattern::NodePoint); + Tool tool; + + const QStringList types = QStringList() << VAbstractPattern::NodePoint + << VAbstractPattern::NodeArc + << VAbstractPattern::NodeSpline + << VAbstractPattern::NodeSplinePath; + + switch (types.indexOf(t)) + { + case 0: // VAbstractPattern::NodePoint + tool = Tool::NodePoint; + break; + case 1: // VAbstractPattern::NodeArc + tool = Tool::NodeArc; + break; + case 2: // VAbstractPattern::NodeSpline + tool = Tool::NodeSpline; + break; + case 3: // VAbstractPattern::NodeSplinePath + tool = Tool::NodeSplinePath; + break; + default: + VException e(tr("Wrong tag name '%1'.").arg(t)); + throw e; + } + VPieceNode node(id, tool, reverse); + node.SetSABefore(saBefore); + node.SetSAAfter(saAfter); + node.SetAngleType(angle); + + return node; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief ParseDrawElement parse draw tag. @@ -777,49 +820,13 @@ void VPattern::ParseDetailElement(const QDomElement &domElement, const Document //--------------------------------------------------------------------------------------------------------------------- void VPattern::ParseDetailNodes(const QDomElement &domElement, VPiece &detail) const { - const QStringList types = QStringList() << VAbstractPattern::NodePoint - << VAbstractPattern::NodeArc - << VAbstractPattern::NodeSpline - << VAbstractPattern::NodeSplinePath; - const QDomNodeList nodeList = domElement.childNodes(); for (qint32 i = 0; i < nodeList.size(); ++i) { const QDomElement element = nodeList.at(i).toElement(); if (not element.isNull() && element.tagName() == VAbstractPattern::TagNode) { - const quint32 id = GetParametrUInt(element, AttrIdObject, NULL_ID_STR); - const bool reverse = GetParametrUInt(element, VAbstractPattern::AttrNodeReverse, "0"); - const qreal saBefore = GetParametrDouble(element, VToolSeamAllowance::AttrSABefore, "-1"); - const qreal saAfter = GetParametrDouble(element, VToolSeamAllowance::AttrSAAfter, "-1"); - const PieceNodeAngle angle = static_cast(GetParametrUInt(element, AttrAngle, "0")); - - const QString t = GetParametrString(element, AttrType, VAbstractPattern::NodePoint); - Tool tool; - - switch (types.indexOf(t)) - { - case 0: // VToolSeamAllowance::NodePoint - tool = Tool::NodePoint; - break; - case 1: // VToolSeamAllowance::NodeArc - tool = Tool::NodeArc; - break; - case 2: // VToolSeamAllowance::NodeSpline - tool = Tool::NodeSpline; - break; - case 3: // VToolSeamAllowance::NodeSplinePath - tool = Tool::NodeSplinePath; - break; - default: - VException e(tr("Wrong tag name '%1'.").arg(t)); - throw e; - } - VPieceNode node(id, tool, reverse); - node.SetSABefore(saBefore); - node.SetSAAfter(saAfter); - node.SetAngleType(angle); - detail.GetPath().Append(node); + detail.GetPath().Append(ParseSANode(element)); } } } @@ -3078,42 +3085,13 @@ void VPattern::ParsePathElement(VMainGraphicsScene *scene, QDomElement &domEleme //--------------------------------------------------------------------------------------------------------------------- void VPattern::ParsePathNodes(const QDomElement &domElement, VPiecePath &path) const { - const QStringList types = QStringList() << VAbstractPattern::NodePoint - << VAbstractPattern::NodeArc - << VAbstractPattern::NodeSpline - << VAbstractPattern::NodeSplinePath; - const QDomNodeList nodeList = domElement.childNodes(); for (qint32 i = 0; i < nodeList.size(); ++i) { const QDomElement element = nodeList.at(i).toElement(); if (not element.isNull() && element.tagName() == VAbstractPattern::TagNode) { - const quint32 id = GetParametrUInt(element, AttrIdObject, NULL_ID_STR); - const bool reverse = GetParametrUInt(element, VAbstractPattern::AttrNodeReverse, "0"); - - const QString t = GetParametrString(element, AttrType, VAbstractPattern::NodePoint); - Tool tool; - - switch (types.indexOf(t)) - { - case 0: // VAbstractPattern::NodePoint - tool = Tool::NodePoint; - break; - case 1: // VAbstractPattern::NodeArc - tool = Tool::NodeArc; - break; - case 2: // VAbstractPattern::NodeSpline - tool = Tool::NodeSpline; - break; - case 3: // VAbstractPattern::NodeSplinePath - tool = Tool::NodeSplinePath; - break; - default: - VException e(tr("Wrong tag name '%1'.").arg(t)); - throw e; - } - path.Append(VPieceNode(id, tool, reverse)); + path.Append(ParseSANode(element)); } } } diff --git a/src/app/valentina/xml/vpattern.h b/src/app/valentina/xml/vpattern.h index 0ab54d4f0..9911da676 100644 --- a/src/app/valentina/xml/vpattern.h +++ b/src/app/valentina/xml/vpattern.h @@ -114,6 +114,8 @@ private: VMainGraphicsScene *sceneDraw; VMainGraphicsScene *sceneDetail; + VPieceNode ParseSANode(const QDomElement &domElement) const; + void ParseDrawElement(const QDomNode& node, const Document &parse); void ParseDrawMode(const QDomNode& node, const Document &parse, const Draw &mode); void ParseDetailElement(const QDomElement &domElement, const Document &parse); diff --git a/src/libs/ifc/schema/pattern/v0.4.0.xsd b/src/libs/ifc/schema/pattern/v0.4.0.xsd index 6fa03906b..225ce799c 100644 --- a/src/libs/ifc/schema/pattern/v0.4.0.xsd +++ b/src/libs/ifc/schema/pattern/v0.4.0.xsd @@ -315,6 +315,9 @@ + + + diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index 3dd8510ad..e2a7b692e 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -105,6 +105,8 @@ const QString VAbstractPattern::AttrCutNumber = QStringLiteral("cutNumber" const QString VAbstractPattern::AttrPlacement = QStringLiteral("placement"); const QString VAbstractPattern::AttrArrows = QStringLiteral("arrows"); const QString VAbstractPattern::AttrNodeReverse = QStringLiteral("reverse"); +const QString VAbstractPattern::AttrSABefore = QStringLiteral("before"); +const QString VAbstractPattern::AttrSAAfter = QStringLiteral("after"); const QString VAbstractPattern::AttrAll = QStringLiteral("all"); diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index d951656a5..8ff0a8c61 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -209,6 +209,8 @@ public: static const QString AttrPlacement; static const QString AttrArrows; static const QString AttrNodeReverse; + static const QString AttrSABefore; + static const QString AttrSAAfter; static const QString AttrAll; diff --git a/src/libs/vtools/tools/nodeDetails/vtoolpiecepath.cpp b/src/libs/vtools/tools/nodeDetails/vtoolpiecepath.cpp index 492c6d17d..c1bbfa9b5 100644 --- a/src/libs/vtools/tools/nodeDetails/vtoolpiecepath.cpp +++ b/src/libs/vtools/tools/nodeDetails/vtoolpiecepath.cpp @@ -105,36 +105,7 @@ QString VToolPiecePath::getTagName() const //--------------------------------------------------------------------------------------------------------------------- void VToolPiecePath::AddNode(VAbstractPattern *doc, QDomElement &domElement, const VPieceNode &node) { - QDomElement nod = doc->createElement(VAbstractPattern::TagNode); - - doc->SetAttribute(nod, AttrIdObject, node.GetId()); - - const Tool type = node.GetTypeTool(); - if (type != Tool::NodePoint) - { - doc->SetAttribute(nod, VAbstractPattern::AttrNodeReverse, static_cast(node.GetReverse())); - } - - switch (type) - { - case (Tool::NodeArc): - doc->SetAttribute(nod, AttrType, VAbstractPattern::NodeArc); - break; - case (Tool::NodePoint): - doc->SetAttribute(nod, AttrType, VAbstractPattern::NodePoint); - break; - case (Tool::NodeSpline): - doc->SetAttribute(nod, AttrType, VAbstractPattern::NodeSpline); - break; - case (Tool::NodeSplinePath): - doc->SetAttribute(nod, AttrType, VAbstractPattern::NodeSplinePath); - break; - default: - qDebug()<<"May be wrong tool type!!! Ignoring."<setVisible(false); } } + +//--------------------------------------------------------------------------------------------------------------------- +QDomElement VAbstractTool::AddSANode(VAbstractPattern *doc, const QString &tagName, const VPieceNode &node) +{ + QDomElement nod = doc->createElement(tagName); + + doc->SetAttribute(nod, AttrIdObject, node.GetId()); + + const Tool type = node.GetTypeTool(); + if (type != Tool::NodePoint) + { + doc->SetAttribute(nod, VAbstractPattern::AttrNodeReverse, static_cast(node.GetReverse())); + } + else + { + const qreal w1 = node.GetSABefore(); + if (w1 >= 0) + { + doc->SetAttribute(nod, VAbstractPattern::AttrSABefore, w1); + } + + const qreal w2 = node.GetSAAfter(); + if (w2 >= 0) + { + doc->SetAttribute(nod, VAbstractPattern::AttrSAAfter, w2); + } + } + + switch (type) + { + case (Tool::NodeArc): + doc->SetAttribute(nod, AttrType, VAbstractPattern::NodeArc); + break; + case (Tool::NodePoint): + doc->SetAttribute(nod, AttrType, VAbstractPattern::NodePoint); + break; + case (Tool::NodeSpline): + doc->SetAttribute(nod, AttrType, VAbstractPattern::NodeSpline); + break; + case (Tool::NodeSplinePath): + doc->SetAttribute(nod, AttrType, VAbstractPattern::NodeSplinePath); + break; + default: + qDebug()<<"May be wrong tool type!!! Ignoring."<(node.GetAngleType()); + + if (angleType > 0) + { + doc->SetAttribute(nod, AttrAngle, angleType); + } + + return nod; +} diff --git a/src/libs/vtools/tools/vabstracttool.h b/src/libs/vtools/tools/vabstracttool.h index b445c9ff9..3bc0187b7 100644 --- a/src/libs/vtools/tools/vabstracttool.h +++ b/src/libs/vtools/tools/vabstracttool.h @@ -146,8 +146,10 @@ protected: virtual void SetVisualization()=0; void ToolCreation(const Source &typeCreation); - static void RefreshLine(QGraphicsEllipseItem *point, VGraphicsSimpleTextItem *namePoint, QGraphicsLineItem *lineName, - const qreal radius); + static void RefreshLine(QGraphicsEllipseItem *point, VGraphicsSimpleTextItem *namePoint, + QGraphicsLineItem *lineName, const qreal radius); + + static QDomElement AddSANode(VAbstractPattern *doc, const QString &tagName, const VPieceNode &node); private: Q_DISABLE_COPY(VAbstractTool) }; diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index a8cc7b7b2..2ed36f232 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -64,8 +64,6 @@ const QString VToolSeamAllowance::AttrVersion = QStringLiteral("version") const QString VToolSeamAllowance::AttrForbidFlipping = QStringLiteral("forbidFlipping"); const QString VToolSeamAllowance::AttrSeamAllowance = QStringLiteral("seamAllowance"); const QString VToolSeamAllowance::AttrWidth = QStringLiteral("width"); -const QString VToolSeamAllowance::AttrSABefore = QStringLiteral("before"); -const QString VToolSeamAllowance::AttrSAAfter = QStringLiteral("after"); const QString VToolSeamAllowance::AttrUnited = QStringLiteral("united"); const QString VToolSeamAllowance::AttrStart = QStringLiteral("start"); const QString VToolSeamAllowance::AttrPath = QStringLiteral("path"); @@ -201,51 +199,7 @@ void VToolSeamAllowance::Remove(bool ask) //--------------------------------------------------------------------------------------------------------------------- void VToolSeamAllowance::AddNode(VAbstractPattern *doc, QDomElement &domElement, const VPieceNode &node) { - QDomElement nod = doc->createElement(VAbstractPattern::TagNode); - - doc->SetAttribute(nod, AttrIdObject, node.GetId()); - - const Tool type = node.GetTypeTool(); - if (type != Tool::NodePoint) - { - doc->SetAttribute(nod, VAbstractPattern::AttrNodeReverse, static_cast(node.GetReverse())); - } - else - { - const qreal w1 = node.GetSABefore(); - w1 < 0 ? domElement.removeAttribute(AttrSABefore) : doc->SetAttribute(nod, AttrSABefore, w1); - - const qreal w2 = node.GetSAAfter(); - w2 < 0 ? domElement.removeAttribute(AttrSAAfter) : doc->SetAttribute(nod, AttrSAAfter, w2); - } - - switch (type) - { - case (Tool::NodeArc): - doc->SetAttribute(nod, AttrType, VAbstractPattern::NodeArc); - break; - case (Tool::NodePoint): - doc->SetAttribute(nod, AttrType, VAbstractPattern::NodePoint); - break; - case (Tool::NodeSpline): - doc->SetAttribute(nod, AttrType, VAbstractPattern::NodeSpline); - break; - case (Tool::NodeSplinePath): - doc->SetAttribute(nod, AttrType, VAbstractPattern::NodeSplinePath); - break; - default: - qDebug()<<"May be wrong tool type!!! Ignoring."<(node.GetAngleType()); - - if (angleType > 0) - { - doc->SetAttribute(nod, AttrAngle, angleType); - } - - domElement.appendChild(nod); + domElement.appendChild(AddSANode(doc, VAbstractPattern::TagNode, node)); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/vtoolseamallowance.h b/src/libs/vtools/tools/vtoolseamallowance.h index 829541eae..17d55b26e 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.h +++ b/src/libs/vtools/tools/vtoolseamallowance.h @@ -61,8 +61,6 @@ public: static const QString AttrForbidFlipping; static const QString AttrSeamAllowance; static const QString AttrWidth; - static const QString AttrSABefore; - static const QString AttrSAAfter; static const QString AttrUnited; static const QString AttrStart; static const QString AttrPath;