Salome HOME
Implementation of python expressions evaluation
[modules/shaper.git] / src / ParametersPlugin / ParametersPlugin_Parameter.cpp
index 498b83d9a65c1583aa2766838d52635d17f6e64d..745d0c7651c185f9a5170549da7cf454c0ec9455 100644 (file)
@@ -5,18 +5,53 @@
 // Author:      sbh
 
 #include "ParametersPlugin_Parameter.h"
+#include <ParametersPlugin_PyInterp.h>
+
 #include <ModelAPI_AttributeString.h>
+#include <ModelAPI_ResultParameter.h>
+#include <ModelAPI_AttributeDouble.h>
+
 
 ParametersPlugin_Parameter::ParametersPlugin_Parameter()
 {
+  myInterp = new ParametersPlugin_PyInterp();
+  myInterp->initialize();
+}
+
+ParametersPlugin_Parameter::~ParametersPlugin_Parameter()
+{
+  delete myInterp;
 }
 
 void ParametersPlugin_Parameter::initAttributes()
 {
-  data()->addAttribute(ParametersPlugin_Parameter::VARIABLE_ID(), ModelAPI_AttributeString::type());
-  data()->addAttribute(ParametersPlugin_Parameter::EXPRESSION_ID(), ModelAPI_AttributeString::type());
+  data()->addAttribute(ParametersPlugin_Parameter::VARIABLE_ID(),
+                       ModelAPI_AttributeString::typeId());
+  data()->addAttribute(ParametersPlugin_Parameter::EXPRESSION_ID(),
+                       ModelAPI_AttributeString::typeId());
 }
 
 void ParametersPlugin_Parameter::execute()
 {
+  std::string anExpression = string(ParametersPlugin_Parameter::EXPRESSION_ID())->value();
+  if(anExpression.empty())
+    return;
+  ResultParameterPtr aParameterResult = document()->createParameter(data());
+  //AttributeDoublePtr anAttr = aParameterResult->data()->real(ModelAPI_ResultParameter::VALUE());
+
+  double aValue = evaluate(anExpression);
+  //anAttr->setValue(aValue);
+  setResult(aParameterResult);
+
+}
+
+double ParametersPlugin_Parameter::evaluate(std::string theExpression)
+{
+  std::list<std::string> anExprParams = myInterp->compile(theExpression);
+  // find expression's params in the model
+  // todo
+  // myInterp->extendLocalContext();
+  std::string outError;
+  return myInterp->evaluate(theExpression, outError);
+
 }