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
+
+
+