Salome HOME
registerNotObligatory is not necessary if this property is set in XML.
[modules/shaper.git] / src / SketchSolver / SketchSolver_Storage.cpp
index 8370549174a16d7acc09de33e539a67599f88123..c63d28e437a662c61818cf2c85b400e6f0f3516d 100644 (file)
@@ -12,6 +12,9 @@
 #include <ModelAPI_AttributeRefList.h>
 #include <SketchPlugin_Arc.h>
 #include <SketchPlugin_Circle.h>
+#include <SketchPlugin_Line.h>
+#include <SketchPlugin_Point.h>
+#include <SketchPlugin_IntersectionPoint.h>
 #include <SketchPlugin_ConstraintRigid.h>
 
 
@@ -80,6 +83,26 @@ void SketchSolver_Storage::addConstraint(
     theConstraint->data()->blockSendAttributeUpdated(myEventsBlocked);
 }
 
+static std::list<AttributePtr> pointAttributes(FeaturePtr theFeature)
+{
+  std::list<AttributePtr> aPoints;
+  if (theFeature->getKind() == SketchPlugin_Arc::ID()) {
+    aPoints.push_back(theFeature->attribute(SketchPlugin_Arc::CENTER_ID()));
+    aPoints.push_back(theFeature->attribute(SketchPlugin_Arc::START_ID()));
+    aPoints.push_back(theFeature->attribute(SketchPlugin_Arc::END_ID()));
+  }
+  else if (theFeature->getKind() == SketchPlugin_Circle::ID())
+    aPoints.push_back(theFeature->attribute(SketchPlugin_Circle::CENTER_ID()));
+  else if (theFeature->getKind() == SketchPlugin_Line::ID()) {
+    aPoints.push_back(theFeature->attribute(SketchPlugin_Line::START_ID()));
+    aPoints.push_back(theFeature->attribute(SketchPlugin_Line::END_ID()));
+  }
+  else if (theFeature->getKind() == SketchPlugin_Point::ID() ||
+           theFeature->getKind() == SketchPlugin_IntersectionPoint::ID())
+    aPoints.push_back(theFeature->attribute(SketchPlugin_Point::COORD_ID()));
+  return aPoints;
+}
+
 void SketchSolver_Storage::addEntity(FeaturePtr       theFeature,
                                      EntityWrapperPtr theSolverEntity)
 {
@@ -90,8 +113,7 @@ void SketchSolver_Storage::addEntity(FeaturePtr       theFeature,
 
   if (!theSolverEntity) {
     // feature links to the empty entity, add its attributes
-    std::list<AttributePtr> aPntAttrs =
-        theFeature->data()->attributes(GeomDataAPI_Point2D::typeId());
+    std::list<AttributePtr> aPntAttrs = pointAttributes(theFeature);
     std::list<AttributePtr>::const_iterator anAttrIt = aPntAttrs.begin();
     for (; anAttrIt != aPntAttrs.end(); ++anAttrIt)
       addEntity(*anAttrIt, EntityWrapperPtr());
@@ -131,8 +153,7 @@ bool SketchSolver_Storage::update(FeaturePtr theFeature, const GroupID& theGroup
     // Reserve the feature in the map of features (do not want to add several copies of it)
     myFeatureMap[theFeature] = aRelated;
     // Firstly, create/update its attributes
-    std::list<AttributePtr> anAttrs =
-        theFeature->data()->attributes(GeomDataAPI_Point2D::typeId());
+    std::list<AttributePtr> anAttrs = pointAttributes(theFeature);
     std::list<AttributePtr>::const_iterator anIt = anAttrs.begin();
     for (; anIt != anAttrs.end(); ++anIt) {
       isUpdated = update(*anIt, theGroup) || isUpdated;
@@ -335,7 +356,7 @@ bool SketchSolver_Storage::isUsed(FeaturePtr theFeature) const
       if (::isUsed(*aCWIt, theFeature))
         return true;
   // check attributes
-  std::list<AttributePtr> anAttrList = theFeature->data()->attributes(GeomDataAPI_Point2D::typeId());
+  std::list<AttributePtr> anAttrList = pointAttributes(theFeature);
   std::list<AttributePtr>::const_iterator anIt = anAttrList.begin();
   for (; anIt != anAttrList.end(); ++anIt)
     if (isUsed(*anIt))