Revision 14907

View differences:

import/ext3D/trunk/ext3D/src/com/iver/ai2/gvsig3d/map3d/layers/FLayers3D.java
1 1
package com.iver.ai2.gvsig3d.map3d.layers;
2 2

  
3 3
import java.awt.Point;
4
import java.io.File;
4 5

  
5
import javax.swing.JOptionPane;
6

  
6
import com.iver.ai2.cache.CacheServiceException;
7
import com.iver.ai2.cache.TileNum;
8
import com.iver.ai2.gvsig3d.cacheservices.FLayerCacheService;
9
import com.iver.ai2.gvsig3d.map3d.MapContext3D;
7 10
import com.iver.cit.gvsig.fmap.DriverException;
8 11
import com.iver.cit.gvsig.fmap.MapContext;
12
import com.iver.cit.gvsig.fmap.ViewPort;
9 13
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
10 14
import com.iver.cit.gvsig.fmap.layers.FLayer;
15
import com.iver.cit.gvsig.fmap.layers.FLayers;
11 16
import com.iver.cit.gvsig.fmap.layers.FLyrDefault;
12
import com.iver.cit.gvsig.fmap.layers.FLayers;
13 17
import com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent;
14 18
import com.iver.cit.gvsig.fmap.layers.LegendListener;
15 19
import com.iver.cit.gvsig.fmap.layers.XMLException;
16 20
import com.iver.cit.gvsig.fmap.layers.layerOperations.Classifiable;
17 21
import com.iver.cit.gvsig.fmap.rendering.LegendChangedEvent;
18
import com.iver.cit.gvsig.fmap.ViewPort;
19
import com.iver.cit.gvsig.project.Project;
20 22
import com.iver.utiles.XMLEntity;
21 23

  
22
import com.iver.ai2.cache.TileNum;
23
import com.iver.ai2.cache.CacheServiceException;
24
import com.iver.ai2.gvsig3d.cacheservices.FLayerCacheService;
25
import com.iver.ai2.gvsig3d.map3d.MapContext3D;
26

  
24
import es.upv.ai2.libjosg.planets.Planet;
27 25
import es.upv.ai2.libjosg.planets.TileEvent;
28 26
import es.upv.ai2.libjosg.planets.TileListener;
29
import es.upv.ai2.libjosg.planets.Planet;
30 27
import es.upv.ai2.libjosg.viewer.Viewer;
31 28

  
32 29
public class FLayers3D extends FLayers implements TileListener, LegendListener {
......
34 31
	// JOSG library objects
35 32
	private Planet m_planet;
36 33
	private Viewer m_canvas3d;
34
	private String m_cacheDir = "c:/data/cache/"; // TEST
35
	private boolean m_bSettingLayers = false;
37 36

  
38 37
	/**
39 38
	 * Constructor that can be used to create a MapContext containing the FLayers3D
......
54 53

  
55 54
	public void setPlanet(Planet planet) {
56 55
		m_planet = planet;
56
		refreshLayersInPlanet();
57 57
	}
58 58

  
59 59
    public void setViewer(Viewer viewer) {
......
65 65

  
66 66
    protected void callLayerAdded(LayerCollectionEvent event)
67 67
    {
68
    	layerAddedEvent(event);
68
    	if (!m_bSettingLayers)
69
    	{
70
    	    FLayer layer = event.getAffectedLayer();
71
    	    layerAddedEvent(layer);
72
    	}
69 73
    	super.callLayerAdded(event);
70 74
    }
71 75

  
72 76
    protected void callLayerRemoved(LayerCollectionEvent event)
73 77
    {
74
    	layerRemovedEvent(event);
78
    	FLayer layer = event.getAffectedLayer();
79
    	layerRemovedEvent(layer);
75 80
    	super.callLayerRemoved(event);
76 81
    }
77 82

  
78
    protected void layerAddedEvent(LayerCollectionEvent e) {
83
    protected void layerAddedEvent(FLayer layer) {
79 84

  
80
    	FLayer layer = e.getAffectedLayer();
81

  
82 85
    	if (layer instanceof Classifiable) {
83 86
    		Classifiable legendLyr = (Classifiable)layer;
84 87
    		legendLyr.addLegendListener((LegendListener)this);
85 88
    	}
86 89

  
87
    	if (layer instanceof FLyrDefault) {
88
    		FLyrDefault baseLayer = (FLyrDefault)layer;
89
    	    if (baseLayer.getProperty("3DLayerExtension") == null) {
90
           	    Layer3DProps props3D = new Layer3DProps();
91
           	    props3D.setLayer(layer);
92
        	    baseLayer.setProperty("3DLayerExtension", props3D);
93
        	    refreshPlanet(props3D);
94
    	    }
95
    	}
90
    	Refresh3DProps(layer);
96 91
    }
97 92

  
98
    protected void layerRemovedEvent(LayerCollectionEvent e) {
93
    protected void layerRemovedEvent(FLayer layer) {
99 94

  
100
    	FLayer layer = e.getAffectedLayer();
101

  
102 95
    	if (layer instanceof Classifiable) {
103 96
    		Classifiable legendLyr = (Classifiable)layer;
104 97
    		legendLyr.removeLegendListener((LegendListener)this);
......
111 104
     * @param e DOCUMENT ME!
112 105
     */
113 106
    public void legendChanged(LegendChangedEvent e) {
114
        FLayer lyr = (FLayer)e.getLayer();
115
        //Layer3DProps props3D = (Layer3DProps)m_layerProps.get(lyr);
116
        refreshPlanet(null /*props3D*/);
107

  
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 113
    }
118 114

  
119
    protected void refreshPlanet(Layer3DProps props)
115
    protected void cleanLayersInPlanet(){
116
      // TODO
117
    }
118

  
119
    protected void refreshLayersInPlanet() {
120

  
121
		cleanLayersInPlanet();
122
		//calculateStages();
123
		// TODO: adapt to new layer iterator, when ready
124
		for (int iLayer=0; iLayer<layers.size(); iLayer++)
125
		{
126
			FLayer lyr = (FLayer)layers.get(iLayer);
127
			Refresh3DProps(lyr);
128
		}
129
    }
130

  
131
    protected void Refresh3DProps(FLayer layer) {
132

  
133
		if (layer instanceof FLyrDefault) {
134
			Layer3DProps props3D = getLayer3DProps(layer);
135
		    refreshLayerInPlanet(props3D);
136
		}
137
    }
138

  
139
    protected Layer3DProps getLayer3DProps(FLayer layer)
120 140
    {
141
		FLyrDefault baseLayer = (FLyrDefault)layer;
142
		Object propsObj = baseLayer.getProperty("3DLayerExtension");
143
		Layer3DProps props3D=null;
144
		if (propsObj != null)
145
		{
146
			try {
147
			    props3D = (Layer3DProps)propsObj;
148
			} catch (Exception e) {
149
			    props3D = null;
150
			}
151
		}
152
		if (props3D == null) {
153
	   	    props3D = new Layer3DProps();
154
	   	    props3D.setLayer(layer);
155
		    baseLayer.setProperty("3DLayerExtension", props3D);
156
	    }
157
		else {
158
			props3D.setDirty(true); // to be refreshed in planet
159
		}
160
		return props3D;
161
    }
162

  
163
    protected void refreshLayerInPlanet(Layer3DProps props)
164
    {
165
    	if (props==null)
166
    		return;
167

  
121 168
    	if (m_planet == null)
122 169
    		return; // view not opened yet
123 170

  
124
    	boolean isTexture = true;
125
		if (isTexture)
171
    	// clear cache
172

  
173
    	if (props.getCacheDirty()) {
174
    		String layerCacheDir = m_cacheDir + props.getCacheName();
175
    		removeCache(layerCacheDir);
176
    		props.setCacheDirty(false);
177
    	}
178

  
179
    	// refresh layer in planet
180

  
181
    	if (!props.getDirty())
182
    		return;
183

  
184
    	int type = props.getType();
185
    	if (type==Layer3DProps.layer3DImage)
126 186
		{
127
	    	int stage = 0;
187
	    	int stage = props.getStage();
128 188
		    m_planet.refreshTextureInfo(stage);
129 189
		}
130
		else
190
		else if (type==Layer3DProps.layer3DElevation)
131 191
			m_planet.refreshMDTInfo();
192

  
193
    	props.setDirty(false);
132 194
    }
133 195

  
196
    private static boolean removeCache(String folder) {
197
    	File dir = new File(folder);
198
        if (dir.isDirectory()) {
199
            String[] children = dir.list();
200
            for (int i=0; i<children.length; i++) {
201
                boolean success = removeCache(folder + "/" + children[i]);
202
                if (!success) {
203
                    return false;
204
                }
205
            }
206
        }
207

  
208
        // The directory is now empty so delete it
209
        return dir.delete();
210
    }
211

  
134 212
	/**
135 213
	 * Method of TileListener interface to respond to tile requests
136 214
	 *
......
180 258
				new CMSFileRasterService(m_planet.getPlanetName(), rasterFileName);*/
181 259

  
182 260
			FLayerCacheService layerCacheServ =
183
				new FLayerCacheService(m_planet.getPlanetName(), "test", lyr);
261
				new FLayerCacheService(m_planet.getPlanetName(),
262
						               getLayer3DProps(lyr).getCacheName(),
263
						               lyr);
264
			layerCacheServ.setCacheRootDir(m_cacheDir);
184 265

  
185 266
			Point tileIndices = new Point(evt.getX(), evt.getY());
186 267
			TileNum tileNum = new TileNum(evt.getLevel(), tileIndices);
......
248 329
	 * @throws DriverIOException
249 330
	 */
250 331
	public void setXMLEntity(XMLEntity xml) throws XMLException {
332
		m_bSettingLayers = true;
251 333
		super.setXMLEntity(xml);
334
		m_bSettingLayers = false;
252 335

  
253
		// A?adir cosas de 3D aqu?
336
		refreshLayersInPlanet();
254 337
	}
255 338

  
256 339
	/**
......
264 347
	 * @throws DriverIOException
265 348
	 */
266 349

  
267
	public void setXMLEntity03(XMLEntity xml) throws XMLException {
350
	/*public void setXMLEntity03(XMLEntity xml) throws XMLException {
268 351
		super.setXMLEntity03(xml);
269 352

  
270 353
		// A?adir cosas de 3D aqu?
271
	}
354
	}*/
272 355

  
273 356
}
import/ext3D/trunk/ext3D/src/com/iver/ai2/gvsig3d/map3d/layers/Layer3DProps.java
15 15

  
16 16
	protected int m_stage; // index of texture layer inside tile (?)
17 17
	protected int m_type;  // see type enumeration above
18
	protected String m_cacheName="default";
19
	protected boolean m_bDirty=true;
20
	protected boolean m_bCacheDirty=false;
18 21

  
19 22
	public Layer3DProps() {
20 23
	}
......
24 27
		// TODO intialize properties from layer
25 28
		m_stage = 0;
26 29
		m_type = layer3DImage;
30
		// find unique name for cache
31
		// TODO: use full path of source or service
32
        m_cacheName = layer.getName();
27 33
	}
