From 67e5f9c3e914b425ce1311da245986775a4030f5 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sun, 27 Dec 2020 08:19:23 +0100 Subject: [PATCH] Sketcher: Make select-constraint select-elements mode consistent with select-element select-constraint ====================================================================================================== https://forum.freecadweb.org/viewtopic.php?f=13&t=53515&p=461142#p460687 When using select-constraint then select elements, allow both point-line-point and point-point-line. --- src/Mod/Sketcher/Gui/CommandConstraints.cpp | 28 ++++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandConstraints.cpp b/src/Mod/Sketcher/Gui/CommandConstraints.cpp index 778688c29d..ea9e640ddb 100644 --- a/src/Mod/Sketcher/Gui/CommandConstraints.cpp +++ b/src/Mod/Sketcher/Gui/CommandConstraints.cpp @@ -6607,6 +6607,11 @@ CmdSketcherConstrainSymmetric::CmdSketcherConstrainSymmetric() {SelVertex, SelExternalEdge, SelVertexOrRoot}, {SelRoot, SelExternalEdge, SelVertex}, {SelVertex, SelEdgeOrAxis, SelVertex}, + {SelVertex, SelVertexOrRoot,SelEdge}, + {SelRoot, SelVertex, SelEdge}, + {SelVertex, SelVertexOrRoot, SelExternalEdge}, + {SelRoot, SelVertex, SelExternalEdge}, + {SelVertex, SelVertex, SelEdgeOrAxis}, {SelVertex, SelVertexOrRoot, SelVertex}, {SelVertex, SelVertex, SelVertexOrRoot}, {SelVertexOrRoot, SelVertex, SelVertex}}; @@ -6794,14 +6799,29 @@ void CmdSketcherConstrainSymmetric::applyConstraint(std::vector &selS case 4: // {SelVertex, SelExternalEdge, SelVertexOrRoot} case 5: // {SelRoot, SelExternalEdge, SelVertex} case 6: // {SelVertex, SelEdgeOrAxis, SelVertex} + case 7: // {SelVertex, SelVertexOrRoot,SelEdge} + case 8: // {SelRoot, SelVertex, SelEdge} + case 9: // {SelVertex, SelVertexOrRoot, SelExternalEdge} + case 10: // {SelRoot, SelVertex, SelExternalEdge} + case 11: // {SelVertex, SelVertex, SelEdgeOrAxis} { GeoId1 = selSeq.at(0).GeoId; GeoId2 = selSeq.at(2).GeoId; GeoId3 = selSeq.at(1).GeoId; - PosId1 = selSeq.at(0).PosId; PosId2 = selSeq.at(2).PosId; + PosId1 = selSeq.at(0).PosId; PosId2 = selSeq.at(2).PosId; PosId3 = selSeq.at(1).PosId; + + if (isEdge(GeoId1,PosId1) && isVertex(GeoId3,PosId3)) { + std::swap(GeoId1,GeoId3); + std::swap(PosId1,PosId3); + } + else if (isEdge(GeoId2,PosId2) && isVertex(GeoId3,PosId3)) { + std::swap(GeoId2,GeoId3); + std::swap(PosId2,PosId3); + } if ( areAllPointsOrSegmentsFixed(Obj, GeoId1, GeoId2, GeoId3) ) { showNoConstraintBetweenFixedGeometry(); return; } + const Part::Geometry *geom = Obj->getGeometry(GeoId3); if (geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { if (GeoId1 == GeoId2 && GeoId2 == GeoId3) { @@ -6829,9 +6849,9 @@ void CmdSketcherConstrainSymmetric::applyConstraint(std::vector &selS return; } - case 7: // {SelVertex, SelVertexOrRoot, SelVertex} - case 8: // {SelVertex, SelVertex, SelVertexOrRoot} - case 9: // {SelVertexOrRoot, SelVertex, SelVertex} + case 12: // {SelVertex, SelVertexOrRoot, SelVertex} + case 13: // {SelVertex, SelVertex, SelVertexOrRoot} + case 14: // {SelVertexOrRoot, SelVertex, SelVertex} { GeoId1 = selSeq.at(0).GeoId; GeoId2 = selSeq.at(1).GeoId; GeoId3 = selSeq.at(2).GeoId; PosId1 = selSeq.at(0).PosId; PosId2 = selSeq.at(1).PosId; PosId3 = selSeq.at(2).PosId;