Worldwind public release 0.2
[worldwind-tracker.git] / gov / nasa / worldwind / layers / RenderableLayer.java
bloba46cd70ba8feda3766a3714eece1f34961a48b86
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.*;
11 import javax.media.opengl.*;
12 import java.util.*;
13 import java.awt.*;
15 /**
16 * @author tag
17 * @version $Id: RenderableLayer.java 1435 2007-04-11 02:03:35Z tgaskins $
19 public class RenderableLayer extends AbstractLayer
21 private Collection<Renderable> renderables = new ArrayList<Renderable>();
22 private final PickSupport pickSupport = new PickSupport();
23 private final Layer delegateOwner;
25 public RenderableLayer()
27 this.delegateOwner = null;
30 public RenderableLayer(Layer delegateOwner)
32 this.delegateOwner = delegateOwner;
35 public void setRenderables(Iterable<Renderable> shapeIterator)
37 this.renderables = new ArrayList<Renderable>();
39 if (shapeIterator == null)
40 return;
42 for (Renderable renderable : shapeIterator)
44 this.renderables.add(renderable);
48 public void addRenderable(Renderable renderable)
50 if (renderable == null)
52 String msg = WorldWind.retrieveErrMsg("nullValue.Shape");
53 WorldWind.logger().log(java.util.logging.Level.FINE, msg);
54 throw new IllegalArgumentException(msg);
57 this.renderables.add(renderable);
60 public void removeRenderable(Renderable renderable)
62 if (renderable == null)
64 String msg = WorldWind.retrieveErrMsg("nullValue.Shape");
65 WorldWind.logger().log(java.util.logging.Level.FINE, msg);
66 throw new IllegalArgumentException(msg);
69 this.renderables.remove(renderable);
72 public Collection<Renderable> getRenderables()
74 return this.renderables;
77 public void dispose()
79 for (Renderable renderable : this.renderables)
81 if (renderable instanceof Disposable)
82 ((Disposable) renderable).dispose();
86 @Override
87 protected void doPick(DrawContext dc, java.awt.Point pickPoint)
89 this.pickSupport.clearPickList();
90 this.pickSupport.beginPicking(dc);
92 for (Renderable renderable : this.renderables)
94 float[] inColor = new float[4];
95 dc.getGL().glGetFloatv(GL.GL_CURRENT_COLOR, inColor, 0);
96 Color color = dc.getUniquePickColor();
97 dc.getGL().glColor3ub((byte) color.getRed(), (byte) color.getGreen(), (byte) color.getBlue());
99 renderable.render(dc);
101 dc.getGL().glColor4fv(inColor, 0);
103 if (renderable instanceof Locatable)
105 this.pickSupport.addPickableObject(color.getRGB(), renderable,
106 ((Locatable) renderable).getPosition(), false);
108 else
110 this.pickSupport.addPickableObject(color.getRGB(), renderable);
114 this.pickSupport.resolvePick(dc, pickPoint, this.delegateOwner != null ? this.delegateOwner : this);
115 this.pickSupport.endPicking(dc);
118 @Override
119 protected void doRender(DrawContext dc)
121 for (Renderable renderable : this.renderables)
123 renderable.render(dc);
127 public Layer getDelegateOwner()
129 return delegateOwner;
132 @Override
133 public String toString()
135 return WorldWind.retrieveErrMsg("layers.RenderableLayer.Name");