Revision 328 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

View differences:

MapContext3DImpl.java
66 66
import org.gvsig.fmap.mapcontext.layers.operations.Classifiable;
67 67
import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
68 68
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
69
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
69 70
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
70 71
import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
71 72
import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendClearEvent;
72 73
import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
73 74
import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
74
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
75 75
import org.gvsig.gvsig3d.impl.symbology3d.Symbol3DFactory;
76 76
import org.gvsig.gvsig3d.impl.symbology3d.fill.impl.SimpleFill3DSymbol;
77 77
import org.gvsig.gvsig3d.impl.symbology3d.line.impl.SimpleLine3DSymbol;
......
82 82
import org.gvsig.gvsig3d.map3d.Layer3DProps;
83 83
import org.gvsig.gvsig3d.map3d.MapContext3D;
84 84
import org.gvsig.gvsig3d.map3d.layers.FLayers3D;
85
import org.gvsig.gvsig3d.symbology3d.I3DSymbol;
85 86
import org.gvsig.osgvp.core.osg.Image;
86
import org.gvsig.gvsig3d.symbology3d.I3DSymbol;
87 87
import org.gvsig.osgvp.core.osg.Matrix;
88 88
import org.gvsig.osgvp.core.osg.Node;
89 89
import org.gvsig.osgvp.core.osg.Vec2;
......
92 92
import org.gvsig.osgvp.exceptions.image.ImageConversionException;
93 93
import org.gvsig.osgvp.exceptions.node.ChildIndexOutOfBoundsExceptions;
94 94
import org.gvsig.osgvp.exceptions.node.NodeException;
95
import org.gvsig.osgvp.geometry.GeoPointArray3D;
96 95
import org.gvsig.osgvp.symbology.ISymbol3D;
97
import org.gvsig.osgvp.symbology.marker.SimpleMarker;
98
import org.gvsig.osgvp.symbology.fill.SimpleFill;
99
import org.gvsig.osgvp.symbology.line.SimpleLine;
100 96
import org.gvsig.osgvp.terrain.Extent;
101 97
import org.gvsig.osgvp.terrain.HeightfieldLayer;
102 98
import org.gvsig.osgvp.terrain.JavaDataDriver;
......
119 115
import org.gvsig.raster.cache.tile.provider.CacheStruct;
120 116
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
121 117
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
122
import org.gvsig.raster.impl.provider.tile.FileTileServer;
123 118
import org.gvsig.raster.netcdf.io.NetCDFDataParameters;
124 119
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
125 120
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
......
456 451
		if (props.getType() == Layer3DPropsImpl.layer3DVector) {
457 452
			// if (layer instanceof FLyrVect) {
458 453
			// Set a 3D Legend
459
			try {
460
				((FLyrVect) layer).setLegend((IVectorLegend) MapContextLocator
461
						.getMapContextManager().getLegend(
462
								((FLyrVect) layer).getDataStore(),
463
								"project.document.view3d"));
464
			} catch (LegendLayerException e) {
465
				// TODO Auto-generated catch block
466
				e.printStackTrace();
467
			} catch (LocatorException e) {
468
				// TODO Auto-generated catch block
469
				e.printStackTrace();
454

  
455
			if (!(((FLyrVect) layer).getLegend().getDefaultSymbol() instanceof I3DSymbol)) {
456
				try {
457
					((FLyrVect) layer)
458
							.setLegend((IVectorLegend) MapContextLocator
459
									.getMapContextManager().getLegend(
460
											((FLyrVect) layer).getDataStore(),
461
											"project.document.view3d"));
462
				} catch (LegendLayerException e) {
463
					// TODO Auto-generated catch block
464
					e.printStackTrace();
465
				} catch (LocatorException e) {
466
					// TODO Auto-generated catch block
467
					e.printStackTrace();
468
				}
470 469
			}
471 470

  
472 471
			VectorLayer vlayer = new VectorLayer();
......
497 496
			hLayer.setDataDriver(_terrainDataManager);
498 497
			hLayer.setMaxLevel(100);
499 498
			hLayer.setMaxResolution(100);
500
			// Esto esta hardcodeado
501 499
			hLayer.setScaleFactor(props.getVerticalEx());
502 500

  
503 501
			hLayer.setValidDataValues(new Vec2(-9999, 9999));
......
766 764
				// work
767 765
				((DefaultFLyrRaster) layer).init();
768 766
				props3D.setType(Layer3DProps.layer3DImage);
769
				} catch (LoadLayerException e) {
767
			} catch (LoadLayerException e) {
770 768
				// TODO Auto-generated catch block
771 769
				e.printStackTrace();
772 770
			} catch (FilePaletteException e) {
......
886 884
		}
887 885

  
888 886
		Layer3DProps props3D = getLayer3DProps(layer);
889
		refreshLayerInTerrain(props3D, false);
887
		refreshLayerInTerrain(layer, props3D, false);
890 888

  
891 889
		int type = props3D.getType();
892 890

  
......
992 990
					Layer3DProps vectProps = getLayer3DProps(lyrVect);
993 991
					if ((newDrawVersion - props3D.getDrawVersion()) >= 1) {
994 992
						props3D.setDrawVersion(lyrVect.getDrawVersion());
995
						refreshLayerInTerrain(vectProps, true);
993
						// refreshLayerInTerrain(lyrVect, vectProps, true);
994
						removeLayerToTerrain(lyr);
995
						addLayerToTerrain(lyr, true);
996 996
						refreshLayerVectorsVisibility(lyrVect);
997 997
						_bListenToLegend = false;
998 998
						// props3D.VerifyLegend(_terrain.getTerrainName());
......
1067 1067
		if (rde.getLayer().getLayerType() == Layer.LayerType.TEXTURELAYER)
1068 1068
			ude = loadRasterData(layer, envelope, rde);
1069 1069

  
1070

  
1070 1071
		if (rde.getLayer().getLayerType() == Layer.LayerType.VECTORLAYER)
1071 1072
			{
1072 1073
//			GeometryMarker3DSymbol n = new GeometryMarker3DSymbol();
1073 1074
//			n.setPictureFileURL("/home/jtorres/.depman/share/osgVP/resources/marker.png");
1074 1075
//			n.setSize(25.0f);
1075 1076
			ude = loadVectorData(layer, envelope, rde, null);
1076
			}
1077
		}
1077 1078
		if (rde.getLayer().getLayerType() == Layer.LayerType.HEIGHTFIELDLAYER)
1078 1079
			ude = loadElevationData(layer, envelope, rde);
1079 1080

  
......
1117 1118

  
1118 1119
				// query.setAreaOfInterest(extent, 512, 512);
1119 1120

  
1120
//				 System.out.println("Tile Parameters:");
1121
//				 System.out.println("TileLevel: " + rde.getTileLevel());
1122
//				 System.out.println("TileX = " + rde.getTileX());
1123
//				 System.out.println("TileY = " + rde.getTileY());
1124
//				 System.out.println("Extent = " + extent.getULX() + " "
1125
//				 + extent.getULY() + " " + extent.getLRX() + " "
1126
//				 + extent.getLRY());
1121
				// System.out.println("Tile Parameters:");
1122
				// System.out.println("TileLevel: " + rde.getTileLevel());
1123
				// System.out.println("TileX = " + rde.getTileX());
1124
				// System.out.println("TileY = " + rde.getTileY());
1125
				// System.out.println("Extent = " + extent.getULX() + " "
1126
				// + extent.getULY() + " " + extent.getLRX() + " "
1127
				// + extent.getLRY());
1127 1128

  
1128 1129
				try {
1129 1130
					Object[] result = rLayer.getDataStore().queryArray(query);
......
1147 1148
					ColorInterpretation cInt = rLayer.getDataStore()
1148 1149
							.getColorInterpretation();
1149 1150

  
1150
					int rgba[] = {0,1,2,3};
1151
					
1151
					int rgba[] = { 0, 1, 2, 3 };
1152

  
1152 1153
					rgba = setBandsInColors(cInt);
1153 1154

  
1154 1155
					int pixelFormat = convertPixelFormat(numBands);
......
1162 1163
					case Buffer.TYPE_BYTE:
1163 1164
						ude.setRasterData(
1164 1165
								buildByteBuffer(ude, rBuff, transparencyBuffer,
1165
										numBands,rgba), rBuff.getWidth(), rBuff
1166
										.getHeight(), numBands, pixelFormat,
1166
										numBands, rgba), rBuff.getWidth(),
1167
								rBuff.getHeight(), numBands, pixelFormat,
1167 1168
								Image.DataType.GL_UNSIGNED_BYTE);
1168 1169
						break;
1169 1170
					case Buffer.TYPE_SHORT:
......
1211 1212
					e.printStackTrace();
1212 1213
				} catch (RasterDriverException e) {
1213 1214
					System.out.println("QueryArray failed");
1214
					//e.printStackTrace();
1215
					// e.printStackTrace();
1215 1216
				} catch (InvalidSetViewException e) {
1216 1217
					// TODO Auto-generated catch block
1217 1218
					e.printStackTrace();
......
1244 1245

  
1245 1246
	private UpdateDataEvent loadVectorData(FLayer layer, Envelope envelope,
1246 1247
			RequestDataEvent rde, I3DSymbol sy) {
1247
		
1248

  
1248 1249
		System.out.println("vector data");
1249 1250
		UpdateDataEvent ude = new UpdateDataEvent();
1250 1251
		ude.copyDataFromRequest(rde);
1251 1252

  
1252
		
1253 1253
		// Convenience casting, create a default 3D symbol
1254 1254
		IVectorLegend legend = (IVectorLegend) ((FLyrVect) layer).getLegend();
1255

  
1255 1256
		if(sy==null) sy = (I3DSymbol) legend.getDefaultSymbol();
1256 1257
		else legend.setDefaultSymbol(sy);
1257 1258
		
......
1259 1260
		//till gvSIG architects solve geometries problem
1260 1261
		if (sy instanceof IFillSymbol || sy instanceof ILineSymbol)
1261 1262
		{
1263

  
1262 1264
			removeLayerToTerrain(layer);
1263 1265
			getLayer3DProps(layer).setType(Layer3DPropsImpl.layer3DImage);
1264 1266
			addLayerToTerrain(layer, true);
1265 1267
			return null;
1266
		}//End hack
1268
		}// End hack
1267 1269
		Layer3DProps layerprops = getLayer3DProps(layer);
1268
		
1269
		if (layerprops.isZEnable()==false)
1270

  
1271
		if (layerprops.isZEnable() == false)
1270 1272
			sy.setFixedHeight(layerprops.getHeight());
1271
		
1272
		
1273

  
1273 1274
		ViewPort vp = new ViewPort(_viewProjection);
1274 1275
		vp.setEnvelope(envelope); // the real extent of the tile
1275 1276
		vp.setAdjustable(false);
1276 1277
		vp.setImageSize(new Dimension(256, 256));
1277 1278
		vp.setDist1pixel(0.000000001);
1278 1279
		double scale = 0.5 * (layer.getMaxScale() + layer.getMinScale());
1279
		
1280

  
1280 1281
		try {
1281 1282
			layer.draw(null, null, vp, new MyCancel(), scale);
1282 1283
		} catch (ReadException e) {
......
1298 1299
			System.out.println("OSG Layer added");
1299 1300
		}
1300 1301
		// Vectorial layers
1301
		else {		
1302
		else {
1302 1303
			ISymbol3D sym = null;
1303 1304
			try {
1304 1305
				sym = Symbol3DFactory.getSymbol3D(sy);
......
1306 1307
				// TODO Auto-generated catch block
1307 1308
				e.printStackTrace();
1308 1309
			}
1309
			//sm.setPointSize((float) sy.getSize());
1310
			// sm.setPointSize((float) sy.getSize());
1310 1311
			n = sym.buildSceneGraph(sy.getGeometry());
1311 1312
		}
1312 1313

  
......
1351 1352
								envelope.getLowerCorner().getY());
1352 1353

  
1353 1354
				query.setTileParameters(rde.getTileLevel(), rde.getTileX(),
1354
						rde.getTileY(), extent, cacheStruct);
1355
						rde.getTileY(), extent, null);
