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(); }
double Feature::eval( NumericExpression& expr ) const { const NumericExpression::Variables& vars = expr.variables(); for( NumericExpression::Variables::const_iterator i = vars.begin(); i != vars.end(); ++i ) expr.set( *i, getDouble(i->first, 0.0)); //osgEarth::as<double>(getAttr(i->first),0.0) ); return expr.eval(); }