Revision 257 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 | ||
---|---|---|
22 | 22 |
package org.gvsig.gvsig3d.impl.map3d; |
23 | 23 |
|
24 | 24 |
import java.awt.Graphics2D; |
25 |
import java.awt.Point; |
|
25 | 26 |
import java.awt.geom.AffineTransform; |
26 | 27 |
import java.awt.geom.Rectangle2D; |
27 | 28 |
import java.awt.image.BufferedImage; |
... | ... | |
33 | 34 |
import javax.print.attribute.PrintRequestAttributeSet; |
34 | 35 |
|
35 | 36 |
import org.cresques.cts.IProjection; |
36 |
import org.gvsig.fmap.mapcontext.MapContext; |
|
37 | 37 |
import org.gvsig.fmap.mapcontext.ViewPort; |
38 | 38 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
39 |
import org.gvsig.fmap.mapcontext.layers.FLayers; |
|
39 | 40 |
import org.gvsig.fmap.mapcontext.layers.LayerEvent; |
41 |
import org.gvsig.fmap.mapcontext.layers.LayerListener; |
|
40 | 42 |
import org.gvsig.fmap.mapcontext.layers.SelectionEvent; |
41 | 43 |
import org.gvsig.fmap.mapcontext.layers.SingleLayerIterator; |
44 |
import org.gvsig.fmap.mapcontext.layers.operations.Classifiable; |
|
45 |
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect; |
|
42 | 46 |
import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent; |
43 | 47 |
import org.gvsig.gvsig3d.map3d.Layer3DProps; |
44 | 48 |
import org.gvsig.gvsig3d.map3d.MapContext3D; |
45 |
import org.gvsig.gvsig3d.map3d.ViewPort3D; |
|
46 | 49 |
import org.gvsig.gvsig3d.map3d.layers.FLayers3D; |
47 | 50 |
import org.gvsig.osgvp.core.osg.Image; |
48 | 51 |
import org.gvsig.osgvp.core.osg.Matrix; |
... | ... | |
57 | 60 |
import org.gvsig.osgvp.terrain.LayerManager; |
58 | 61 |
import org.gvsig.osgvp.terrain.RequestDataEvent; |
59 | 62 |
import org.gvsig.osgvp.terrain.Terrain; |
63 |
import org.gvsig.osgvp.terrain.Terrain.CoordinateSystemType; |
|
60 | 64 |
import org.gvsig.osgvp.terrain.TerrainViewer; |
61 | 65 |
import org.gvsig.osgvp.terrain.UpdateDataEvent; |
62 | 66 |
import org.gvsig.osgvp.viewer.Camera; |
... | ... | |
92 | 96 |
|
93 | 97 |
private boolean visibilityChange = false; |
94 | 98 |
|
95 |
public MapContext3DImpl() { |
|
96 |
super(); |
|
97 |
} |
|
99 |
|
|
100 |
public MapContext3DImpl(){} |
|
98 | 101 |
|
99 | 102 |
public MapContext3DImpl(ViewPort vp) { |
100 | 103 |
super(vp); |
101 | 104 |
} |
105 |
|
|
106 |
public MapContext3DImpl(FLayers fLayers, ViewPort vp){ |
|
107 |
|
|
108 |
super(fLayers,vp); |
|
109 |
|
|
110 |
} |
|
102 | 111 |
|
103 | 112 |
public void draw(BufferedImage image, Graphics2D g, Cancellable cancel, |
104 | 113 |
double scale) { |
... | ... | |
246 | 255 |
while (lyrIterator.hasNext()) { |
247 | 256 |
FLayer layer = lyrIterator.next(); |
248 | 257 |
Layer3DProps props = getLayer3DProps(layer); |
249 |
// props.setTerrainOrder(props.getTocOrder()); |
|
250 | 258 |
addLayerToTerrain(layer, false); |
251 | 259 |
} |
252 | 260 |
|
... | ... | |
561 | 569 |
public void layerAdded(FLayers3D parent, FLayer layer) { |
562 | 570 |
|
563 | 571 |
System.out.println("Añadida capa. Evento Capturado"); |
564 |
// // to add group layers to 3D, just add recursively child data layers
|
|
565 |
// if (layer instanceof FLayers) {
|
|
566 |
// FLayers group = (FLayers) layer;
|
|
567 |
// for (int iChild = 0; iChild < group.getLayersCount(); iChild++) {
|
|
568 |
// layerAdded((FLayers3D) group, group.getLayer(iChild));
|
|
569 |
// }
|
|
570 |
// getLayer3DProps(layer).setHooked(true);
|
|
571 |
// return;
|
|
572 |
// }
|
|
573 |
//
|
|
574 |
// if (layer instanceof Classifiable) {
|
|
575 |
// Classifiable legendLyr = (Classifiable) layer;
|
|
576 |
// // legendLyr.addLegendListener((LegendListener) this);
|
|
577 |
// this.addLayerListener(this);
|
|
578 |
// }
|
|
579 |
// layer.addLayerListener((LayerListener) this);
|
|
580 |
//
|
|
581 |
// // listener to manage the selection for the layers
|
|
582 |
// if (layer.getClass().equals(FLyrVect.class)) {
|
|
583 |
// FLyrVect lyr = (FLyrVect) layer;
|
|
584 |
// refreshLayerVectorsVisibility(lyr);
|
|
585 |
// try {
|
|
586 |
// SelectableDataSource recordSet = lyr.getRecordset();
|
|
587 |
// if (recordSet != null) {
|
|
588 |
// SelectionSupport selectionSupport = recordSet
|
|
589 |
// .getSelectionSupport();
|
|
590 |
// selectionSupport.addSelectionListener(this);
|
|
591 |
// }
|
|
592 |
// } catch (ReadDriverException e) {
|
|
593 |
// // TODO Auto-generated catch block
|
|
594 |
// e.printStackTrace();
|
|
595 |
// }
|
|
596 |
// }
|
|
597 |
//
|
|
598 |
// if (!_bLoading)
|
|
599 |
// addLayerToTerrain(layer, true);
|
|
600 |
//
|
|
601 |
// // Only do this the first time to add layer
|
|
602 |
// if (_bEmptyView && !_bLoading) {
|
|
603 |
// if (layers.getLayersCount() > 0) {
|
|
604 |
// try {
|
|
605 |
// zoomToExtent(layer.getFullExtent());
|
|
606 |
// } catch (ExpansionFileReadException e) {
|
|
607 |
// e.printStackTrace();
|
|
608 |
// } catch (ReadDriverException e) {
|
|
609 |
// e.printStackTrace();
|
|
610 |
// }
|
|
611 |
// _bEmptyView = false;
|
|
612 |
// }
|
|
613 |
// }
|
|
614 |
//
|
|
615 |
// //PrintDebugLayers();
|
|
572 |
// // to add group layers to 3D, just add recursively child data layers
|
|
573 |
// if (layer instanceof FLayers) {
|
|
574 |
// FLayers group = (FLayers) layer;
|
|
575 |
// for (int iChild = 0; iChild < group.getLayersCount(); iChild++) {
|
|
576 |
// layerAdded((FLayers3D) group, group.getLayer(iChild));
|
|
577 |
// }
|
|
578 |
// getLayer3DProps(layer).setHooked(true);
|
|
579 |
// return;
|
|
580 |
// }
|
|
581 |
// |
|
582 |
// if (layer instanceof Classifiable) {
|
|
583 |
// Classifiable legendLyr = (Classifiable) layer;
|
|
584 |
// // legendLyr.addLegendListener((LegendListener) this);
|
|
585 |
// this.addLayerListener(this);
|
|
586 |
// }
|
|
587 |
// layer.addLayerListener((LayerListener) this);
|
|
588 |
// |
|
589 |
// // listener to manage the selection for the layers
|
|
590 |
// if (layer.getClass().equals(FLyrVect.class)) {
|
|
591 |
// FLyrVect lyr = (FLyrVect) layer;
|
|
592 |
// refreshLayerVectorsVisibility(lyr);
|
|
593 |
// try {
|
|
594 |
// SelectableDataSource recordSet = lyr.getRecordset();
|
|
595 |
// if (recordSet != null) {
|
|
596 |
// SelectionSupport selectionSupport = recordSet
|
|
597 |
// .getSelectionSupport();
|
|
598 |
// selectionSupport.addSelectionListener(this);
|
|
599 |
// }
|
|
600 |
// } catch (ReadDriverException e) {
|
|
601 |
// // TODO Auto-generated catch block
|
|
602 |
// e.printStackTrace();
|
|
603 |
// }
|
|
604 |
// }
|
|
605 |
// |
|
606 |
// if (!_bLoading)
|
|
607 |
// addLayerToTerrain(layer, true);
|
|
608 |
// |
|
609 |
// // Only do this the first time to add layer
|
|
610 |
// if (_bEmptyView && !_bLoading) {
|
|
611 |
// if (layers.getLayersCount() > 0) {
|
|
612 |
// try {
|
|
613 |
// zoomToExtent(layer.getFullExtent());
|
|
614 |
// } catch (ExpansionFileReadException e) {
|
|
615 |
// e.printStackTrace();
|
|
616 |
// } catch (ReadDriverException e) {
|
|
617 |
// e.printStackTrace();
|
|
618 |
// }
|
|
619 |
// _bEmptyView = false;
|
|
620 |
// }
|
|
621 |
// }
|
|
622 |
// |
|
623 |
// // PrintDebugLayers();
|
|
616 | 624 |
|
617 | 625 |
} |
618 | 626 |
|
... | ... | |
756 | 764 |
public UpdateDataEvent loadData(RequestDataEvent rde) { |
757 | 765 |
|
758 | 766 |
System.out.println("Load data"); |
759 |
// if (_terrainLayerMap.size() == 0) |
|
760 |
// return null; |
|
761 |
// if (rde == null) |
|
762 |
// return null; |
|
763 |
// if (rde.getExtent() == null) |
|
764 |
// return null; |
|
765 |
// if (rde.getLayer() == null) |
|
766 |
// return null; |
|
767 |
// if (rde.getLayerManager() == null) |
|
768 |
// return null; |
|
769 |
// |
|
770 |
// UpdateDataEvent ude = new UpdateDataEvent(); |
|
771 |
// ude.copyDataFromRequest(rde); |
|
772 |
// |
|
773 |
// |
|
774 |
// String layerID = rde.getLayer().getLayerID(); |
|
775 |
// FLayer layer = (FLayer) _terrainLayerMap.get(layerID); |
|
776 |
// if (layer == null) |
|
777 |
// return null; |
|
778 |
// if (!layer.isVisible()) |
|
779 |
// return null; |
|
780 |
// |
|
781 |
// Layer3DProps props3D = getLayer3DProps(layer); |
|
782 |
// |
|
783 |
// // get/create cache service |
|
784 |
// FLayerCacheService cacheService = (FLayerCacheService) props3D |
|
785 |
// .getCacheService(); |
|
786 |
// if (cacheService == null) { |
|
787 |
// |
|
788 |
// cacheService = new FLayerCacheService(_terrain, props3D |
|
789 |
// .getCacheName(), layer, _viewProjection); |
|
790 |
// cacheService.setCacheRootDir(Layer3DProps.m_cacheDir); |
|
791 |
// props3D.setCacheService(cacheService); |
|
792 |
// |
|
793 |
// } |
|
794 |
// |
|
795 |
// |
|
796 |
// |
|
797 |
// int dataType = props3D.getType(); |
|
798 |
// Point tileIndices = new Point(rde.getTileX(), rde.getTileY()); |
|
799 |
// TileNum tileNum = new TileNum(rde.getTileLevel(), tileIndices); |
|
800 |
// |
|
801 |
// String tileFileName = ""; |
|
802 |
// |
|
803 |
// double minX, minY, width, height; |
|
804 |
// |
|
805 |
// if (_terrain.getCoordinateSystemType() == |
|
806 |
// CoordinateSystemType.PROJECTED) { |
|
807 |
// minX = rde.getExtent().xMin(); |
|
808 |
// minY = rde.getExtent().yMin(); |
|
809 |
// width = rde.getExtent().xMax() - rde.getExtent().xMin(); |
|
810 |
// height = rde.getExtent().yMax() - rde.getExtent().yMin(); |
|
811 |
// } else { |
|
812 |
// minX = Math.toDegrees(rde.getExtent().xMin()); |
|
813 |
// minY = Math.toDegrees(rde.getExtent().yMin()); |
|
814 |
// width = Math.toDegrees(rde.getExtent().xMax() |
|
815 |
// - rde.getExtent().xMin()); |
|
816 |
// height = Math.toDegrees(rde.getExtent().yMax() |
|
817 |
// - rde.getExtent().yMin()); |
|
818 |
// } |
|
819 |
// boolean failData = false; |
|
820 |
// |
|
821 |
// Rectangle2D extent = new Rectangle2D.Double(minX, minY, width, |
|
822 |
// height); |
|
823 |
// if (cacheService.intersectsLayer(extent)) { // extent test |
|
824 |
// try { |
|
825 |
// tileFileName = cacheService.getTileAsFName(tileNum, extent); |
|
826 |
// if (tileFileName == null) |
|
827 |
// failData = true; |
|
828 |
// } catch (Exception e) { |
|
829 |
// failData = true; |
|
830 |
// NotificationManager.addInfo("Problem reading tile:" + tileNum, |
|
831 |
// e); |
|
832 |
// e.printStackTrace(); |
|
833 |
// } |
|
834 |
// |
|
835 |
// if (failData) { |
|
836 |
// return null; |
|
837 |
// // ude.setFailData(); |
|
838 |
// } else { |
|
839 |
// switch (dataType) { |
|
840 |
// case Layer3DProps.layer3DImage: |
|
841 |
// ude.setRasterData(tileFileName, "gdal"); |
|
842 |
// break; |
|
843 |
// case Layer3DProps.layer3DElevation: |
|
844 |
// ude.setHeightfieldData(tileFileName, "gdal"); |
|
845 |
// break; |
|
846 |
// case Layer3DProps.layer3DVectorMR: |
|
847 |
// ude.setVectorData(tileFileName, "osg"); |
|
848 |
// break; |
|
849 |
// } |
|
850 |
// } |
|
851 |
// } |
|
852 |
// |
|
853 |
// return ude; |
|
854 |
return null; |
|
767 |
if (_terrainLayerMap.size() == 0) |
|
768 |
return null; |
|
769 |
if (rde == null) |
|
770 |
return null; |
|
771 |
if (rde.getExtent() == null) |
|
772 |
return null; |
|
773 |
if (rde.getLayer() == null) |
|
774 |
return null; |
|
775 |
if (rde.getLayerManager() == null) |
|
776 |
return null; |
|
777 |
|
|
778 |
UpdateDataEvent ude = new UpdateDataEvent(); |
|
779 |
ude.copyDataFromRequest(rde); |
|
780 |
|
|
781 |
String layerID = rde.getLayer().getLayerID(); |
|
782 |
FLayer layer = (FLayer) _terrainLayerMap.get(layerID); |
|
783 |
if (layer == null) |
|
784 |
return null; |
|
785 |
if (!layer.isVisible()) |
|
786 |
return null; |
|
787 |
|
|
788 |
Layer3DProps props3D = getLayer3DProps(layer); |
|
789 |
|
|
790 |
// get/create cache service |
|
791 |
// FLayerCacheService cacheService = (FLayerCacheService) props3D |
|
792 |
// .getCacheService(); |
|
793 |
// if (cacheService == null) { |
|
794 |
// |
|
795 |
// cacheService = new FLayerCacheService(_terrain, |
|
796 |
// props3D.getCacheName(), layer, _viewProjection); |
|
797 |
// cacheService.setCacheRootDir(Layer3DProps.m_cacheDir); |
|
798 |
// props3D.setCacheService(cacheService); |
|
799 |
// |
|
800 |
// } |
|
801 |
|
|
802 |
int dataType = props3D.getType(); |
|
803 |
Point tileIndices = new Point(rde.getTileX(), rde.getTileY()); |
|
804 |
//TileNum tileNum = new TileNum(rde.getTileLevel(), tileIndices); |
|
805 |
|
|
806 |
String tileFileName = ""; |
|
807 |
|
|
808 |
double minX, minY, width, height; |
|
809 |
|
|
810 |
if (_terrain.getCoordinateSystemType() == CoordinateSystemType.PROJECTED) { |
|
811 |
minX = rde.getExtent().xMin(); |
|
812 |
minY = rde.getExtent().yMin(); |
|
813 |
width = rde.getExtent().xMax() - rde.getExtent().xMin(); |
|
814 |
height = rde.getExtent().yMax() - rde.getExtent().yMin(); |
|
815 |
} else { |
|
816 |
minX = Math.toDegrees(rde.getExtent().xMin()); |
|
817 |
minY = Math.toDegrees(rde.getExtent().yMin()); |
|
818 |
width = Math.toDegrees(rde.getExtent().xMax() |
|
819 |
- rde.getExtent().xMin()); |
|
820 |
height = Math.toDegrees(rde.getExtent().yMax() |
|
821 |
- rde.getExtent().yMin()); |
|
822 |
} |
|
823 |
boolean failData = false; |
|
824 |
|
|
825 |
Rectangle2D extent = new Rectangle2D.Double(minX, minY, width, height); |
|
826 |
// if (cacheService.intersectsLayer(extent)) { // extent test |
|
827 |
// try { |
|
828 |
// tileFileName = cacheService.getTileAsFName(tileNum, extent); |
|
829 |
// if (tileFileName == null) |
|
830 |
// failData = true; |
|
831 |
// } catch (Exception e) { |
|
832 |
// failData = true; |
|
833 |
// NotificationManager.addInfo("Problem reading tile:" + tileNum, |
|
834 |
// e); |
|
835 |
// e.printStackTrace(); |
|
836 |
// } |
|
837 |
// |
|
838 |
// if (failData) { |
|
839 |
// return null; |
|
840 |
// // ude.setFailData(); |
|
841 |
// } else { |
|
842 |
// switch (dataType) { |
|
843 |
// case Layer3DProps.layer3DImage: |
|
844 |
// ude.setRasterData(tileFileName, "gdal"); |
|
845 |
// break; |
|
846 |
// case Layer3DProps.layer3DElevation: |
|
847 |
// ude.setHeightfieldData(tileFileName, "gdal"); |
|
848 |
// break; |
|
849 |
// case Layer3DProps.layer3DVectorMR: |
|
850 |
// ude.setVectorData(tileFileName, "osg"); |
|
851 |
// break; |
|
852 |
// } |
|
853 |
// } |
|
854 |
// } |
|
855 |
|
|
856 |
return ude; |
|
857 |
|
|
855 | 858 |
} |
856 | 859 |
|
857 | 860 |
public void nameChanged(LayerEvent e) { |
Also available in: Unified diff