2 Copyright (C) 2001, 2006 United States Government
3 as represented by the Administrator of the
4 National Aeronautics and Space Administration.
7 package gov
.nasa
.worldwind
.layers
;
9 import gov
.nasa
.worldwind
.*;
11 import javax
.media
.opengl
.*;
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)
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
;
79 for (Renderable renderable
: this.renderables
)
81 if (renderable
instanceof Disposable
)
82 ((Disposable
) renderable
).dispose();
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);
110 this.pickSupport
.addPickableObject(color
.getRGB(), renderable
);
114 this.pickSupport
.resolvePick(dc
, pickPoint
, this.delegateOwner
!= null ?
this.delegateOwner
: this);
115 this.pickSupport
.endPicking(dc
);
119 protected void doRender(DrawContext dc
)
121 for (Renderable renderable
: this.renderables
)
123 renderable
.render(dc
);
127 public Layer
getDelegateOwner()
129 return delegateOwner
;
133 public String
toString()
135 return WorldWind
.retrieveErrMsg("layers.RenderableLayer.Name");