X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FParametersPlugin%2FParametersPlugin_EvalListener.cpp;h=a8aa64e89f1fa4187716f3a9f70df807283f3bc9;hb=2452f6e679a2c0a4f261dac25e4b6592f0a540c1;hp=ff05cd51027ccdcd8c5a95ee0ed2b7cfe392c386;hpb=f6e1c2edc336a593bfab00c3402920e378a903d1;p=modules%2Fshaper.git diff --git a/src/ParametersPlugin/ParametersPlugin_EvalListener.cpp b/src/ParametersPlugin/ParametersPlugin_EvalListener.cpp index ff05cd510..a8aa64e89 100644 --- a/src/ParametersPlugin/ParametersPlugin_EvalListener.cpp +++ b/src/ParametersPlugin/ParametersPlugin_EvalListener.cpp @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include #include @@ -39,6 +41,8 @@ void ParametersPlugin_EvalListener::processEvent(const std::shared_ptreventID() == kEvaluationEvent) { std::shared_ptr aMessage = std::dynamic_pointer_cast(theMessage); + + // Double AttributeDoublePtr aDoubleAttribute = std::dynamic_pointer_cast(aMessage->attribute()); if (aDoubleAttribute.get()) { @@ -46,8 +50,59 @@ void ParametersPlugin_EvalListener::processEvent(const std::shared_ptrtext(), anError); if (anError.empty()) { aDoubleAttribute->setValue(aValue); + aDoubleAttribute->setExpressionInvalid(false); + } else { // set feature as invalid-parameter arguments + aDoubleAttribute->setExpressionInvalid(true); } } + + // Point + AttributePointPtr aPointAttribute = + std::dynamic_pointer_cast(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(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()); @@ -63,7 +118,8 @@ double ParametersPlugin_EvalListener::evaluate(const std::string& theExpression, std::list::iterator it = anExprParams.begin(); for ( ; it != anExprParams.end(); it++) { double aValue; - if (!ModelAPI_Tools::findVariable(*it, aValue)) continue; + ResultParameterPtr aParamRes; + if (!ModelAPI_Tools::findVariable(*it, aValue, aParamRes)) continue; std::ostringstream sstream; sstream << aValue; @@ -75,4 +131,3 @@ double ParametersPlugin_EvalListener::evaluate(const std::string& theExpression, myInterp->clearLocalContext(); return result; } -