1355 1356

  
1356 1357
				// query.setAreaOfInterest(extent, 512, 512);
1357 1358

  
......
1501 1502
						data[cont] = (byte) 0;
1502 1503
					else
1503 1504
						data[cont] = (byte) 255;
1504
					//data[cont] = transparencyBuffer.getElemByte(i, j, 0);
1505
					// data[cont] = transparencyBuffer.getElemByte(i, j, 0);
1505 1506

  
1506 1507
					cont++;
1507 1508

  
......
1650 1651
	}
1651 1652

  
1652 1653
	protected int[] setBandsInColors(ColorInterpretation cInt) {
1653
		
1654

  
1654 1655
		int rgba[] = new int[4];
1655
		
1656

  
1656 1657
		rgba[0] = cInt.getBand(ColorInterpretation.RED_BAND);
1657
		if(rgba[0]==-1) rgba[0]=0;
1658
		if (rgba[0] == -1)
1659
			rgba[0] = 0;
1658 1660
		rgba[1] = cInt.getBand(ColorInterpretation.GREEN_BAND);
1659
		if(rgba[1]==-1) rgba[1]=1;
1661
		if (rgba[1] == -1)
1662
			rgba[1] = 1;
1660 1663
		rgba[2] = cInt.getBand(ColorInterpretation.BLUE_BAND);
1661
		if(rgba[2]==-1) rgba[2]=2;
1664
		if (rgba[2] == -1)
1665
			rgba[2] = 2;
1662 1666
		rgba[3] = cInt.getBand(ColorInterpretation.ALPHA_BAND);
1663
		if(rgba[3]==-1) rgba[3]=3;
1664
		
1667
		if (rgba[3] == -1)
1668
			rgba[3] = 3;
1669

  
1665 1670
		return rgba;
1666
		
1671

  
1667 1672
	}
1668 1673

  
1669 1674
	protected class MyCancel implements Cancellable {
......
1718 1723

  
1719 1724
	}
1720 1725

  
1721
	public void refreshLayerInTerrain(Layer3DProps props, boolean bRemoveCache) {
1726
	public void refreshLayerInTerrain(FLayer layer, Layer3DProps props,
1727
			boolean bRemoveCache) {
1722 1728

  
1723 1729
		System.out.println("Refresh");
1724 1730
		if (props == null)
......
1742 1748
				e.printStackTrace();
1743 1749
			}
1744 1750
		} else if (type == Layer3DProps.layer3DVector) {
1745
			invalidateVectorLayer(props);
1751
			// ILegend legend = ((FLyrVect) layer).getLegend();
1752
			//
1753
			// try {
1754
			// RequestDataEvent rde = new RequestDataEvent();
1755
			// loadVectorData(layer, layer.getFullEnvelope(),
1756
			// new RequestDataEvent(), (I3DSymbol) legend.getDefaultSymbol());
1757
			// } catch (ReadException e) {
1758
			// // TODO Auto-generated catch block
1759
			// e.printStackTrace();
1760
			// }
1761

  
1746 1762
		}
1747 1763

  
1748 1764
	}

Also available in: Unified diff