void KML_Model::parseStyle(xml_node<>* node, KMLContext& cx, Style& style) { ModelSymbol* model = 0L; std::string url = KMLUtils::parseLink(node); if ( !url.empty() ) { if ( !model ) model = style.getOrCreate<ModelSymbol>(); model->url()->setLiteral( url ); model->url()->setURIContext( URIContext(cx._referrer) ); } xml_node<>* scale = node->first_node("scale", 0, false); if (scale) { if ( !model ) model = style.getOrCreate<ModelSymbol>(); //TODO: Support XYZ scale instead of single value model->scale() = as<double>(getValue(scale, "x"), 1.0); } xml_node<>* orientation = node->first_node("orientation", 0, false); if (orientation) { if ( !model ) model = style.getOrCreate<ModelSymbol>(); double h = as<double>(getValue(orientation, "heading"), 0.0); if ( !osg::equivalent(h, 0.0) ) model->heading() = NumericExpression( h ); double p = as<double>(getValue(orientation, "tilt"), 0.0); if ( !osg::equivalent(p, 0.0) ) model->pitch() = NumericExpression( p ); double r = as<double>(getValue(orientation, "roll"), 0.0); if ( !osg::equivalent(r, 0.0) ) model->roll() = NumericExpression( r ); } // Read and store file path aliases from a KML ResourceMap. xml_node<>* resource_map = node->first_node("resourcemap", 0, false); if ( resource_map ) { for (xml_node<>* n = resource_map->first_node("alias", 0, false); n; n = n->next_sibling("alias", 0, false)) { std::string source = getValue(n, "sourcehref"); std::string target = getValue(n, "targethref"); if ( !source.empty() || !target.empty() ) { if ( !model ) model = style.getOrCreate<ModelSymbol>(); model->uriAliasMap()->insert( source, target ); } } } KML_Geometry::parseStyle(node, cx, style); }
void KML_Model::parseStyle(const Config& conf, KMLContext& cx, Style& style) { ModelSymbol* model = 0L; std::string url = KMLUtils::parseLink(conf); if ( !url.empty() ) { if ( !model ) model = style.getOrCreate<ModelSymbol>(); model->url()->setLiteral( url ); model->url()->setURIContext( URIContext(conf.referrer()) ); } Config scale = conf.child("scale"); if (!scale.empty()) { if ( !model ) model = style.getOrCreate<ModelSymbol>(); //TODO: Support XYZ scale instead of single value model->scale() = scale.value("x", 1.0); } Config orientation = conf.child("orientation"); if (!orientation.empty()) { if ( !model ) model = style.getOrCreate<ModelSymbol>(); double h = orientation.value("heading", 0); if ( !osg::equivalent(h, 0.0) ) model->heading() = NumericExpression( h ); double p = orientation.value("tilt", 0); if ( !osg::equivalent(p, 0.0) ) model->pitch() = NumericExpression( p ); double r = orientation.value("roll", 0); if ( !osg::equivalent(r, 0.0) ) model->roll() = NumericExpression( r ); } // Read and store file path aliases from a KML ResourceMap. Config resource_map = conf.child("resourcemap"); if ( !resource_map.empty() ) { const ConfigSet aliases = resource_map.children("alias"); for( ConfigSet::const_iterator i = aliases.begin(); i != aliases.end(); ++i ) { std::string source = i->value("sourcehref"); std::string target = i->value("targethref"); if ( !source.empty() || !target.empty() ) { if ( !model ) model = style.getOrCreate<ModelSymbol>(); model->uriAliasMap()->insert( source, target ); } } } KML_Geometry::parseStyle(conf, cx, style); }