Salome HOME
Using shape selected for sketcher
[modules/shaper.git] / src / ParametersPlugin / ParametersPlugin_EvalListener.cpp
index 8fa3af26d26559638dbb739d7d1cbdfbf4c483a5..968c167696992d9599da1d20a57756b88352eff9 100644 (file)
@@ -5,13 +5,18 @@
  *      Author: sbh
  */
 
+#include <pyconfig.h>
+
 #include <ParametersPlugin_EvalListener.h>
+#include <ParametersPlugin_PyInterp.h>
 
 #include <Events_Error.h>
 
 #include <ModelAPI_Events.h>
 #include <ModelAPI_Tools.h>
 #include <ModelAPI_AttributeDouble.h>
+#include <GeomDataAPI_Point.h>
+#include <GeomDataAPI_Point2D.h>
 
 #include <string>
 #include <sstream>
@@ -39,6 +44,8 @@ void ParametersPlugin_EvalListener::processEvent(const std::shared_ptr<Events_Me
   if (theMessage->eventID() == kEvaluationEvent) {
     std::shared_ptr<ModelAPI_AttributeEvalMessage> aMessage =
         std::dynamic_pointer_cast<ModelAPI_AttributeEvalMessage>(theMessage);
+
+    // Double
     AttributeDoublePtr aDoubleAttribute =
         std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(aMessage->attribute());
     if (aDoubleAttribute.get()) {
@@ -51,6 +58,54 @@ void ParametersPlugin_EvalListener::processEvent(const std::shared_ptr<Events_Me
         aDoubleAttribute->setExpressionInvalid(true);
       }
     }
+
+    // Point
+    AttributePointPtr aPointAttribute =
+        std::dynamic_pointer_cast<GeomDataAPI_Point>(aMessage->attribute());
+    if (aPointAttribute.get()) {
+      std::string anError[3];
+      double aValue[3] = {
+          evaluate(aPointAttribute->textX(), anError[0]),
+          evaluate(aPointAttribute->textY(), anError[1]),
+          evaluate(aPointAttribute->textZ(), anError[2])
+      };
+      bool isValid[3] = {
+          anError[0].empty(),
+          anError[1].empty(),
+          anError[2].empty()
+      };
+      aPointAttribute->setExpressionInvalid(0, !isValid[0]);
+      aPointAttribute->setExpressionInvalid(1, !isValid[1]);
+      aPointAttribute->setExpressionInvalid(2, !isValid[2]);
+
+      aPointAttribute->setValue(
+          isValid[0] ? aValue[0] : aPointAttribute->x(),
+          isValid[1] ? aValue[1] : aPointAttribute->y(),
+          isValid[2] ? aValue[2] : aPointAttribute->z()
+      );
+    }
+
+    // Point2D
+    AttributePoint2DPtr aPoint2DAttribute =
+        std::dynamic_pointer_cast<GeomDataAPI_Point2D>(aMessage->attribute());
+    if (aPoint2DAttribute.get()) {
+      std::string anError[2];
+      double aValue[2] = {
+          evaluate(aPoint2DAttribute->textX(), anError[0]),
+          evaluate(aPoint2DAttribute->textY(), anError[1])
+      };
+      bool isValid[2] = {
+          anError[0].empty(),
+          anError[1].empty()
+      };
+      aPoint2DAttribute->setExpressionInvalid(0, !isValid[0]);
+      aPoint2DAttribute->setExpressionInvalid(1, !isValid[1]);
+
+      aPoint2DAttribute->setValue(
+          isValid[0] ? aValue[0] : aPoint2DAttribute->x(),
+          isValid[1] ? aValue[1] : aPoint2DAttribute->y()
+      );
+    }
   } else {
     Events_Error::send(std::string("ParametersPlugin python interpreter, unhandled message caught: ")
                        + theMessage->eventID().eventText());