15 |
15 |
import com.iver.cit.gvsig.fmap.layers.FLayers;
|
16 |
16 |
import com.iver.cit.gvsig.fmap.layers.FLyrDefault;
|
17 |
17 |
import com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent;
|
|
18 |
import com.iver.cit.gvsig.fmap.layers.LayerPositionEvent;
|
18 |
19 |
import com.iver.cit.gvsig.fmap.layers.LegendListener;
|
19 |
20 |
import com.iver.cit.gvsig.fmap.layers.XMLException;
|
20 |
21 |
import com.iver.cit.gvsig.fmap.layers.layerOperations.Classifiable;
|
|
22 |
import com.iver.cit.gvsig.fmap.rendering.Legend;
|
21 |
23 |
import com.iver.cit.gvsig.fmap.rendering.LegendChangedEvent;
|
|
24 |
import com.iver.cit.gvsig.fmap.rendering.VectorialLegend;
|
22 |
25 |
import com.iver.utiles.XMLEntity;
|
23 |
26 |
|
24 |
27 |
import es.upv.ai2.libjosg.planets.Planet;
|
... | ... | |
53 |
56 |
|
54 |
57 |
public void setPlanet(Planet planet) {
|
55 |
58 |
m_planet = planet;
|
56 |
|
refreshLayersInPlanet();
|
|
59 |
refreshLayersInPlanet(true);
|
57 |
60 |
}
|
58 |
61 |
|
59 |
62 |
public void setViewer(Viewer viewer) {
|
... | ... | |
80 |
83 |
super.callLayerRemoved(event);
|
81 |
84 |
}
|
82 |
85 |
|
|
86 |
protected void callLayerMoved(LayerPositionEvent event)
|
|
87 |
{
|
|
88 |
super.callLayerMoved(event);
|
|
89 |
refreshLayersInPlanet(false);
|
|
90 |
}
|
|
91 |
|
83 |
92 |
protected void layerAddedEvent(FLayer layer) {
|
84 |
93 |
|
85 |
94 |
if (layer instanceof Classifiable) {
|
86 |
95 |
Classifiable legendLyr = (Classifiable)layer;
|
87 |
96 |
legendLyr.addLegendListener((LegendListener)this);
|
88 |
97 |
}
|
89 |
|
|
90 |
|
Refresh3DProps(layer);
|
|
98 |
refreshLayersInPlanet(false);
|
91 |
99 |
}
|
92 |
100 |
|
93 |
101 |
protected void layerRemovedEvent(FLayer layer) {
|
... | ... | |
96 |
104 |
Classifiable legendLyr = (Classifiable)layer;
|
97 |
105 |
legendLyr.removeLegendListener((LegendListener)this);
|
98 |
106 |
}
|
|
107 |
refreshLayersInPlanet(false);
|
99 |
108 |
}
|
100 |
109 |
|
101 |
110 |
/**
|
... | ... | |
105 |
114 |
*/
|
106 |
115 |
public void legendChanged(LegendChangedEvent e) {
|
107 |
116 |
|
108 |
|
FLyrDefault lyr = (FLyrDefault)e.getLayer();
|
109 |
|
Layer3DProps props3D = (Layer3DProps)lyr.getProperty("3DLayerExtension");
|
110 |
|
props3D.setCacheDirty(true);
|
111 |
|
props3D.setDirty(true);
|
112 |
|
refreshLayerInPlanet(props3D);
|
|
117 |
VectorialLegend newLegend = e.getNewLegend();
|
|
118 |
// find layer whose legend changed
|
|
119 |
// TODO: adapt to new layer iterator, when ready
|
|
120 |
FLayer found=null;
|
|
121 |
for (int iLayer=0; iLayer<layers.size(); iLayer++) {
|
|
122 |
FLayer lyr = (FLayer)(layers.get(iLayer));
|
|
123 |
if (lyr instanceof Classifiable) {
|
|
124 |
Classifiable classLyr = (Classifiable)lyr;
|
|
125 |
Legend legend = classLyr.getLegend();
|
|
126 |
if (legend instanceof VectorialLegend) {
|
|
127 |
if ((VectorialLegend)legend==newLegend) {
|
|
128 |
found = lyr;
|
|
129 |
break;
|
|
130 |
}
|
|
131 |
}
|
|
132 |
}
|
|
133 |
}
|
|
134 |
|
|
135 |
if (found!=null) {
|
|
136 |
Layer3DProps props3D = getLayer3DProps(found);
|
|
137 |
props3D.setCacheDirty(true);
|
|
138 |
props3D.setDirty(true);
|
|
139 |
refreshLayerInPlanet(props3D);
|
|
140 |
}
|
113 |
141 |
}
|
114 |
142 |
|
115 |
143 |
protected void cleanLayersInPlanet(){
|
116 |
144 |
// TODO
|
117 |
145 |
}
|
118 |
146 |
|
119 |
|
protected void refreshLayersInPlanet() {
|
|
147 |
protected void refreshLayersInPlanet(boolean cleanPlanet) {
|
120 |
148 |
|
121 |
|
cleanLayersInPlanet();
|
122 |
|
//calculateStages();
|
|
149 |
if (cleanPlanet)
|
|
150 |
cleanLayersInPlanet();
|
|
151 |
calculateStages();
|
123 |
152 |
// TODO: adapt to new layer iterator, when ready
|
124 |
153 |
for (int iLayer=0; iLayer<layers.size(); iLayer++)
|
125 |
154 |
{
|
126 |
155 |
FLayer lyr = (FLayer)layers.get(iLayer);
|
127 |
|
Refresh3DProps(lyr);
|
|
156 |
refresh3DProps(lyr);
|
128 |
157 |
}
|
129 |
158 |
}
|
130 |
159 |
|
131 |
|
protected void Refresh3DProps(FLayer layer) {
|
|
160 |
protected void refresh3DProps(FLayer layer) {
|
132 |
161 |
|
133 |
162 |
if (layer instanceof FLyrDefault) {
|
134 |
163 |
Layer3DProps props3D = getLayer3DProps(layer);
|
... | ... | |
154 |
183 |
props3D.setLayer(layer);
|
155 |
184 |
baseLayer.setProperty("3DLayerExtension", props3D);
|
156 |
185 |
}
|
157 |
|
else {
|
158 |
|
props3D.setDirty(true); // to be refreshed in planet
|
159 |
|
}
|
|
186 |
|
160 |
187 |
return props3D;
|
161 |
188 |
}
|
162 |
189 |
|
... | ... | |
171 |
198 |
// clear cache
|
172 |
199 |
|
173 |
200 |
if (props.getCacheDirty()) {
|
174 |
|
String layerCacheDir = m_cacheDir + props.getCacheName();
|
|
201 |
String layerCacheDir = m_cacheDir + m_planet.getPlanetName() + "/" + props.getCacheName();
|
175 |
202 |
removeCache(layerCacheDir);
|
176 |
203 |
props.setCacheDirty(false);
|
177 |
204 |
}
|
... | ... | |
193 |
220 |
props.setDirty(false);
|
194 |
221 |
}
|
195 |
222 |
|
196 |
|
private static boolean removeCache(String folder) {
|
|
223 |
private boolean removeCache(String folder) {
|
197 |
224 |
File dir = new File(folder);
|
198 |
225 |
if (dir.isDirectory()) {
|
199 |
226 |
String[] children = dir.list();
|
... | ... | |
209 |
236 |
return dir.delete();
|
210 |
237 |
}
|
211 |
238 |
|
|
239 |
private void calculateStages() {
|
|
240 |
|
|
241 |
int imageStage = 0;
|
|
242 |
int terrainStage = 0;
|
|
243 |
for (int iLayer=0; iLayer<layers.size(); iLayer++)
|
|
244 |
{
|
|
245 |
FLayer lyr = (FLayer)layers.get(iLayer);
|
|
246 |
Layer3DProps props3D = getLayer3DProps(lyr);
|
|
247 |
if (props3D.getType()==Layer3DProps.layer3DImage) {
|
|
248 |
if (imageStage != props3D.getStage()) {
|
|
249 |
props3D.setStage(imageStage);
|
|
250 |
props3D.setDirty(true);
|
|
251 |
}
|
|
252 |
imageStage++;
|
|
253 |
} else if (props3D.getType()==Layer3DProps.layer3DElevation) {
|
|
254 |
if (terrainStage != props3D.getStage()) {
|
|
255 |
props3D.setStage(terrainStage);
|
|
256 |
props3D.setDirty(true);
|
|
257 |
}
|
|
258 |
terrainStage++;
|
|
259 |
}
|
|
260 |
}
|
|
261 |
}
|
|
262 |
|
212 |
263 |
/**
|
213 |
264 |
* Method of TileListener interface to respond to tile requests
|
214 |
265 |
*
|
... | ... | |
333 |
384 |
super.setXMLEntity(xml);
|
334 |
385 |
m_bSettingLayers = false;
|
335 |
386 |
|
336 |
|
refreshLayersInPlanet();
|
|
387 |
// TODO: adapt to new layer iterator, when ready
|
|
388 |
for (int iLayer=0; iLayer<layers.size(); iLayer++)
|
|
389 |
{
|
|
390 |
FLayer lyr = (FLayer)layers.get(iLayer);
|
|
391 |
if (lyr instanceof Classifiable) {
|
|
392 |
Classifiable legendLyr = (Classifiable)lyr;
|
|
393 |
legendLyr.addLegendListener((LegendListener)this);
|
|
394 |
}
|
|
395 |
}
|
|
396 |
|
|
397 |
refreshLayersInPlanet(true);
|
337 |
398 |
}
|
338 |
399 |
|
339 |
400 |
/**
|