]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/SketchSolver/SketchSolver_Group.cpp
Salome HOME
Fix undo-redo problems on Fillet construction
[modules/shaper.git] / src / SketchSolver / SketchSolver_Group.cpp
index b51828ba9d0eb78e560f1d934f11f9801a4642a3..ca39f6e2dd8dec896a863b41ff1b2b6922e46c7e 100644 (file)
@@ -30,6 +30,7 @@
 #include <SketchPlugin_ConstraintCoincidence.h>
 #include <SketchPlugin_ConstraintMirror.h>
 #include <SketchPlugin_ConstraintRigid.h>
+#include <SketchPlugin_ConstraintTangent.h>
 #include <SketchPlugin_Feature.h>
 
 #include <SketchPlugin_Arc.h>
@@ -413,9 +414,18 @@ void SketchSolver_Group::mergeGroups(const SketchSolver_Group& theGroup)
   if (!myFeatureStorage)
     myFeatureStorage = FeatureStoragePtr(new SketchSolver_FeatureStorage);
 
+  std::vector<ConstraintPtr> aComplexConstraints;
   ConstraintConstraintMap::const_iterator aConstrIter = theGroup.myConstraints.begin();
+  // append simple constraints
   for (; aConstrIter != theGroup.myConstraints.end(); aConstrIter++)
-    changeConstraint(aConstrIter->first);
+    if (isComplexConstraint(aConstrIter->first))
+      aComplexConstraints.push_back(aConstrIter->first);
+    else
+      changeConstraint(aConstrIter->first);
+  // append complex constraints
+  std::vector<ConstraintPtr>::iterator aComplexIter = aComplexConstraints.begin();
+  for (; aComplexIter != aComplexConstraints.end(); aComplexIter++)
+      changeConstraint(*aComplexIter);
 }
 
 // ============================================================================
@@ -539,3 +549,16 @@ void SketchSolver_Group::removeConstraint(ConstraintPtr theConstraint)
   if (aCIter != myConstraints.end())
     myConstraints.erase(aCIter);
 }
+
+// ============================================================================
+//  Function: isComplexConstraint
+//  Class:    SketchSolver_Group
+//  Purpose:  verifies the constraint is complex, i.e. it needs another constraints to be created before
+// ============================================================================
+bool SketchSolver_Group::isComplexConstraint(FeaturePtr theConstraint)
+{
+  return theConstraint->getKind() == SketchPlugin_ConstraintFillet::ID() ||
+         theConstraint->getKind() == SketchPlugin_ConstraintMirror::ID() ||
+         theConstraint->getKind() == SketchPlugin_ConstraintTangent::ID();
+}
+