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.
This commit is contained in:
Abdullah Tahiri
2020-12-27 08:19:23 +01:00
parent 38cafc57a5
commit 67e5f9c3e9

View File

@@ -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<SelIdPair> &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<SelIdPair> &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;