public void makeOrderedRenderable(DrawContext dc, AirspaceRenderer renderer) { if (dc == null) { String message = Logging.getMessage("nullValue.DrawContextIsNull"); Logging.logger().severe(message); throw new IllegalArgumentException(message); } if (renderer == null) { String message = Logging.getMessage("nullValue.RendererIsNull"); Logging.logger().severe(message); throw new IllegalArgumentException(message); } for (Layer layer : this.layers) { if (!layer.isVisible()) continue; if (!layer.isAirspaceVisible(dc)) continue; // The layer is responsible for applying its own attributes, so we override its attributes // with our own just // before rendering. layer.setAttributes(this.getAttributes()); // Create an ordered renderable that draws each layer, but specifies this Cake as the picked // object. OrderedRenderable or = renderer.createOrderedRenderable(dc, layer, layer.computeEyeDistance(dc), this); dc.addOrderedRenderable(or); } }
public boolean isAirspaceVisible(DrawContext dc) { if (dc == null) { String message = Logging.getMessage("nullValue.DrawContextIsNull"); Logging.logger().severe(message); throw new IllegalArgumentException(message); } // If the parent Cake is not visible, then return false immediately without testing the child // layers. if (!super.isAirspaceVisible(dc)) return false; boolean visible = false; // The parent Cake is visible. Since the parent Cake's extent potentially contains volumes where // no child // geometry exists, test that at least one of the child layers are visible. for (Layer l : this.layers) { if (l.isAirspaceVisible(dc)) { visible = true; break; } } return visible; }
/** * Create a {@link TiledImageLayer} layer described by an XML layer description. * * @param domElement the XML element describing the layer to create. The element must inculde a * service name identifying the type of service to use to retrieve layer data. Recognized * service types are "Offline", "WWTileService" and "OGC:WMS". * @param params any parameters to apply when creating the layer. * @return a new layer * @throws WWUnrecognizedException if the service type given in the describing element is * unrecognized. */ protected Layer createTiledImageLayer(Element domElement, AVList params) { Layer layer; String serviceName = WWXML.getText(domElement, "Service/@serviceName"); if ("Offline".equals(serviceName)) { layer = new BasicTiledImageLayer(domElement, params); } else if ("WWTileService".equals(serviceName)) { layer = new BasicTiledImageLayer(domElement, params); } else if (OGCConstants.WMS_SERVICE_NAME.equals(serviceName)) { layer = new WMSTiledImageLayer(domElement, params); } else if (AVKey.SERVICE_NAME_LOCAL_RASTER_SERVER.equals(serviceName)) { layer = new LocalRasterServerLayer(domElement, params); } else { String msg = Logging.getMessage("generic.UnrecognizedServiceName", serviceName); throw new WWUnrecognizedException(msg); } // // String name = layer.getStringValue(AVKey.DISPLAY_NAME); // System.out.println(name); String actuate = WWXML.getText(domElement, "@actuate"); layer.setEnabled(actuate != null && actuate.equals("onLoad")); return layer; }
public Position getReferencePosition() { ArrayList<LatLon> locations = new ArrayList<LatLon>(this.layers.size()); for (Layer l : this.layers) { locations.add(l.getCenter()); } return this.computeReferencePosition(locations, this.getAltitudes()); }
@Override protected void doGetRestorableState(RestorableSupport rs, RestorableSupport.StateObject context) { super.doGetRestorableState(rs, context); RestorableSupport.StateObject so = rs.addStateObject(context, "layers"); for (Layer layer : this.layers) { RestorableSupport.StateObject lso = rs.addStateObject(so, "layer"); layer.doGetRestorableState(rs, lso); } }
/** * Create a layer described by an XML layer description. * * @param domElement the XML element describing the layer to create. * @param params any parameters to apply when creating the layer. * @return a new layer * @throws WWUnrecognizedException if the layer type or service type given in the describing * element is unrecognized. * @see #createTiledImageLayer(org.w3c.dom.Element, gov.nasa.worldwind.avlist.AVList). */ protected Layer createFromLayerDocument(Element domElement, AVList params) { String className = WWXML.getText(domElement, "@className"); if (className != null && className.length() > 0) { Layer layer = (Layer) WorldWind.createComponent(className); String actuate = WWXML.getText(domElement, "@actuate"); layer.setEnabled(WWUtil.isEmpty(actuate) || actuate.equals("onLoad")); WWXML.invokePropertySetters(layer, domElement); return layer; } AVList props = WWXML.copyProperties(domElement, null); if (props != null) { // Copy params and add any properties for this layer to the copy if (params != null) props.setValues(params); params = props; } Layer layer; String href = WWXML.getText(domElement, "@href"); if (href != null && href.length() > 0) { Object o = this.createFromConfigSource(href, params); if (o == null) return null; if (!(o instanceof Layer)) { String msg = Logging.getMessage("LayerFactory.UnexpectedTypeForLayer", o.getClass().getName()); throw new WWRuntimeException(msg); } layer = (Layer) o; } else { String layerType = WWXML.getText(domElement, "@layerType"); if (layerType != null && layerType.equals("TiledImageLayer")) { layer = this.createTiledImageLayer(domElement, params); } else { String msg = Logging.getMessage("generic.UnrecognizedLayerType", layerType); throw new WWUnrecognizedException(msg); } } if (layer != null) { String actuate = WWXML.getText(domElement, "@actuate"); layer.setEnabled(actuate != null && actuate.equals("onLoad")); WWXML.invokePropertySetters(layer, domElement); } return layer; }
protected Extent computeExtent(Globe globe, double verticalExaggeration) { List<Layer> cakeLayers = this.getLayers(); if (cakeLayers == null || cakeLayers.isEmpty()) { return null; } else if (cakeLayers.size() == 1) { return cakeLayers.get(0).computeExtent(globe, verticalExaggeration); } else { ArrayList<Box> extents = new ArrayList<Box>(); for (Layer layer : cakeLayers) { extents.add(layer.computeExtent(globe, verticalExaggeration)); } return Box.union(extents); } }
public void doRenderExtent(DrawContext dc) { if (dc == null) { String message = Logging.getMessage("nullValue.DrawContextIsNull"); Logging.logger().severe(message); throw new IllegalArgumentException(message); } // Called by AirspaceRenderer's drawNow and pickNow methods. These methods do not use the // ordered renderable // queue, so TrackAirspace must explicitly initiate drawing its legs. When airspace rendering is // initiated via // AirspaceRenderer drawOrdered or pickOrdered, TrackAirspace does not add an ordered renderable // for itself, so // this method is never initiated. for (Layer l : this.layers) { l.renderExtent(dc); } }
protected void doMoveTo(Position oldRef, Position newRef) { if (oldRef == null) { String message = "nullValue.OldRefIsNull"; Logging.logger().severe(message); throw new IllegalArgumentException(message); } if (newRef == null) { String message = "nullValue.NewRefIsNull"; Logging.logger().severe(message); throw new IllegalArgumentException(message); } super.doMoveTo(oldRef, newRef); for (Layer l : this.layers) { l.doMoveTo(oldRef, newRef); } this.setExtentOutOfDate(); }
@Override protected void doRestoreState(RestorableSupport rs, RestorableSupport.StateObject context) { super.doRestoreState(rs, context); RestorableSupport.StateObject so = rs.getStateObject(context, "layers"); if (so == null) return; RestorableSupport.StateObject[] lsos = rs.getAllStateObjects(so, "layer"); if (lsos == null || lsos.length == 0) return; ArrayList<Layer> layerList = new ArrayList<Layer>(lsos.length); for (RestorableSupport.StateObject lso : lsos) { if (lso != null) { Layer layer = new Layer(); layer.doRestoreState(rs, lso); layerList.add(layer); } } this.setLayers(layerList); }
public void setEnableCaps(boolean enable) { for (Layer l : this.layers) { l.setEnableCaps(enable); } }
public void setTerrainConforming(boolean lowerTerrainConformant, boolean upperTerrainConformant) { super.setTerrainConforming(lowerTerrainConformant, upperTerrainConformant); for (Layer l : this.layers) { l.setTerrainConforming(lowerTerrainConformant, upperTerrainConformant); } }