void KML_Feature::build( const Config& conf, KMLContext& cx, osg::Node* working ) { KML_Object::build(conf, cx, working); // subclass feature is built; now add feature level data if available if ( working ) { // parse the visibility to show/hide the item by default: if ( conf.hasValue("visibility") ) working->setNodeMask( conf.value<bool>("visibility",true) == true ? ~0 : 0 ); // parse a "LookAt" element (stores a viewpoint) AnnotationData* anno = getOrCreateAnnotationData(working); anno->setName( conf.value("name") ); anno->setDescription( conf.value("description") ); const Config& lookat = conf.child("lookat"); if ( !lookat.empty() ) { Viewpoint vp( lookat.value<double>("longitude", 0.0), lookat.value<double>("latitude", 0.0), lookat.value<double>("altitude", 0.0), lookat.value<double>("heading", 0.0), -lookat.value<double>("tilt", 45.0), lookat.value<double>("range", 10000.0) ); anno->setViewpoint( vp ); } } }
void KML_Feature::build( xml_node<>* node, KMLContext& cx, osg::Node* working ) { KML_Object::build(node, cx, working); // subclass feature is built; now add feature level data if available if ( working ) { // parse the visibility to show/hide the item by default: std::string visibility = getValue(node, "visibility"); if ( !visibility.empty() ) working->setNodeMask( as<int>(visibility, 1) == 1 ? ~0 : 0 ); // parse a "LookAt" element (stores a viewpoint) AnnotationData* anno = getOrCreateAnnotationData(working); anno->setName( getValue(node, "name") ); anno->setDescription( getValue(node, "description") ); xml_node<>* lookat = node->first_node("lookat", 0, false); if ( lookat ) { Viewpoint vp; vp.focalPoint() = GeoPoint( cx._srs.get(), as<double>(getValue(lookat, "longitude"), 0.0), as<double>(getValue(lookat, "latitude"), 0.0), as<double>(getValue(lookat, "altitude"), 0.0), ALTMODE_ABSOLUTE ); vp.heading() = as<double>(getValue(lookat, "heading"), 0.0); vp.pitch() = -as<double>(getValue(lookat, "tilt"), 45.0), vp.range() = as<double>(getValue(lookat, "range"), 10000.0); anno->setViewpoint( vp ); } xml_node<>* extdata = node->first_node("extendeddata", 0, false); if ( extdata ) { xml_node<>* data = extdata->first_node("data", 0, false); if ( data ) { for (xml_node<>* n = data->first_node(); n; n = n->next_sibling()) { working->setUserValue(getValue(n, "name"), getValue(n, "value")); } } } } }
TrackNode* createTrack(TrackNodeFieldSchema& schema, osg::Image* image, const std::string& name, MapNode* mapNode, const osg::Vec3d& center, double radius, double time, TrackSimVector& trackSims) { TrackNode* track = new TrackNode(mapNode, GeoPoint(mapNode->getMapSRS(),center,ALTMODE_ABSOLUTE), image, schema); track->setFieldValue(TRACK_FIELD_NAME, name); AnnotationData* data = new AnnotationData(); data->setName(name); data->setViewpoint(osgEarth::Viewpoint(center, 0.0, -90.0, 1e5)); track->setAnnotationData( data ); trackSims.push_back(new TrackSim(track, center, radius, time, mapNode)); return track; }