28 34

  
29 35
    public void setType(int type) {
......
42 48
    	return m_stage;
43 49
    }
44 50

  
51
    public String getCacheName() {
52
    	return m_cacheName;
53
    }
54

  
55
	public boolean getDirty() {
56
		return m_bDirty;
57
	}
58

  
59
	public void setDirty(boolean dirty) {
60
		m_bDirty = dirty;
61
	}
62

  
63
	public boolean getCacheDirty() {
64
		return m_bCacheDirty;
65
	}
66

  
67
	public void setCacheDirty(boolean dirty) {
68
		m_bCacheDirty = dirty;
69
	}
70

  
45 71
    // IPersistance
46 72

  
47 73
    public String getClassName()
......
55 81

  
56 82
		xml.putProperty("type", m_type);
57 83
		xml.putProperty("stage", m_stage);
84
		xml.putProperty("cacheName", m_cacheName);
58 85

  
59 86
		return xml;
60 87
    }
......
65 92
			m_type = xml.getIntProperty("type");
66 93
		if (xml.contains("stage"))
67 94
			m_stage = xml.getIntProperty("stage");
95
		if (xml.contains("cacheName"))
96
			m_cacheName = xml.getStringProperty("cacheName");
68 97
    }
69 98

  
99

  
70 100
}

Also available in: Unified diff