Revision 318

View differences:

2.0/trunk/org.gvsig.gvsig3d.osg/org.gvsig.gvsig3d.osg.io/src/main/java/org/gvsig/gvsig3d/osg/io/OSGStoreProvider.java
19 19
 * MA  02110-1301, USA.
20 20
 *
21 21
 */
22
package org.gvsig.gvsig3d.osg.io;
22
package org.gvsig.gvsig3d.osg.io; 
23 23

  
24 24

  
25 25
import java.io.File;
......
77 77
public class OSGStoreProvider extends AbstractMemoryStoreProvider implements
78 78
		ResourceConsumer {
79 79

  
80
	private static final Logger logger = LoggerFactory
80
	private static final Logger logger = LoggerFactory 
81 81
			.getLogger(OSGStoreProvider.class);
82 82

  
83 83
	public static final String NAME = "OSG";
84
	public static final String DESCRIPTION = "OSG file";
84
	public static final String DESCRIPTION = "OSG file";  
85 85

  
86 86
	public static final String METADATA_DEFINITION_NAME = NAME;
87 87

  
88 88
	private ResourceProvider resource;
89 89
	private SimpleTaskStatus taskStatus;
90 90

  
91
	private Node _osgNode;
91
	private Node _osgNode; 
92 92
	
93 93
	private long counterNewsOIDs = 0;
94 94
	private Envelope envelope;
......
193 193

  
194 194
	}
