Salome HOME
Implementation of python expressions evaluation
[modules/shaper.git] / src / ParametersPlugin / ParametersPlugin_Parameter.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
2
3 // File:        ParametersPlugin_Parameter.cpp
4 // Created:     23 MArch 2015
5 // Author:      sbh
6
7 #include "ParametersPlugin_Parameter.h"
8 #include <ParametersPlugin_PyInterp.h>
9
10 #include <ModelAPI_AttributeString.h>
11 #include <ModelAPI_ResultParameter.h>
12 #include <ModelAPI_AttributeDouble.h>
13
14
15 ParametersPlugin_Parameter::ParametersPlugin_Parameter()
16 {
17   myInterp = new ParametersPlugin_PyInterp();
18   myInterp->initialize();
19 }
20
21 ParametersPlugin_Parameter::~ParametersPlugin_Parameter()
22 {
23   delete myInterp;
24 }
25
26 void ParametersPlugin_Parameter::initAttributes()
27 {
28   data()->addAttribute(ParametersPlugin_Parameter::VARIABLE_ID(),
29                        ModelAPI_AttributeString::typeId());
30   data()->addAttribute(ParametersPlugin_Parameter::EXPRESSION_ID(),
31                        ModelAPI_AttributeString::typeId());
32 }
33
34 void ParametersPlugin_Parameter::execute()
35 {
36   std::string anExpression = string(ParametersPlugin_Parameter::EXPRESSION_ID())->value();
37   if(anExpression.empty())
38     return;
39   ResultParameterPtr aParameterResult = document()->createParameter(data());
40   //AttributeDoublePtr anAttr = aParameterResult->data()->real(ModelAPI_ResultParameter::VALUE());
41
42   double aValue = evaluate(anExpression);
43   //anAttr->setValue(aValue);
44   setResult(aParameterResult);
45
46 }
47
48 double ParametersPlugin_Parameter::evaluate(std::string theExpression)
49 {
50   std::list<std::string> anExprParams = myInterp->compile(theExpression);
51   // find expression's params in the model
52   // todo
53   // myInterp->extendLocalContext();
54   std::string outError;
55   return myInterp->evaluate(theExpression, outError);
56
57 }