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
.*;
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
;
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)
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
;
82 for (Renderable renderable
: this.renderables
)
84 if (renderable
instanceof Disposable
)
85 ((Disposable
) renderable
).dispose();
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);
113 this.pickSupport
.addPickableObject(color
.getRGB(), renderable
);
117 this.pickSupport
.resolvePick(dc
, pickPoint
, this.delegateOwner
!= null ?
this.delegateOwner
: this);
118 this.pickSupport
.endPicking(dc
);
122 protected void doRender(DrawContext dc
)
124 for (Renderable renderable
: this.renderables
)
126 renderable
.render(dc
);
130 public Layer
getDelegateOwner()
132 return delegateOwner
;
136 public String
toString()
138 return Logging
.getMessage("layers.RenderableLayer.Name");