Revision 14908

View differences:

import/ext3D/trunk/ext3D/src/com/iver/ai2/gvsig3d/map3d/layers/FLayers3D.java
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
	/**
import/ext3D/trunk/ext3D/src/com/iver/ai2/gvsig3d/map3d/layers/Layer3DProps.java
25 25
	public void setLayer(FLayer layer)
26 26
	{
27 27
		// TODO intialize properties from layer
28
		m_stage = 0;
28
		m_stage = -1; // not set
29 29
		m_type = layer3DImage;
30 30
		// find unique name for cache
31 31
		// TODO: use full path of source or service

Also available in: Unified diff