const std::string& Feature::eval( StringExpression& expr, FilterContext const* context ) const { const StringExpression::Variables& vars = expr.variables(); for( StringExpression::Variables::const_iterator i = vars.begin(); i != vars.end(); ++i ) { std::string val = ""; AttributeTable::const_iterator ai = _attrs.find(toLower(i->first)); if (ai != _attrs.end()) { val = ai->second.getString(); } else if (context) { //No attr found, look for script ScriptEngine* engine = context->getSession()->getScriptEngine(); if (engine) { ScriptResult result = engine->run(i->first, this, context); if (result.success()) val = result.asString(); else OE_WARN << LC << "Feature Script error on '" << expr.expr() << "': " << result.message() << std::endl; } } expr.set( *i, val ); } return expr.eval(); }
double Feature::eval( NumericExpression& expr, FilterContext const* context ) const { const NumericExpression::Variables& vars = expr.variables(); for( NumericExpression::Variables::const_iterator i = vars.begin(); i != vars.end(); ++i ) { double val = 0.0; AttributeTable::const_iterator ai = _attrs.find(toLower(i->first)); if (ai != _attrs.end()) { val = ai->second.getDouble(0.0); } else if (context) { //No attr found, look for script ScriptEngine* engine = context->getSession()->getScriptEngine(); if (engine) { ScriptResult result = engine->run(i->first, this, context); if (result.success()) val = result.asDouble(); else { OE_WARN << LC << "Feature Script error on '" << expr.expr() << "': " << result.message() << std::endl; } } } expr.set( *i, val); //osgEarth::as<double>(getAttr(i->first),0.0) ); } return expr.eval(); }