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