Updated to worldwind release 20070817
[worldwind-tracker.git] / gov / nasa / worldwind / layers / RenderableLayer.java
blob1b360761d80a1d04b81bc96f8ea4b23c39d79c72
1 /*
2 Copyright (C) 2001, 2006 United States Government
3 as represented by the Administrator of the
4 National Aeronautics and Space Administration.
5 All Rights Reserved.
6 */
7 package gov.nasa.worldwind.layers;
9 import gov.nasa.worldwind.*;
10 import gov.nasa.worldwind.pick.PickSupport;
11 import gov.nasa.worldwind.render.*;
12 import gov.nasa.worldwind.util.Logging;
14 import javax.media.opengl.GL;
15 import java.awt.*;
16 import java.util.*;
18 /**
19 * @author tag
20 * @version $Id: RenderableLayer.java 2471 2007-07-31 21:50:57Z tgaskins $
22 public class RenderableLayer extends AbstractLayer
24 private Collection<Renderable> renderables = new ArrayList<Renderable>();
25 private final PickSupport pickSupport = new PickSupport();
26 private final Layer delegateOwner;
28 public RenderableLayer()
30 this.delegateOwner = null;
33 public RenderableLayer(Layer delegateOwner)
35 this.delegateOwner = delegateOwner;
38 public void setRenderables(Iterable<Renderable> shapeIterator)
40 this.renderables = new ArrayList<Renderable>();
42 if (shapeIterator == null)
43 return;
45 for (Renderable renderable : shapeIterator)
47 this.renderables.add(renderable);
51 public void addRenderable(Renderable renderable)
53 if (renderable == null)
55 String msg = Logging.getMessage("nullValue.Shape");
56 Logging.logger().severe(msg);
57 throw new IllegalArgumentException(msg);
60 this.renderables.add(renderable);
63 public void removeRenderable(Renderable renderable)
65 if (renderable == null)
67 String msg = Logging.getMessage("nullValue.Shape");
68 Logging.logger().severe(msg);
69 throw new IllegalArgumentException(msg);
72 this.renderables.remove(renderable);
75 public Collection<Renderable> getRenderables()
77 return this.renderables;
80 public void dispose()
82 for (Renderable renderable : this.renderables)
84 if (renderable instanceof Disposable)
85 ((Disposable) renderable).dispose();
89 @Override
90 protected void doPick(DrawContext dc, java.awt.Point pickPoint)
92 this.pickSupport.clearPickList();
93 this.pickSupport.beginPicking(dc);
95 for (Renderable renderable : this.renderables)
97 float[] inColor = new float[4];
98 dc.getGL().glGetFloatv(GL.GL_CURRENT_COLOR, inColor, 0);
99 Color color = dc.getUniquePickColor();
100 dc.getGL().glColor3ub((byte) color.getRed(), (byte) color.getGreen(), (byte) color.getBlue());
102 renderable.render(dc);
104 dc.getGL().glColor4fv(inColor, 0);
106 if (renderable instanceof Locatable)
108 this.pickSupport.addPickableObject(color.getRGB(), renderable,
109 ((Locatable) renderable).getPosition(), false);
111 else
113 this.pickSupport.addPickableObject(color.getRGB(), renderable);
117 this.pickSupport.resolvePick(dc, pickPoint, this.delegateOwner != null ? this.delegateOwner : this);
118 this.pickSupport.endPicking(dc);
121 @Override
122 protected void doRender(DrawContext dc)
124 for (Renderable renderable : this.renderables)
126 renderable.render(dc);
130 public Layer getDelegateOwner()
132 return delegateOwner;
135 @Override
136 public String toString()
138 return Logging.getMessage("layers.RenderableLayer.Name");