]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_EntityDestroyer.cpp
Salome HOME
Fix incorrect processing of the copied entities after the "Multi" constraint has...
[modules/shaper.git] / src / SketchSolver / PlaneGCSSolver / PlaneGCSSolver_EntityDestroyer.cpp
index 97a3b83f05bf067f26295d53d0cf5299c70c04df..7b93798ffe41b6ca4b29a9dc8d974efc86b70c68 100644 (file)
@@ -9,79 +9,13 @@
 #include <PlaneGCSSolver_PointWrapper.h>
 #include <PlaneGCSSolver_ScalarWrapper.h>
 #include <PlaneGCSSolver_EdgeWrapper.h>
-
-static void destroyScalar(const EntityWrapperPtr& theEntity, GCS::SET_pD& theParams)
-{
-  ScalarWrapperPtr aScalar = std::dynamic_pointer_cast<PlaneGCSSolver_ScalarWrapper>(theEntity);
-  theParams.insert(aScalar->scalar());
-}
-
-static void destroyPoint(const EntityWrapperPtr& theEntity, GCS::SET_pD& theParams)
-{
-  std::shared_ptr<PlaneGCSSolver_PointWrapper> aPoint =
-      std::dynamic_pointer_cast<PlaneGCSSolver_PointWrapper>(theEntity);
-  theParams.insert(aPoint->point()->x);
-  theParams.insert(aPoint->point()->y);
-}
-
-static void destroyLine(const EntityWrapperPtr& theEntity, GCS::SET_pD& theParams)
-{
-  std::shared_ptr<PlaneGCSSolver_EdgeWrapper> anEntity =
-      std::dynamic_pointer_cast<PlaneGCSSolver_EdgeWrapper>(theEntity);
-  std::shared_ptr<GCS::Line> aLine = std::dynamic_pointer_cast<GCS::Line>(anEntity->entity());
-  theParams.insert(aLine->p1.x);
-  theParams.insert(aLine->p1.y);
-  theParams.insert(aLine->p2.x);
-  theParams.insert(aLine->p2.y);
-}
-
-static void destroyCircle(const EntityWrapperPtr& theEntity, GCS::SET_pD& theParams)
-{
-  std::shared_ptr<PlaneGCSSolver_EdgeWrapper> anEntity =
-      std::dynamic_pointer_cast<PlaneGCSSolver_EdgeWrapper>(theEntity);
-  std::shared_ptr<GCS::Circle> aCirc = std::dynamic_pointer_cast<GCS::Circle>(anEntity->entity());
-  theParams.insert(aCirc->center.x);
-  theParams.insert(aCirc->center.y);
-  theParams.insert(aCirc->rad);
-}
-
-static void destroyArc(const EntityWrapperPtr& theEntity, GCS::SET_pD& theParams)
-{
-  std::shared_ptr<PlaneGCSSolver_EdgeWrapper> anEntity =
-      std::dynamic_pointer_cast<PlaneGCSSolver_EdgeWrapper>(theEntity);
-  std::shared_ptr<GCS::Arc> anArc = std::dynamic_pointer_cast<GCS::Arc>(anEntity->entity());
-  theParams.insert(anArc->center.x);
-  theParams.insert(anArc->center.y);
-  theParams.insert(anArc->start.x);
-  theParams.insert(anArc->start.y);
-  theParams.insert(anArc->end.x);
-  theParams.insert(anArc->end.y);
-  theParams.insert(anArc->startAngle);
-  theParams.insert(anArc->endAngle);
-  theParams.insert(anArc->rad);
-}
+#include <PlaneGCSSolver_Tools.h>
 
 void PlaneGCSSolver_EntityDestroyer::remove(const EntityWrapperPtr& theEntity)
 {
-  GCS::SET_pD& aParamSet = theEntity->isExternal() ? myParamsOutOfStorage : myParams;
-
-  switch (theEntity->type()) {
-  case ENTITY_SCALAR:
-  case ENTITY_ANGLE:
-    destroyScalar(theEntity, aParamSet);
-    break;
-  case ENTITY_POINT:
-    destroyPoint(theEntity, aParamSet);
-    break;
-  case ENTITY_LINE:
-    destroyLine(theEntity, aParamSet);
-    break;
-  case ENTITY_CIRCLE:
-    destroyCircle(theEntity, aParamSet);
-    break;
-  case ENTITY_ARC:
-    destroyArc(theEntity, aParamSet);
-    break;
-  default: break;
-  }
+  GCS::SET_pD aParameters = PlaneGCSSolver_Tools::parameters(theEntity);
+  if (theEntity->isExternal())
+    myParamsOutOfStorage.insert(aParameters.begin(), aParameters.end());
+  else
+    myParams.insert(aParameters.begin(), aParameters.end());
 }