195 195

  
196
	public void open() throws OpenException {
196
	public void open() throws OpenException { 
197 197
		if (_osgNode != null) {
198 198
			return;
199 199
		}
2.0/trunk/org.gvsig.gvsig3d.app/org.gvsig.gvsig3d.app.extension/src/main/java/org/gvsig/gvsig3d/app/gui/panels/Raster3DPanel.java
185 185
		actionEnabled();
186 186

  
187 187
		boolean enabled = isLayerElevation();
188

  
188
		
189 189
		elevation.check.setSelected(enabled);
190 190
		elevation.getSlider().setEnabled(enabled);
191 191
		elevation.getTextField().setEnabled(enabled);
192
		elevation.getSlider().setValue((int)
193
				((MapContext3D) lyr.getMapContext()).getLayer3DProps(lyr)
194
						.getVerticalEx());
192
		elevation.getSlider().setValue(
193
				(int) ((MapContext3D) lyr.getMapContext()).getLayer3DProps(lyr)
194
						.getVerticalEx()-1);
195 195

  
196
		int numBands = lyr.getDataStore().getBandCount();
197
		String[] list = new String[numBands];
198

  
199
		for (int i = 1; i < numBands; i++)
200
			bandsCombo.addItem(Integer.toString(i));
201
		
202
		bandsCombo.setSelectedIndex(getActiveBandElevation());
203

  
196 204
	}
197 205

  
206
	private int getActiveBandElevation() {
207
		return ((MapContext3D) lyr.getMapContext()).getLayer3DProps(lyr)
208
				.getElevationBand();
209

  
210
	}
211

  
198 212
	private void actionEnabled() {
199 213
		if (lyr == null) {
200 214
			setVisible(false);
......
210 224
	 */
211 225
	public void accept() {
212 226

  
213
		if (elevation.check.isSelected() && !isLayerElevation()) {
227
		if (elevation.check.isSelected() /*&& !isLayerElevation()*/) {
214 228

  
215 229
			MapContext3D mc = ((MapContext3D) getLayer().getMapContext());
216 230
			Layer3DProps props = mc.getLayer3DProps(getLayer());
217 231
			mc.removeLayerToTerrain(getLayer());
232
			float value = elevation.getSlider().getValue();
218 233
			props.setType(Layer3DProps.layer3DElevation);
219
			props.setVerticalEx(elevation.getSlider().getValue());
234
			props.setVerticalEx(value+1);
235
			props.setElevationBand(Integer.parseInt((String) bandsCombo
236
					.getSelectedItem()));
220 237
			mc.addLayerToTerrain(getLayer(), true);
221 238
		}
222 239

  
......
227 244
			Layer3DProps props = mc.getLayer3DProps(getLayer());
228 245
			mc.removeLayerToTerrain(getLayer());
229 246
			props.setType(Layer3DProps.layer3DImage);
247
			props.setElevationBand(Integer.parseInt((String) bandsCombo
248
					.getSelectedItem()));
230 249
			mc.addLayerToTerrain(getLayer(), true);
231 250

  
232 251
		}
......
280 299

  
281 300
	public JComboBox getNumBandSelectorCombo() {
282 301
		if (bandsCombo == null) {
283
			String[] list = { "1", "2", "3" };
302

  
303
			String[] list = { "0" };
304

  
284 305
			bandsCombo = new JComboBox(list);
285 306
			bandsCombo.setSelectedIndex(0);
286 307
			bandsCombo.setPreferredSize(new java.awt.Dimension(70, 60));
2.0/trunk/org.gvsig.gvsig3d.app/org.gvsig.gvsig3d.app.extension/src/main/java/org/gvsig/gvsig3d/app/view/ViewProperties3D.java
39 39
import org.gvsig.gvsig3d.app.extension.DefaultView3DPanel;
40 40
import org.gvsig.gvsig3d.map3d.Layer3DProps;
41 41
import org.gvsig.gvsig3d.map3d.layers.FLayers3D;
42
import org.gvsig.osgvp.exceptions.node.ChildIndexOutOfBoundsExceptions;
42 43
import org.gvsig.osgvp.terrain.HeightfieldLayer;
43 44
import org.gvsig.osgvp.terrain.Terrain;
45
import org.gvsig.osgvp.terrain.TerrainViewer;
44 46

  
45 47
/**
46 48
 * Dialogo donde se muestran las propiedades de una vista
47 49
 * 
48 50
 * @author AI2
49 51
 */
50
public class ViewProperties3D extends GridBagLayoutPanel  implements IWindow{
52
public class ViewProperties3D extends GridBagLayoutPanel implements IWindow {
51 53

  
52 54
	/**
53 55
	 * 
......
61 63

  
62 64
	private boolean _editable;
63 65
	private boolean _projectEditable = false;
64
	
65
	
66 66

  
67 67
	private JTextField txtName;
68 68
	private JTextField txtDate;
......
81 81
	private JButton okButton;
82 82
	private JButton cancelButton;
83 83
	private JPanel jPanelSelectProjectionView;
84
	
85
	
84

  
86 85
	/**
87 86
	 * This is the default constructor
88 87
	 * 
......
474 473
					_view3D.setVerticalExaggeration(Float.parseFloat(verEx
475 474
							.getText()));
476 475
					_view3D.setProjection(_proj);
477
					setPropertiesCreated(true);
476

  
478 477
					PluginServices.getMDIManager().closeWindow(
479 478
							ViewProperties3D.this);
480 479
				}
......
523 522

  
524 523
	public void setVerticalEx(float exa) {
525 524

  
526
		SingleLayerIterator lyrIterator = new SingleLayerIterator(
527
				(FLayers3D) _view3D.getMapContext().getLayers());
528
		while (lyrIterator.hasNext()) {
529
			FLayer lyr = lyrIterator.next();
525
		// SingleLayerIterator lyrIterator = new SingleLayerIterator(
526
		// (FLayers3D) _view3D.getMapContext().getLayers());
527
		// while (lyrIterator.hasNext()) {
528
		// FLayer lyr = lyrIterator.next();
529
		//
530
		// Object propsObj = lyr.getProperty("3DLayerExtension");
531
		// Layer3DProps props = null;
532
		// if (propsObj != null) {
533
		// try {
534
		// props = (Layer3DProps) propsObj;
535
		// } catch (Exception e) {
536
		// props = null;
537
		// }
538
		// }
539
		//
540
		// int type = props.getType();
541
		// if (exa != props.getVerticalEx()) {
542
		// if (type == Layer3DProps.layer3DElevation) {
543
		// props.setVerticalEx(exa);
544
		// HeightfieldLayer layer = (HeightfieldLayer) props
545
		// .getTerrainLayer();
546
		// if (layer == null)
547
		// return;
548
		// layer.setScaleFactor(exa);
549
		// // _view3D.getTerrain().getLayerManager().updateLayers();
550
		// } else if (type == Layer3DProps.layer3DVector) {
551
		// props.setVerticalEx(exa);
552
		// }
553
		// }
554
		//
555
		// }
530 556

  
531
			Object propsObj = lyr.getProperty("3DLayerExtension");
532
			Layer3DProps props = null;
533
			if (propsObj != null) {
534
				try {
535
					props = (Layer3DProps) propsObj;
536
				} catch (Exception e) {
537
					props = null;
538
				}
539
			}
557
		if (_view3D.getCanvas3d() != null) {
540 558

  
541
			int type = props.getType();
542
			if (exa != props.getVerticalEx()) {
543
				if (type == Layer3DProps.layer3DElevation) {
544
					props.setVerticalEx(exa);
545
					HeightfieldLayer layer = (HeightfieldLayer) props
546
							.getTerrainLayer();
547
					if (layer == null)
548
						return;
549
					layer.setScaleFactor(exa);
550
			//		_view3D.getTerrain().getLayerManager().updateLayers();
551
				} else if (type == Layer3DProps.layer3DVector) {
552
					props.setVerticalEx(exa);
553
				}
559
			try {
560
				((TerrainViewer) _view3D.getCanvas3d().getOSGViewer())
561
						.getTerrain(0).setVerticalExaggeration(exa);
562
			} catch (ChildIndexOutOfBoundsExceptions e) {
563
				// TODO Auto-generated catch block
564
				e.printStackTrace();
554 565
			}
555 566

  
556 567
		}
568

  
557 569
	}
558 570

  
559 571
	private CRSSelectPanel getJPanelProj() {
......
619 631
		return WindowInfo.PROPERTIES_PROFILE;
620 632
	}
621 633

  
622
	public void setPropertiesCreated(boolean propertiesCreated) {
623
		_view3D.setPropertiesCreated(propertiesCreated);
624
	}
625

  
626
	public boolean isPropertiesCreated() {
627
		return _view3D.getPropertiesCreated();
628
	}
629 634
}
2.0/trunk/org.gvsig.gvsig3d.app/org.gvsig.gvsig3d.app.extension/src/main/java/org/gvsig/gvsig3d/app/extension/DefaultView3DDocument.java
316 316

  
317 317
				_terrainLayerManager = new LayerManager();
318 318
				_terrain.setLayerManager(_terrainLayerManager);
319
				_terrain.setVerticalExaggeration(_verticalExaggeration);
319 320

  
320 321
				_terrainViewer.addTerrain(_terrain);
321 322
				
323
				
322 324
				//_terrain.setSampleRatio((float) 0.125);
323 325

  
324 326
				_manager = Gvsig3DLocator.getManager();
......
389 391
			}
390 392

  
391 393
			// _canvas3d.addKeyListener(new Key3DListener(_terrain));
392
		}
394
		}		
393 395
		
394 396
		return _canvas3d;
395 397

  
2.0/trunk/org.gvsig.gvsig3d.app/org.gvsig.gvsig3d.app.extension/src/main/java/org/gvsig/gvsig3d/app/extension/View3DManager.java
59 59
 * @version $Id$
60 60
 * 
61 61
 */
62
public class View3DManager extends AbstractDocumentManager {
62
public class View3DManager extends AbstractDocumentManager { 
63 63

  
64 64
	private static final String PERSISTENCE_VIEW3D_DOCUMENT_DEFINITION_NAME = "DefaultView3DDocument";
65 65
	public static String TYPENAME = "project.document.view3d";
66 66
	private DynStruct persistenceDefinition;
67
	private Gvsig3DManager _manager;
67
	private Gvsig3DManager _manager; 
68 68

  
69 69
	public View3DManager() { 
70
		// Do nothing
70
		// Do nothing 
71 71
	}
72 72

  
73
	public int getPriority() {
73
	public int getPriority() { 
74 74
		return 10;
75 75
	}
76 76

  
2.0/trunk/org.gvsig.gvsig3d/org.gvsig.gvsig3d.lib/org.gvsig.gvsig3d.lib.api/src/main/java/org/gvsig/gvsig3d/map3d/Layer3DProps.java
172 172
     * @param ex
173 173
     */
174 174
    public void setVerticalEx(float ex);
175
    
176
    /**
177
     * Sets which band is used for the elevation
178
     * 
179
     * @param band
180
     */
181
    public void setElevationBand(int band);
182
    
183
    /**
184
     * Gets which band is used for the elevation
185
     */
186
    public int getElevationBand();
187
    
188
    
175 189

  
176 190
    /**
177 191
     * Get the height that this layer has when it draws in 3D
2.0/trunk/org.gvsig.gvsig3d/org.gvsig.gvsig3d.lib/org.gvsig.gvsig3d.lib.impl/src/main/java/org/gvsig/gvsig3d/impl/hud/HudImpl.java
308 308

  
309 309
	public void mouseMoved(MouseEvent e) {
310 310
		// TODO Auto-generated method stub
311
		// updateHud();
311
		updateHud();
312 312
	}
313 313

  
314 314
	public int getProjectionType() {
2.0/trunk/org.gvsig.gvsig3d/org.gvsig.gvsig3d.lib/org.gvsig.gvsig3d.lib.impl/src/main/java/org/gvsig/gvsig3d/impl/Gvsig3DDefaultImplLibrary.java
34 34
import org.gvsig.gvsig3d.impl.symbology3d.line.impl.SimpleLine3DSymbol;
35 35
import org.gvsig.gvsig3d.impl.symbology3d.marker.impl.SimpleMarker3DSymbol;
36 36
import org.gvsig.gvsig3d.lib.spi.Gvsig3DProviderLocator;
37
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
38 37
import org.gvsig.symbology.impl.SymbologyDefaultImplLibrary;
39 38
import org.gvsig.tools.library.AbstractLibrary;
40 39
import org.gvsig.tools.library.LibraryException;
2.0/trunk/org.gvsig.gvsig3d/org.gvsig.gvsig3d.lib/org.gvsig.gvsig3d.lib.impl/src/main/java/org/gvsig/gvsig3d/impl/map3d/MapContext3DImpl.java
26 26
import java.awt.Graphics2D;
27 27
import java.awt.geom.AffineTransform;
28 28
import java.awt.image.BufferedImage;
29
import java.awt.image.DataBuffer;
30 29
import java.awt.image.ImagingOpException;
31 30
import java.io.File;
32 31
import java.io.IOException;
......
44 43
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
45 44
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
46 45
import org.gvsig.fmap.dal.coverage.store.RasterQuery;
46
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
47 47
import org.gvsig.fmap.dal.exception.ReadException;
48 48
import org.gvsig.fmap.geom.Geometry;
49 49
import org.gvsig.fmap.geom.GeometryLocator;
......
79 79
import org.gvsig.gvsig3d.map3d.Layer3DProps;
80 80
import org.gvsig.gvsig3d.map3d.MapContext3D;
81 81
import org.gvsig.gvsig3d.map3d.layers.FLayers3D;
82
import org.gvsig.osgvp.core.osg.Image;
82 83
import org.gvsig.gvsig3d.symbology3d.I3DSymbol;
83 84
import org.gvsig.osgvp.core.osg.Matrix;
84 85
import org.gvsig.osgvp.core.osg.Node;
......
115 116
import org.gvsig.raster.cache.tile.provider.CacheStruct;
116 117
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
117 118
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
119
import org.gvsig.raster.impl.provider.tile.FileTileServer;
118 120
import org.gvsig.raster.netcdf.io.NetCDFDataParameters;
119 121
import org.gvsig.tools.ToolsLocator;
120 122
import org.gvsig.tools.dynobject.DynStruct;
......
158 160
	TileCacheManager tileMan = TileCacheLocator.getManager();
159 161
	TileCache tileCache = tileMan.getTileCache(RasterLibrary.pathTileCache);
160 162

  
163
	int maxBands = 3;
164

  
161 165
	public MapContext3DImpl() {
162 166
	}
163 167

  
......
493 497
			hLayer.setMaxLevel(100);
494 498
			hLayer.setMaxResolution(100);
495 499
			// Esto esta hardcodeado
496
			hLayer.setScaleFactor(1);
500
			hLayer.setScaleFactor(props.getVerticalEx());
497 501

  
498 502
			hLayer.setValidDataValues(new Vec2(-9999, 9999));
499 503
			// _logger.warn("computed optimum level = "
......
761 765
				// work
762 766
				((DefaultFLyrRaster) layer).init();
763 767
				props3D.setType(Layer3DProps.layer3DImage);
764
			} catch (LoadLayerException e) {
768
				} catch (LoadLayerException e) {
765 769
				// TODO Auto-generated catch block
766 770
				e.printStackTrace();
767 771
			} catch (FilePaletteException e) {
......
828 832
		if (proj != null)
829 833
			epsg = proj.getAbrev();
830 834

  
831
		int resolution = 512;
835
		int resolution = 256;
832 836

  
833 837
		int type = getLayer3DProps(layer).getType();
834 838

  
......
842 846
						.toRectangle2D(), provider.getCellSize(), resolution,
843 847
				resolution, provider.getFullName(),
844 848
				TileCacheLibrary.DEFAULT_STRUCTURE,
845
				RasterLibrary.pathTileCache, "jpg", epsg, provider
849
				RasterLibrary.pathTileCache, "png", epsg, provider
846 850
						.getFileSize());
847 851

  
848 852
		return struct;
......
1079 1083
		ude.copyDataFromRequest(rde);
1080 1084
		if (layer instanceof DefaultFLyrRaster) {
1081 1085
			DefaultFLyrRaster rLayer = (DefaultFLyrRaster) layer;
1082
			boolean hasCache = true;
1083
			if (rLayer.getDataStore().getInternalParameters() instanceof NetCDFDataParameters)
1084
				hasCache = false;
1085 1086

  
1086
			if (hasCache) {
1087
			if (rLayer.getDataStore().isTiled()) {
1087 1088

  
1088 1089
				rLayer = (DefaultFLyrRaster) layer;
1090

  
1089 1091
				boolean exists = _cachedLayers.containsKey(rLayer);
1090 1092

  
1091 1093
				if (!exists) {
......
1107 1109
								envelope.getLowerCorner().getY());
1108 1110

  
1109 1111
				query.setTileParameters(rde.getTileLevel(), rde.getTileX(),
1110
						rde.getTileY(), extent, cacheStruct);
1112
						rde.getTileY(), extent, null);
1111 1113

  
1112 1114
				// query.setAreaOfInterest(extent, 512, 512);
1113 1115

  
1114
				// System.out.println("Tile Parameters:");
1115
				// System.out.println("TileLevel: " + rde.getTileLevel());
1116
				// System.out.println("TileX = " + rde.getTileX());
1117
				// System.out.println("TileY = " + rde.getTileY());
1118
				// System.out.println("Extent = " + extent.getULX() + " "
1119
				// + extent.getULY() + " " + extent.getLRX() + " "
1120
				// + extent.getLRY());
1116
//				 System.out.println("Tile Parameters:");
1117
//				 System.out.println("TileLevel: " + rde.getTileLevel());
1118
//				 System.out.println("TileX = " + rde.getTileX());
1119
//				 System.out.println("TileY = " + rde.getTileY());
1120
//				 System.out.println("Extent = " + extent.getULX() + " "
1121
//				 + extent.getULY() + " " + extent.getLRX() + " "
1122
//				 + extent.getLRY());
1121 1123

  
1122 1124
				try {
1123 1125
					Object[] result = rLayer.getDataStore().queryArray(query);
1124 1126
					Buffer rBuff = (Buffer) result[0];
1125 1127
					Buffer transparencyBuffer;
1128
					int suma = 0;
1126 1129

  
1127
					if (result.length < 2)
1128
						transparencyBuffer = null;
1129
					else
1130
						transparencyBuffer = (Buffer) result[1];
1130
					transparencyBuffer = (Buffer) result[1];
1131 1131

  
1132
					// int numBands = rBuff.getBandCount();
1133
					int numBands = rLayer.getDataStore().getBandCount();
1134

  
1135
					// System.out.println("Tile ancho: " + rBuff.getWidth()
1136
					// + " alto: " + rBuff.getHeight()
1137
					// + " bandas totales incluyendo alpha (si tiene): "
1138
					// + numBands);
1139

  
1140
					byte[] data = new byte[rBuff.getWidth() * rBuff.getHeight()
1141
							* numBands];
1142

  
1143
					int dataType = convertDataType(rBuff.getDataType());
1144
					int pixelFormat = convertPixelFormat(numBands);
1145

  
1146
					int colorBands = numBands;
1147

  
1148 1132
					if (transparencyBuffer != null)
1149
						colorBands--;
1133
						suma = 1;
1150 1134

  
1151
					int cont = 0;
1135
					// int bufferBands = rBuff.getBandCount();
1136
					// Si el numero de bandas es mayor que 3 (RGB) no se pueden
1137
					// dibujar todas
1138
					int numBands = rLayer.getDataStore().getBandCount();
1152 1139

  
1153
					for (int i = 0; i < rBuff.getWidth(); i++) {
1140
					if (numBands > (maxBands + suma))
1141
						numBands = maxBands + suma;
1154 1142

  
1155
						for (int j = 0; j < rBuff.getHeight(); j++) {
1143
					ColorInterpretation cInt = rLayer.getDataStore()
1144
							.getColorInterpretation();
1156 1145

  
1157
							for (int k = 0; k < colorBands; k++) {
1146
					int rgba[] = {0,1,2,3};
1147
					
1148
					rgba = setBandsInColors(cInt);
1158 1149

  
1159
								switch (rBuff.getDataType()) {
1160
								case Buffer.TYPE_BYTE:
1161
									data[cont] = (byte) (rBuff.getElemByte(i,
1162
											j, k));
1163
									cont++;
1164
									break;
1165
								case Buffer.TYPE_DOUBLE:
1166
									data[cont] = (byte) (Math.round(rBuff
1167
											.getElemDouble(i, j, k)));
1168
									cont++;
1169
									break;
1170
								case Buffer.TYPE_FLOAT:
1171
									data[cont] = (byte) (Math.round(rBuff
1172
											.getElemFloat(i, j, k)));
1173
									cont++;
1174
									break;
1175
								case Buffer.TYPE_INT:
1176
									data[cont] = (byte) (rBuff.getElemInt(i, j,
1177
											k) & 0xffffffff);
1178
									cont++;
1179
									break;
1180
								case Buffer.TYPE_SHORT:
1181
								case Buffer.TYPE_USHORT:
1182
									data[cont] = (byte) (rBuff.getElemShort(i,
1183
											j, k) & 0xffff);
1184
									cont++;
1185
									break;
1186
								}
1187
							}
1150
					int pixelFormat = convertPixelFormat(numBands);
1188 1151

  
1189
							if (transparencyBuffer != null) {
1152
					// System.out.println("Tile ancho: " + rBuff.getWidth()
1153
					// + " alto: " + rBuff.getHeight()
1154
					// + " bandas totales incluyendo alpha (si tiene): "
1155
					// + numBands);
1190 1156

  
1191
								switch (transparencyBuffer.getDataType()) {
1192
								case Buffer.TYPE_BYTE:
1193

  
1194
									if (transparencyBuffer.getElemByte(i, j, 0) == 0)
1195
										data[cont] = (byte) (0);
1196
									else
1197
										data[cont] = (byte) (255);
1198
									cont++;
1199
									break;
1200
								case Buffer.TYPE_DOUBLE:
1201
									data[cont] = (byte) (Math
1202
											.round(transparencyBuffer
1203
													.getElemInt(i, j, 0)));
1204
									cont++;
1205
									break;
1206
								case Buffer.TYPE_FLOAT:
1207
									data[cont] = (byte) (Math
1208
											.round(transparencyBuffer
1209
													.getElemFloat(i, j, 0)));
1210
									cont++;
1211
									break;
1212
								case Buffer.TYPE_INT:
1213
									data[cont] = (byte) (transparencyBuffer
1214
											.getElemInt(i, j, 0) & 0xffffffff);
1215
									cont++;
1216
									break;
1217
								case Buffer.TYPE_SHORT:
1218
								case Buffer.TYPE_USHORT:
1219
									data[cont] = (byte) (transparencyBuffer
1220
											.getElemShort(i, j, 0) & 0xffff);
1221
									cont++;
1222
									break;
1223
								}
1224

  
1225
							}
1226

  
1227
						}
1228

  
1157
					switch (rBuff.getDataType()) {
1158
					case Buffer.TYPE_BYTE:
1159
						ude.setRasterData(
1160
								buildByteBuffer(ude, rBuff, transparencyBuffer,
1161
										numBands,rgba), rBuff.getWidth(), rBuff
1162
										.getHeight(), numBands, pixelFormat,
1163
								Image.DataType.GL_UNSIGNED_BYTE);
1164
						break;
1165
					case Buffer.TYPE_SHORT:
1166
						ude.setRasterData(
1167
								buildShortBuffer(ude, rBuff,
1168
										transparencyBuffer, numBands), rBuff
1169
										.getWidth(), rBuff.getHeight(),
1170
								numBands, pixelFormat, Image.DataType.GL_SHORT);
1171
						break;
1172
					case Buffer.TYPE_USHORT:
1173
						ude.setRasterData(
1174
								buildShortBuffer(ude, rBuff,
1175
										transparencyBuffer, numBands), rBuff
1176
										.getWidth(), rBuff.getHeight(),
1177
								numBands, pixelFormat,
1178
								Image.DataType.GL_UNSIGNED_SHORT);
1179
						break;
1180
					case Buffer.TYPE_INT:
1181
						ude.setRasterData(
1182
								buildIntBuffer(ude, rBuff, transparencyBuffer,
1183
										numBands), rBuff.getWidth(), rBuff
1184
										.getHeight(), numBands, pixelFormat,
1185
								Image.DataType.GL_INT);
1186
						break;
1187
					case Buffer.TYPE_FLOAT:
1188
						ude.setRasterData(
1189
								buildFloatBuffer(ude, rBuff,
1190
										transparencyBuffer, numBands), rBuff
1191
										.getWidth(), rBuff.getHeight(),
1192
								numBands, pixelFormat, Image.DataType.GL_FLOAT);
1193
						break;
1194
					case Buffer.TYPE_DOUBLE:
1195
						ude.setRasterData(
1196
								buildDoubleBuffer(ude, rBuff,
1197
										transparencyBuffer, numBands), rBuff
1198
										.getWidth(), rBuff.getHeight(),
1199
								numBands, pixelFormat, Image.DataType.GL_DOUBLE);
1200
						break;
1229 1201
					}
1230
					ude.setRasterData(
1231
							data,
1232
							rBuff.getWidth(),
1233
							rBuff.getHeight(),
1234
							numBands,
1235
							pixelFormat,
1236
							org.gvsig.osgvp.core.osg.Image.DataType.GL_UNSIGNED_BYTE);
1237 1202

  
1238 1203
					// ude.setRasterData(getLayerDrawImage(layer, envelope));
1239 1204

  
......
1241 1206
					// TODO Auto-generated catch block
1242 1207
					e.printStackTrace();
1243 1208
				} catch (RasterDriverException e) {
1244
					e.printStackTrace();
1209
					System.out.println("QueryArray failed");
1210
					//e.printStackTrace();
1245 1211
				} catch (InvalidSetViewException e) {
1246 1212
					// TODO Auto-generated catch block
1247 1213
					e.printStackTrace();
1248 1214
				} catch (NullPointerException e) {
1249 1215
					// ude.setFailData();
1250
					// System.out.println("Problem getting the tile");
1216
					System.out.println("Problem getting the tile. NullPointer");
1251 1217
				}
1252 1218

  
1253 1219
			}
1254
			// No cache
1220
			// Not tiled raster
1255 1221
			else {
1256 1222
				ude.setRasterData(getLayerDrawImage(layer, envelope));
1257 1223
			}
......
1267 1233
			ude.setFailData();
1268 1234
		}
1269 1235

  
1236
		// System.out.println("Returning UDE");
1237

  
1270 1238
		return ude;
1271 1239
	}
1272 1240

  
......
1405 1373
					float[] data = new float[(rBuff.getWidth() * rBuff
1406 1374
							.getHeight()) / 64];
1407 1375

  
1408
					int dataType = convertDataType(rBuff.getDataType());
1409 1376
					int pixelFormat = convertPixelFormat(numBands);
1410 1377

  
1411 1378
					// K hay que setearlo en el dialogo
1412
					int cont = 0, k = 0;
1379
					int cont = 0;
1413 1380

  
1381
					int k = getLayer3DProps(rLayer).getElevationBand();
1382

  
1414 1383
					for (int i = rBuff.getWidth() - 1; i >= 0; i = i - 8) {
1415 1384
						// Vertical Flip needed
1416 1385
						for (int j = 0; j < rBuff.getHeight(); j = j + 8) {
......
1485 1454

  
1486 1455
	}
1487 1456

  
1488
	protected int convertDataType(int type) {
1457
	protected byte[] buildByteBuffer(UpdateDataEvent ude, Buffer rBuff,
1458
			Buffer transparencyBuffer, int numBands, int[] rgba) {
1489 1459

  
1490
		switch (type) {
1460
		int cont = 0;
1461
		int colorBands = numBands;
1491 1462

  
1492
		case DataBuffer.TYPE_BYTE:
1493
			return org.gvsig.osgvp.core.osg.Image.DataType.GL_BYTE;
1463
		if (transparencyBuffer != null) {
1464
			colorBands--;
1465
		}
1494 1466

  
1495
		case DataBuffer.TYPE_DOUBLE:
1496
			return org.gvsig.osgvp.core.osg.Image.DataType.GL_DOUBLE;
1467
		byte[] data = new byte[rBuff.getWidth() * rBuff.getHeight() * numBands];
1497 1468

  
1498
		case DataBuffer.TYPE_FLOAT:
1499
			return org.gvsig.osgvp.core.osg.Image.DataType.GL_FLOAT;
1469
		for (int i = 0; i < rBuff.getWidth(); i++) {
1500 1470

  
1501
		case DataBuffer.TYPE_INT:
1502
			return org.gvsig.osgvp.core.osg.Image.DataType.GL_INT;
1471
			for (int j = 0; j < rBuff.getHeight(); j++) {
1503 1472

  
1504
		case DataBuffer.TYPE_SHORT:
1505
			return org.gvsig.osgvp.core.osg.Image.DataType.GL_SHORT;
1473
				for (int k = 0; k < colorBands; k++) {
1474
					// En lugar de k se deben usar las bandas asociadas al
1475
					// componente
1476
					data[cont] = (byte) rBuff.getElemByte(i, j, rgba[k]);
1477
					cont++;
1506 1478

  
1507
		case DataBuffer.TYPE_USHORT:
1508
			return org.gvsig.osgvp.core.osg.Image.DataType.GL_UNSIGNED_SHORT;
1479
				}
1480
				if (transparencyBuffer != null) {
1481
					if (transparencyBuffer.getElemByte(i, j, 0) == 0)
1482
						data[cont] = (byte) 0;
1483
					else
1484
						data[cont] = (byte) 255;
1485
					//data[cont] = transparencyBuffer.getElemByte(i, j, 0);
1509 1486

  
1487
					cont++;
1488

  
1489
				}
1490
			}
1510 1491
		}
1511 1492

  
1512
		return org.gvsig.osgvp.core.osg.Image.DataType.GL_BYTE;
1493
		return data;
1494
	}
1513 1495

  
1496
	protected short[] buildShortBuffer(UpdateDataEvent ude, Buffer rBuff,
1497
			Buffer transparencyBuffer, int numBands) {
1498
		short[] data = new short[rBuff.getWidth() * rBuff.getHeight()
1499
				* numBands];
1500

  
1501
		int cont = 0;
1502
		int colorBands = numBands;
1503

  
1504
		if (transparencyBuffer != null)
1505
			colorBands--;
1506

  
1507
		for (int i = 0; i < rBuff.getWidth(); i++) {
1508

  
1509
			for (int j = 0; j < rBuff.getHeight(); j++) {
1510

  
1511
				for (int k = 0; k < colorBands; k++) {
1512
					data[cont] = (short) (rBuff.getElemShort(i, j, k) & 0xffff);
1513
					cont++;
1514
				}
1515
				if (transparencyBuffer != null) {
1516
					data[cont] = (short) (rBuff.getElemShort(i, j, 0) & 0xffff);
1517
					cont++;
1518
				}
1519
			}
1520
		}
1521

  
1522
		return data;
1514 1523
	}
1515 1524

  
1525
	protected int[] buildIntBuffer(UpdateDataEvent ude, Buffer rBuff,
1526
			Buffer transparencyBuffer, int numBands) {
1527
		int[] data = new int[rBuff.getWidth() * rBuff.getHeight() * numBands];
1528

  
1529
		int cont = 0;
1530
		int colorBands = numBands;
1531

  
1532
		if (transparencyBuffer != null)
1533
			colorBands--;
1534

  
1535
		for (int i = 0; i < rBuff.getWidth(); i++) {
1536

  
1537
			for (int j = 0; j < rBuff.getHeight(); j++) {
1538

  
1539
				for (int k = 0; k < colorBands; k++) {
1540
					data[cont] = (int) (rBuff.getElemByte(i, j, k) & 0xffffffff);
1541
					cont++;
1542
				}
1543
				if (transparencyBuffer != null) {
1544
					data[cont] = (int) (rBuff.getElemByte(i, j, 0) & 0xffffffff);
1545
					cont++;
1546
				}
1547
			}
1548
		}
1549

  
1550
		return data;
1551
	}
1552

  
1553
	protected float[] buildFloatBuffer(UpdateDataEvent ude, Buffer rBuff,
1554
			Buffer transparencyBuffer, int numBands) {
1555
		float[] data = new float[rBuff.getWidth() * rBuff.getHeight()
1556
				* numBands];
1557

  
1558
		int cont = 0;
1559
		int colorBands = numBands;
1560

  
1561
		if (transparencyBuffer != null)
1562
			colorBands--;
1563

  
1564
		for (int i = 0; i < rBuff.getWidth(); i++) {
1565

  
1566
			for (int j = 0; j < rBuff.getHeight(); j++) {
1567

  
1568
				for (int k = 0; k < colorBands; k++) {
1569
					data[cont] = rBuff.getElemByte(i, j, k);
1570
					cont++;
1571
				}
1572
				if (transparencyBuffer != null) {
1573
					data[cont] = rBuff.getElemByte(i, j, 0);
1574
					cont++;
1575
				}
1576
			}
1577
		}
1578

  
1579
		return data;
1580
	}
1581

  
1582
	protected double[] buildDoubleBuffer(UpdateDataEvent ude, Buffer rBuff,
1583
			Buffer transparencyBuffer, int numBands) {
1584
		double[] data = new double[rBuff.getWidth() * rBuff.getHeight()
1585
				* numBands];
1586

  
1587
		int cont = 0;
1588
		int colorBands = numBands;
1589

  
1590
		if (transparencyBuffer != null)
1591
			colorBands--;
1592

  
1593
		for (int i = 0; i < rBuff.getWidth(); i++) {
1594

  
1595
			for (int j = 0; j < rBuff.getHeight(); j++) {
1596

  
1597
				for (int k = 0; k < colorBands; k++) {
1598
					data[cont] = rBuff.getElemByte(i, j, k);
1599
					cont++;
1600
				}
1601
				if (transparencyBuffer != null) {
1602
					data[cont] = rBuff.getElemByte(i, j, 0);
1603
					cont++;
1604
				}
1605
			}
1606
		}
1607

  
1608
		return data;
1609
	}
1610

  
1516 1611
	protected int convertPixelFormat(int type) {
1517 1612

  
1518 1613
		switch (type) {
......
1535 1630

  
1536 1631
	}
1537 1632

  
1633
	protected int[] setBandsInColors(ColorInterpretation cInt) {
1634
		
1635
		int rgba[] = new int[4];
1636
		
1637
		rgba[0] = cInt.getBand(ColorInterpretation.RED_BAND);
1638
		if(rgba[0]==-1) rgba[0]=0;
1639
		rgba[1] = cInt.getBand(ColorInterpretation.GREEN_BAND);
1640
		if(rgba[1]==-1) rgba[1]=1;
1641
		rgba[2] = cInt.getBand(ColorInterpretation.BLUE_BAND);
1642
		if(rgba[2]==-1) rgba[2]=2;
1643
		rgba[3] = cInt.getBand(ColorInterpretation.ALPHA_BAND);
1644
		if(rgba[3]==-1) rgba[3]=3;
1645
		
1646
		return rgba;
1647
		
1648
	}
1649

  
1538 1650
	protected class MyCancel implements Cancellable {
1539 1651
		private boolean cancel = false;
1540 1652

  
......
1631 1743
	}
1632 1744

  
1633 1745
	public void removeLayerToTerrain(FLayer layer) {
1634
		// TODO Auto-generated method stub
1635
		Layer3DProps props3D = getLayer3DProps(layer);
1636 1746

  
1637
		if (props3D.getType() == Layer3DProps.layer3DVector) {
1638
			// DeleteVectors(layer, props3D);
1639
		} else if (props3D.getType() == Layer3DProps.layer3DOSG) {
1640
			DeleteOSGLayer(layer, props3D);
1641
		} else {
1642
			Layer terrainLayer = _terrainFLayerMap.get(layer);
1643
			if (terrainLayer != null) {
1644
				// FLayerCacheService cacheService = (FLayerCacheService)
1645
				// props3D
1646
				// .getCacheService();
1647
				// if (cacheService != null)
1648
				// try {
1649
				// cacheService.free();
1650
				// } catch (Throwable e) {
1651
				// // TODO Auto-generated catch block
1652
				// e.printStackTrace();
1653
				// }
1654
				_terrainLayerMap.remove(terrainLayer.getLayerID());
1655
				_terrainFLayerMap.remove(layer);
1747
		Layer terrainLayer = _terrainFLayerMap.get(layer);
1748
		if (terrainLayer != null) {
1656 1749

  
1657
				try {
1658
					_terrainLayerManager.removeLayer(terrainLayer);
1659
				} catch (LayerManagementException e) {
1660
					// TODO Auto-generated catch block
1661
					e.printStackTrace();
1662
				}
1750
			_terrainLayerMap.remove(terrainLayer.getLayerID());
1751
			_terrainFLayerMap.remove(layer);
1752

  
1753
			try {
1754
				_terrainLayerManager.removeLayer(terrainLayer);
1755
			} catch (LayerManagementException e) {
1756
				// TODO Auto-generated catch block
1757
				e.printStackTrace();
1663 1758
			}
1664 1759
		}
1665 1760

  
2.0/trunk/org.gvsig.gvsig3d/org.gvsig.gvsig3d.lib/org.gvsig.gvsig3d.lib.impl/src/main/java/org/gvsig/gvsig3d/impl/map3d/Viewport3DImpl.java
23 23

  
24 24
import java.awt.Color;
25 25
import java.awt.geom.Point2D;
26
import java.awt.geom.Rectangle2D;
27 26

  
28 27
import org.cresques.cts.IProjection;
29 28
import org.gvsig.fmap.geom.GeometryLocator;
30 29
import org.gvsig.fmap.geom.GeometryManager;
31
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
32
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
33
import org.gvsig.fmap.geom.primitive.Envelope;
34
import org.gvsig.fmap.mapcontext.ViewPort;
35 30
import org.gvsig.gvsig3d.map3d.ViewPort3D;
36 31
import org.gvsig.osgvp.core.osg.Matrix;
37 32
import org.gvsig.osgvp.core.osg.Vec3;
38 33
import org.gvsig.osgvp.terrain.Terrain;
39 34
import org.gvsig.osgvp.viewer.IViewerContainer;
35
import org.gvsig.osgvp.viewer.Intersections;
40 36

  
41

  
42 37
/**
43 38
 * @author gvSIG Team
44 39
 * @version $Id$
45
 *
40
 * 
46 41
 */
47 42
public class Viewport3DImpl extends ViewPort3D {
48
	
43

  
49 44
	private Terrain _terrain;
50
    private IViewerContainer _canvas3d;
51
    private boolean _dirty = false;
52
    
53
    private static final GeometryManager geomManager =
54
        GeometryLocator.getGeometryManager();
45
	private IViewerContainer _canvas3d;
46
	private boolean _dirty = false;
55 47

  
56
    public Viewport3DImpl(){
57
    	
58
    	super();
59
    }
60
    
48
	private static final GeometryManager geomManager = GeometryLocator
49
			.getGeometryManager();
50

  
51
	public Viewport3DImpl() {
52

  
53
		super();
54
	}
55

  
61 56
	public Viewport3DImpl(IProjection proj) {
62 57
		super(proj);
63 58
		setBackColor(Color.WHITE);
64 59
		// TODO Auto-generated constructor stub
65 60
	}
66
    
67
    public boolean getDirty() {
68
        return _dirty;
69
    }
70 61

  
71
    public Terrain getTerrain() {
72
        return _terrain;
73
    }
62
	public boolean getDirty() {
63
		return _dirty;
64
	}
74 65

  
75
    public void setDirty(boolean isDirty) {
76
        _dirty = isDirty;
66
	public Terrain getTerrain() {
67
		return _terrain;
68
	}
77 69

  
78
    }
70
	public void setDirty(boolean isDirty) {
71
		_dirty = isDirty;
79 72

  
80
    public void setEnvelope(Rectangle2D r) {
81
        extent = r;
73
	}
82 74

  
83
        _dirty = true;
75
	// public void setEnvelope(Envelope e) {
76
	// super.setEnvelope(e);
77
	// _canvas3d.getOSGViewer().setViewport((int)e.getMinimum(0),
78
	// (int)e.getMinimum(1),
79
	// (int)e.getMaximum(0) - (int)e.getMinimum(0),
80
	// (int)e.getMaximum(1) - (int)e.getMinimum(1));
81
	//
82
	// }
84 83

  
85
    }
84
	public void setTerrain(Terrain terrain) {
85
		_terrain = terrain;
86 86

  
87
    public void setTerrain(Terrain terrain) {
88
        _terrain = terrain;
87
	}
89 88

  
90
    }
89
	public void setViewer(IViewerContainer canvas) {
90
		_canvas3d = canvas;
91 91

  
92
    public void setViewer(IViewerContainer canvas) {
93
        _canvas3d = canvas;
92
	}
94 93

  
95
    }
94
//	@Override
95
//	public Point2D fromMapPoint(double x, double y) {
96
//
97
//		Matrix viewM = _canvas3d.getOSGViewer().getCamera().getViewMatrix();
98
//		Matrix projM = _canvas3d.getOSGViewer().getCamera()
99
//				.getProjectionMatrix();
100
//
101
//		Vec3 geoPt;
102
//
103
//		if (getProjection().getAbrev().compareToIgnoreCase("EPSG:4326") == 0) {
104
//			geoPt = _terrain.convertLatLongHeightToXYZ(new Vec3(x, y, 0.0));
105
//
106
//		} else {
107
//			geoPt = new Vec3(x, y, 0);
108
//		}
109
//
110
//		Matrix finalM = viewM.prod(projM);
111
//
112
//		Vec3 projP = finalM.prod(geoPt, finalM);
113
//
114
//		Vec3 windowP = new Vec3();
115
//		windowP.setX((projP.x() + 1) * (_canvas3d.getWidth() * 0.5));
116
//		windowP.setY((projP.y() + 1) * (_canvas3d.getHeight() * 0.5));
117
//
118
//		System.out.println(windowP.x() + " " + windowP.y());
119
//
120
//		return new Point2D.Double(windowP.x(), windowP.y());
121
//	}
122
//
123
//	@Override
124
//	public Point2D toMapPoint(Point2D pScreen) {
125
//
126
//		// System.err.println("Coordenadas de pantalla " + pScreen.getX() + ","+
127
//		// pScreen.getY());
128
//		Intersections hits = _canvas3d.getOSGViewer().rayPick(
129
//				(int) pScreen.getX(), (int) pScreen.getY());
130
//		Point2D pWorld = new Point2D.Double();
131
//		if (hits.containsIntersections()) {
132
//			// get XYZ coordinates on terrain
133
//			Vec3 hit = hits.getFirstIntersection().getIntersectionPoint();
134
//			// convert to geo coordinates
135
//			if (getProjection().getAbrev().compareToIgnoreCase("EPSG:4326") == 0) {
136
//				Vec3 geoPt = _terrain.convertXYZToLatLongHeight(hit);
137
//
138
//				// if (Math.abs(heigth - geoPt.z()) <= 1000) {
139
//				pWorld.setLocation(geoPt.y(), geoPt.x());
140
//				// } else {
141
//				// pWorld.setLocation(360, 120);
142
//				// }
143
//
144
//			} else {
145
//				// if (Math.abs(heigth - hit.z()) <= 100) {
146
//				pWorld.setLocation(hit.x(), hit.y());
147
//				// } else {
148
//				// pWorld.setLocation(360, 120);
149
//				// }
150
//
151
//			}
152
//		} else {
153
//			if (getProjection().getAbrev().compareToIgnoreCase("EPSG:4326") == 0) {
154
//				pWorld.setLocation(360, 120);
155
//			} else
156
//				pWorld.setLocation(1e100, 1e100);
157
//		}
158
//
159
//		return pWorld;
160
//	}
161
//	
162
//	public Point2D toMapPoint(int x, int y)
163
//	{
164
//		return toMapPoint(new Point2D.Double(x,y));
165
//	}
166
//	
167
//	/**
168
//	 * Returns geographic distance from pixel distance
169
//	  * @param d distance in pixels
170
//	 *
171
//	 * @return distance equivalent in <i>map coordinates</i>
172
//	 */
173
//	public double toMapDistance(int d) {	
174
//		Point2D p1 = toMapPoint(0, 0);
175
//		Point2D p2 = toMapPoint(1, 0);
176
//		
177
//		double scaleX = p2.distance(p1) ;
178
//		
179
//		double dist = d * scaleX;
180
//		
181
//		if(dist <= 0) dist = 0.1;
182
//		
183
//		return  dist;
184
//	}
185
	
96 186

  
97 187
}
2.0/trunk/org.gvsig.gvsig3d/org.gvsig.gvsig3d.lib/org.gvsig.gvsig3d.lib.impl/src/main/java/org/gvsig/gvsig3d/impl/map3d/Layer3DPropsImpl.java
58 58
	public static final String EDITING = "editing";
59 59

  
60 60
	private static final String FIELD_DESCRIPTION = "description";
61
	
62
	private static final String BAND_ELEVATION = "bandElevation";
61 63

  
62 64
	private long drawVersion = 0;
63 65

  
......
65 67

  
66 68
	protected float _opacity = 1.0f; // Opacity of layer default 1.0
67 69
	protected float _verticalEx = 1.0f; // Opacity of layer default 1.0
70
	protected int _bandElev = 0;
68 71
	protected float _height = 100; // Opacity of layer default 1.0
69 72
	protected int _type; // see type enumeration above
70 73

  
......
148 151
	public float getVerticalEx() {
149 152
		return _verticalEx;
150 153
	}
154
	
155
	public int getElevationBand(){
156
		
157
		return _bandElev;
158
	}
151 159

  
152 160
	public boolean isEditing() {
153 161
		return isEditing;
......
273 281
		_verticalEx = ex;
274 282

  
275 283
	}
284
	
285
	public void setElevationBand(int band){
286
		
287
		_bandElev = band;
288
		
289
	}
276 290

  
277 291
	public void setZEnable(boolean zEnable) {
278 292
		_zEnable = zEnable;

Also available in: Unified diff