- double aValue = evaluate(aDoubleAttribute->text(), 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<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])
+ int aValue = (int)evaluate(anAttribute->text(), anError, anAttribute->owner()->document());
+ bool isValid = anError.empty();
+ if (isValid)
+ anAttribute->setCalculatedValue(aValue);
+ anAttribute->setUsedParameters(isValid ? toSet(myInterp->compile(anAttribute->text())) : std::set<std::string>());
+ anAttribute->setExpressionInvalid(!isValid);
+ anAttribute->setExpressionError(anAttribute->text().empty() ? "" : anError);
+ } else
+ if (aMessage->attribute()->attributeType() == ModelAPI_AttributeDouble::typeId()) {
+ AttributeDoublePtr anAttribute =
+ std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(aMessage->attribute());
+ std::string anError;
+ double aValue = evaluate(anAttribute->text(), anError, anAttribute->owner()->document());
+ bool isValid = anError.empty();
+ if (isValid)
+ anAttribute->setCalculatedValue(aValue);
+ anAttribute->setUsedParameters(isValid ? toSet(myInterp->compile(anAttribute->text())) : std::set<std::string>());
+ anAttribute->setExpressionInvalid(!isValid);
+ anAttribute->setExpressionError(anAttribute->text().empty() ? "" : anError);
+ } else
+ if (aMessage->attribute()->attributeType() == GeomDataAPI_Point::typeId()) {
+ AttributePointPtr anAttribute =
+ std::dynamic_pointer_cast<GeomDataAPI_Point>(aMessage->attribute());
+ std::string aText[] = {
+ anAttribute->textX(),
+ anAttribute->textY(),
+ anAttribute->textZ()