diff --git a/ChangeLog.txt b/ChangeLog.txt index 27c843bab..015c70534 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -21,6 +21,7 @@ - Fixed bug. After full parse undocommand Move labe losts connection to tool. - [#756] New feature. Select pieces from command line. - [#761] New feature. Export final measurements. +- [#758] Intersection Passmark - select which side is shown. # Version 0.5.1 - [#683] Tool Seam allowance's dialog is off screen on small resolutions. diff --git a/src/libs/ifc/schema.qrc b/src/libs/ifc/schema.qrc index c6f701026..07e782609 100644 --- a/src/libs/ifc/schema.qrc +++ b/src/libs/ifc/schema.qrc @@ -39,6 +39,7 @@ schema/pattern/v0.6.2.xsd schema/pattern/v0.6.3.xsd schema/pattern/v0.6.4.xsd + schema/pattern/v0.6.5.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.6.5.xsd b/src/libs/ifc/schema/pattern/v0.6.5.xsd new file mode 100644 index 000000000..dccf68578 --- /dev/null +++ b/src/libs/ifc/schema/pattern/v0.6.5.xsd @@ -0,0 +1,987 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index ae7fa52fa..fc91a2cc6 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -58,8 +58,8 @@ class QDomElement; */ const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.0"); -const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.6.4"); -const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.6.4.xsd"); +const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.6.5"); +const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.6.5.xsd"); //VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!! //VPatternConverter::PatternMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!! @@ -252,6 +252,8 @@ QString VPatternConverter::XSDSchema(int ver) const case (0x000603): return QStringLiteral("://schema/pattern/v0.6.3.xsd"); case (0x000604): + return QStringLiteral("://schema/pattern/v0.6.4.xsd"); + case (0x000605): return CurrentSchema; default: InvalidVersion(ver); @@ -418,6 +420,10 @@ void VPatternConverter::ApplyPatches() ValidateXML(XSDSchema(0x000604), m_convertedFileName); V_FALLTHROUGH case (0x000604): + ToV0_6_5(); + ValidateXML(XSDSchema(0x000605), m_convertedFileName); + V_FALLTHROUGH + case (0x000605): break; default: InvalidVersion(m_ver); @@ -436,7 +442,7 @@ void VPatternConverter::DowngradeToCurrentMaxVersion() bool VPatternConverter::IsReadOnly() const { // Check if attribute readOnly was not changed in file format - Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == CONVERTER_VERSION_CHECK(0, 6, 4), + Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == CONVERTER_VERSION_CHECK(0, 6, 5), "Check attribute readOnly."); // Possibly in future attribute readOnly will change position etc. @@ -880,6 +886,16 @@ void VPatternConverter::ToV0_6_4() Save(); } +//--------------------------------------------------------------------------------------------------------------------- +void VPatternConverter::ToV0_6_5() +{ + // TODO. Delete if minimal supported version is 0.6.5 + Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < CONVERTER_VERSION_CHECK(0, 6, 5), + "Time to refactor the code."); + SetVersion(QStringLiteral("0.6.5")); + Save(); +} + //--------------------------------------------------------------------------------------------------------------------- void VPatternConverter::TagUnitToV0_2_0() { diff --git a/src/libs/ifc/xml/vpatternconverter.h b/src/libs/ifc/xml/vpatternconverter.h index e6b83b7dc..975f2d5ef 100644 --- a/src/libs/ifc/xml/vpatternconverter.h +++ b/src/libs/ifc/xml/vpatternconverter.h @@ -53,7 +53,7 @@ public: static const QString PatternMaxVerStr; static const QString CurrentSchema; static Q_DECL_CONSTEXPR const int PatternMinVer = CONVERTER_VERSION_CHECK(0, 1, 0); - static Q_DECL_CONSTEXPR const int PatternMaxVer = CONVERTER_VERSION_CHECK(0, 6, 4); + static Q_DECL_CONSTEXPR const int PatternMaxVer = CONVERTER_VERSION_CHECK(0, 6, 5); protected: virtual int MinVer() const Q_DECL_OVERRIDE; @@ -110,6 +110,7 @@ private: void ToV0_6_2(); void ToV0_6_3(); void ToV0_6_4(); + void ToV0_6_5(); void TagUnitToV0_2_0(); void TagIncrementToV0_2_0(); diff --git a/src/libs/vmisc/def.cpp b/src/libs/vmisc/def.cpp index 5d3f5778e..6a4fbbfa4 100644 --- a/src/libs/vmisc/def.cpp +++ b/src/libs/vmisc/def.cpp @@ -623,9 +623,11 @@ PassmarkLineType StringToPassmarkLineType(const QString &value) return PassmarkLineType::OneLine; } -const QString strStraightforward = QStringLiteral("straightforward"); -const QString strBisector = QStringLiteral("bisector"); -const QString strIntersection = QStringLiteral("intersection"); +const QString strStraightforward = QStringLiteral("straightforward"); +const QString strBisector = QStringLiteral("bisector"); +const QString strIntersection = QStringLiteral("intersection"); +const QString strIntersectionOnlyLeft = QStringLiteral("intersectionLeft"); +const QString strIntersectionOnlyRight = QStringLiteral("intersectionRight"); //--------------------------------------------------------------------------------------------------------------------- QString PassmarkAngleTypeToString(PassmarkAngleType type) @@ -638,6 +640,10 @@ QString PassmarkAngleTypeToString(PassmarkAngleType type) return strBisector; case PassmarkAngleType::Intersection: return strIntersection; + case PassmarkAngleType::IntersectionOnlyLeft: + return strIntersectionOnlyLeft; + case PassmarkAngleType::IntersectionOnlyRight: + return strIntersectionOnlyRight; default: break; } @@ -648,7 +654,11 @@ QString PassmarkAngleTypeToString(PassmarkAngleType type) //--------------------------------------------------------------------------------------------------------------------- PassmarkAngleType StringToPassmarkAngleType(const QString &value) { - const QStringList values = QStringList() << strStraightforward << strBisector << strIntersection; + const QStringList values = QStringList() << strStraightforward + << strBisector + << strIntersection + << strIntersectionOnlyLeft + << strIntersectionOnlyRight; switch(values.indexOf(value)) { @@ -658,6 +668,10 @@ PassmarkAngleType StringToPassmarkAngleType(const QString &value) return PassmarkAngleType::Bisector; case 2: return PassmarkAngleType::Intersection; + case 3: + return PassmarkAngleType::IntersectionOnlyLeft; + case 4: + return PassmarkAngleType::IntersectionOnlyRight; default: break; } diff --git a/src/libs/vmisc/def.h b/src/libs/vmisc/def.h index 70724003e..08ebd8d3d 100644 --- a/src/libs/vmisc/def.h +++ b/src/libs/vmisc/def.h @@ -89,7 +89,9 @@ enum class PassmarkAngleType : unsigned char { Straightforward = 0, // Default Bisector, - Intersection + Intersection, + IntersectionOnlyLeft, + IntersectionOnlyRight }; QString PassmarkAngleTypeToString(PassmarkAngleType type); @@ -397,6 +399,8 @@ extern const QString strThree; extern const QString strStraightforward; extern const QString strBisector; extern const QString strIntersection; +extern const QString strIntersectionOnlyLeft; +extern const QString strIntersectionOnlyRight; extern const QString unitMM; extern const QString unitCM; diff --git a/src/libs/vpatterndb/vpiece.cpp b/src/libs/vpatterndb/vpiece.cpp index 5bfcf21ed..6fdedb6f5 100644 --- a/src/libs/vpatterndb/vpiece.cpp +++ b/src/libs/vpatterndb/vpiece.cpp @@ -201,7 +201,10 @@ QVector CreatePassmarkLines(PassmarkLineType lineType, PassmarkAngleType { QVector passmarksLines; - if (angleType == PassmarkAngleType::Straightforward || angleType == PassmarkAngleType::Intersection) + if (angleType == PassmarkAngleType::Straightforward + || angleType == PassmarkAngleType::Intersection + || angleType == PassmarkAngleType::IntersectionOnlyLeft + || angleType == PassmarkAngleType::IntersectionOnlyRight) { switch (lineType) { @@ -1090,6 +1093,8 @@ QVector VPiece::CreatePassmark(const QVector &path, int prev && not IsHideMainPath() && path.at(passmarkIndex).IsMainPathNode() && path.at(passmarkIndex).GetPassmarkAngleType() != PassmarkAngleType::Intersection + && path.at(passmarkIndex).GetPassmarkAngleType() != PassmarkAngleType::IntersectionOnlyLeft + && path.at(passmarkIndex).GetPassmarkAngleType() != PassmarkAngleType::IntersectionOnlyRight && path.at(passmarkIndex).IsShowSecondPassmark()) { lines += BuiltInSAPassmark(path, previousSAPoint, passmarkSAPoint, nextSAPoint, data, passmarkIndex); @@ -1139,11 +1144,15 @@ QVector VPiece::SAPassmark(const QVector &path, VSAPoint &pr passmarksLines += CreatePassmarkLines(node.GetPassmarkLineType(), node.GetPassmarkAngleType(), edge1); } - else if (node.GetPassmarkAngleType() == PassmarkAngleType::Intersection) + else if (node.GetPassmarkAngleType() == PassmarkAngleType::Intersection + || node.GetPassmarkAngleType() == PassmarkAngleType::IntersectionOnlyLeft + || node.GetPassmarkAngleType() == PassmarkAngleType::IntersectionOnlyRight) { QVector seamPoints; seamAllowance.isEmpty() ? seamPoints = SeamAllowancePoints(data) : seamPoints = seamAllowance; + if (node.GetPassmarkAngleType() == PassmarkAngleType::Intersection + || node.GetPassmarkAngleType() == PassmarkAngleType::IntersectionOnlyRight) { // first passmark QLineF line(previousSAPoint, passmarkSAPoint); @@ -1161,6 +1170,8 @@ QVector VPiece::SAPassmark(const QVector &path, VSAPoint &pr passmarksLines += CreatePassmarkLines(node.GetPassmarkLineType(), node.GetPassmarkAngleType(), line); } + if (node.GetPassmarkAngleType() == PassmarkAngleType::Intersection + || node.GetPassmarkAngleType() == PassmarkAngleType::IntersectionOnlyLeft) { // second passmark QLineF line(nextSAPoint, passmarkSAPoint); diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp index ca494c1b2..db2027deb 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp @@ -389,6 +389,8 @@ void DialogPiecePath::PassmarkChanged(int index) ui->radioButtonStraightforward->setDisabled(true); ui->radioButtonBisector->setDisabled(true); ui->radioButtonIntersection->setDisabled(true); + ui->radioButtonIntersectionOnlyLeft->setDisabled(true); + ui->radioButtonIntersectionOnlyRight->setDisabled(true); ui->groupBoxMarkType->blockSignals(true); ui->groupBoxAngleType->blockSignals(true); @@ -433,6 +435,8 @@ void DialogPiecePath::PassmarkChanged(int index) ui->radioButtonStraightforward->setEnabled(true); ui->radioButtonBisector->setEnabled(true); ui->radioButtonIntersection->setEnabled(true); + ui->radioButtonIntersectionOnlyLeft->setEnabled(true); + ui->radioButtonIntersectionOnlyRight->setEnabled(true); switch(node.GetPassmarkAngleType()) { @@ -445,6 +449,12 @@ void DialogPiecePath::PassmarkChanged(int index) case PassmarkAngleType::Intersection: ui->radioButtonIntersection->setChecked(true); break; + case PassmarkAngleType::IntersectionOnlyLeft: + ui->radioButtonIntersectionOnlyLeft->setChecked(true); + break; + case PassmarkAngleType::IntersectionOnlyRight: + ui->radioButtonIntersectionOnlyRight->setChecked(true); + break; default: break; } @@ -540,6 +550,14 @@ void DialogPiecePath::PassmarkAngleTypeChanged(int id) { angleType = PassmarkAngleType::Intersection; } + else if (id == ui->buttonGroupAngleType->id(ui->radioButtonIntersectionOnlyLeft)) + { + angleType = PassmarkAngleType::IntersectionOnlyLeft; + } + else if (id == ui->buttonGroupAngleType->id(ui->radioButtonIntersectionOnlyRight)) + { + angleType = PassmarkAngleType::IntersectionOnlyRight; + } rowNode.SetPassmarkAngleType(angleType); rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode)); diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.ui b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.ui index 7873925d7..41dd3ce77 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.ui +++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.ui @@ -7,7 +7,7 @@ 0 0 480 - 437 + 490 @@ -952,6 +952,38 @@ + + + + false + + + Select if need designate the corner point as a passmark. Show only left passmark. + + + Intersection (only left) + + + buttonGroupAngleType + + + + + + + false + + + Select if need designate the corner point as a passmark. Show only right passmark. + + + Intersection (only right) + + + buttonGroupAngleType + + + @@ -1022,7 +1054,7 @@ - + diff --git a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp index 1511103c7..c1fa2b32c 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp @@ -765,6 +765,8 @@ void DialogSeamAllowance::PassmarkChanged(int index) uiTabPassmarks->radioButtonStraightforward->setDisabled(true); uiTabPassmarks->radioButtonBisector->setDisabled(true); uiTabPassmarks->radioButtonIntersection->setDisabled(true); + uiTabPassmarks->radioButtonIntersectionOnlyLeft->setDisabled(true); + uiTabPassmarks->radioButtonIntersectionOnlyRight->setDisabled(true); uiTabPassmarks->checkBoxShowSecondPassmark->setDisabled(true); uiTabPassmarks->checkBoxShowSecondPassmark->blockSignals(true); @@ -812,6 +814,8 @@ void DialogSeamAllowance::PassmarkChanged(int index) uiTabPassmarks->radioButtonStraightforward->setEnabled(true); uiTabPassmarks->radioButtonBisector->setEnabled(true); uiTabPassmarks->radioButtonIntersection->setEnabled(true); + uiTabPassmarks->radioButtonIntersectionOnlyLeft->setEnabled(true); + uiTabPassmarks->radioButtonIntersectionOnlyRight->setEnabled(true); switch(node.GetPassmarkAngleType()) { @@ -824,6 +828,12 @@ void DialogSeamAllowance::PassmarkChanged(int index) case PassmarkAngleType::Intersection: uiTabPassmarks->radioButtonIntersection->setChecked(true); break; + case PassmarkAngleType::IntersectionOnlyLeft: + uiTabPassmarks->radioButtonIntersectionOnlyLeft->setChecked(true); + break; + case PassmarkAngleType::IntersectionOnlyRight: + uiTabPassmarks->radioButtonIntersectionOnlyRight->setChecked(true); + break; default: break; } @@ -1151,6 +1161,14 @@ void DialogSeamAllowance::PassmarkAngleTypeChanged(int id) { angleType = PassmarkAngleType::Intersection; } + else if (id == uiTabPassmarks->buttonGroupAngleType->id(uiTabPassmarks->radioButtonIntersectionOnlyLeft)) + { + angleType = PassmarkAngleType::IntersectionOnlyLeft; + } + else if (id == uiTabPassmarks->buttonGroupAngleType->id(uiTabPassmarks->radioButtonIntersectionOnlyRight)) + { + angleType = PassmarkAngleType::IntersectionOnlyRight; + } rowNode.SetPassmarkAngleType(angleType); rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode)); diff --git a/src/libs/vtools/dialogs/tools/piece/tabs/tabpassmarks.ui b/src/libs/vtools/dialogs/tools/piece/tabs/tabpassmarks.ui index 410e59542..dc8c81e54 100644 --- a/src/libs/vtools/dialogs/tools/piece/tabs/tabpassmarks.ui +++ b/src/libs/vtools/dialogs/tools/piece/tabs/tabpassmarks.ui @@ -7,7 +7,7 @@ 0 0 352 - 411 + 482 @@ -25,7 +25,7 @@ 0 0 332 - 391 + 462 @@ -171,6 +171,38 @@ + + + + false + + + Select if need designate the corner point as a passmark. Show only left passmark. + + + Intersection (only left) + + + buttonGroupAngleType + + + + + + + false + + + Select if need designate the corner point as a passmark. Show only right passmark. + + + Intersection (only right) + + + buttonGroupAngleType + + +