+
+ // 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()
+ );
+ }