static BuildLayerSlice decodeSlice(XmlElement e, Project proj) { BuildLayerSlice slice = null; if (e != null) { slice = new BuildLayerSlice(); if (!string.IsNullOrEmpty(e.GetAttribute("min_range"))) { slice.setMinRange(float.Parse(e.GetAttribute("min_range"))); } if (!string.IsNullOrEmpty(e.GetAttribute("max_range"))) { slice.setMaxRange(float.Parse(e.GetAttribute("max_range"))); } #if TODO_DANI // required filter graph: string graph = e.GetAttribute("graph"); slice.setFilterGraph(proj.getFilterGraph(graph)); //TODO: warning? #endif // optional source: slice.setSource(proj.getSource(e.GetAttribute("source"))); #if TODO_DANI // properties particular to this slice: XmlNodeList props = e.GetElementsByTagName("property"); foreach (XmlNode i in props) { XmlElement k_e = (XmlElement)i; string name = k_e.GetAttribute("name"); string value = k_e.GetAttribute("value"); slice.getProperties().Add(new Property(name, value)); } #endif // now decode sub-slices: XmlNodeList slices = e.GetElementsByTagName("slice"); foreach (XmlNode i in slices) { BuildLayerSlice child = decodeSlice((XmlElement)i, proj); if (child != null) { slice.getSubSlices().Add(child); } } } return(slice); }
static XmlElement encodeSlice(XmlDocument doc, BuildLayerSlice slice) { XmlElement e = null; if (slice != null) { e = doc.CreateElement("slice"); if (slice.getMinRange() > 0) { Property p = new Property("ignore", slice.getMinRange()); e.SetAttribute("min_range", p.getValue()); } if (slice.getMaxRange() < float.MaxValue) { Property p = new Property("ignore", slice.getMaxRange()); e.SetAttribute("max_range", p.getValue()); } e.SetAttribute("graph", slice.getFilterGraph().getName()); if (slice.getSource() != null) { e.SetAttribute("source", slice.getSource().getName()); } foreach (Property it in slice.getProperties()) { e.AppendChild(encodeProperty(doc, it)); } foreach (BuildLayerSlice it in slice.getSubSlices()) { e.AppendChild(encodeSlice(doc, it)); } } return(e); }
/*** Class methods ***************************************************/ bool Builder.addSlicesToMapLayer(BuildLayerSliceList slices, Properties env_properties, MapLayer map_layer, ResourcePackager default_packager, uint depth, Session session, Source parent_source) { foreach (BuildLayerSlice i in slices) { BuildLayerSlice slice = i; if (slice.getSource() != null && !build(slice.getSource(), session)) { // osgGIS.warn() // << "Unable to build source \"" << slice.getSource().getName() << "\" or one of its dependencies." // << std.endl; return(false); } Source slice_source = slice.getSource() != null?slice.getSource() : parent_source; ResourcePackager packager = default_packager ? default_packager.clone() : null; if (packager != null) { packager.setMaxTextureSize( slice.getProperties().getIntValue("max_texture_size", default_packager.getMaxTextureSize())); packager.setCompressTextures( slice.getProperties().getBoolValue("compress_textures", default_packager.getCompressTextures())); packager.setInlineTextures( slice.getProperties().getBoolValue("inline_textures", default_packager.getInlineTextures())); } if (slice_source != null) { FeatureLayer feature_layer = Registry.instance().createFeatureLayer( slice_source.getAbsoluteURI()); if (feature_layer == null) { //osgGIS.warn() << "Cannot access source \"" << slice_source.getName() << std.endl; return(false); } map_layer.push( feature_layer, slice.getFilterGraph(), env_properties, packager.get(), slice.getMinRange(), slice.getMaxRange(), true, depth, null); } // now add any sub-slice children: if (!addSlicesToMapLayer(slice.getSubSlices(), env_properties, map_layer, packager.get(), depth + 1, session, slice_source)) { return(false); } } return(true); }
static BuildLayer decodeLayer(XmlElement e, Project proj) { BuildLayer layer = null; if (e != null) { layer = new BuildLayer(); #if TODO_DANI layer.setBaseURI(proj.getBaseURI()); #endif layer.setName(e.GetAttribute("name")); string type = e.GetAttribute("type"); if (type == "correlated") { layer.setType(BuildLayer.LayerType.TYPE_CORRELATED); } else if (type == "gridded") { layer.setType(BuildLayer.LayerType.TYPE_GRIDDED); } else if (type == "quadtree" || type == "new") { layer.setType(BuildLayer.LayerType.TYPE_QUADTREE); } string source = e.GetAttribute("source"); layer.setSource(proj.getSource(source)); string terrain = e.GetAttribute("terrain"); layer.setTerrain(proj.getTerrain(terrain)); layer.setTargetPath(e.GetAttribute("target")); XmlNodeList slices = e.GetElementsByTagName("slice"); foreach (XmlNode i in slices) { BuildLayerSlice slice = decodeSlice((XmlElement)i, proj); if (slice != null) { layer.getSlices().Add(slice); } } #if TODO_DANI XmlNodeList props = e.GetElementsByTagName("property"); foreach (XmlNode i in props) { XmlElement k_e = (XmlElement)i; string name = k_e.GetAttribute("name"); string value = k_e.GetAttribute("value"); layer.getProperties().Add(new Property(name, value)); } XmlNodeList env_props = e.GetElementsByTagName("env_property"); foreach (XmlNode i in env_props) { XmlElement k_e = (XmlElement)i; string name = k_e.GetAttribute("name"); string value = k_e.GetAttribute("value"); layer.getEnvProperties().Add(new Property(name, value)); } #endif } return(layer); }