Statistics
| Revision:

gvsig-3d / 1.10 / trunk / libraries / lib3DMap / src / org / gvsig / gvsig3d / map3d / GraphicLayer3D.java @ 76

History | View | Annotate | Download (5.23 KB)

1
package org.gvsig.gvsig3d.map3d;
2

    
3
import java.awt.geom.Point2D;
4
import java.io.FileNotFoundException;
5

    
6
import org.apache.log4j.Logger;
7
import org.gvsig.gvsig3d.gui.FeatureFactory;
8
import org.gvsig.osgvp.core.osg.AutoTransform;
9
import org.gvsig.osgvp.core.osg.Group;
10
import org.gvsig.osgvp.core.osg.Node;
11
import org.gvsig.osgvp.core.osg.PositionAttitudeTransform;
12
import org.gvsig.osgvp.core.osg.Vec3;
13
import org.gvsig.osgvp.core.osg.Vec4;
14
import org.gvsig.osgvp.core.osgdb.osgDB;
15
import org.gvsig.osgvp.exceptions.InvalidValueException;
16
import org.gvsig.osgvp.exceptions.node.ChildIndexOutOfBoundsExceptions;
17
import org.gvsig.osgvp.exceptions.node.LoadNodeException;
18
import org.gvsig.osgvp.exceptions.node.NodeException;
19
import org.gvsig.osgvp.features.Text;
20
import org.gvsig.osgvp.terrain.Terrain;
21
import org.gvsig.osgvp.terrain.TerrainViewer;
22

    
23
import com.iver.ai2.gvsig3d.resources.ResourcesFactory;
24
import com.iver.cit.gvsig.fmap.core.v02.FLabel;
25
import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
26
import com.iver.cit.gvsig.fmap.rendering.FGraphic;
27
import com.iver.cit.gvsig.fmap.rendering.FGraphicLabel;
28

    
29
public class GraphicLayer3D extends GraphicLayer {
30

    
31
        private Group                         _graphicNode;
32
        private Terrain                 _terrain;
33
        private TerrainViewer         _terrainViewer;
34
        private static Logger         _logger = Logger.getLogger(GraphicLayer3D.class
35
                        .getName());
36

    
37
        public GraphicLayer3D(TerrainViewer terrainViewer, Terrain terrain) {
38
                super();
39
                _terrainViewer = terrainViewer;
40
                _graphicNode = new Group();
41
                _graphicNode.setNodeName("graphicLayer");
42
                try {
43
                        _terrainViewer.addFeature(_graphicNode);
44
//                        this.graphicNode = planetViewer.getSpecialNodes()(0);
45
                } catch (ChildIndexOutOfBoundsExceptions e) {
46
                        _logger.error("Command: " + "Error Child index out of bound.", e);
47
                } catch (NodeException e) {
48
                        // TODO Auto-generated catch block
49
                        e.printStackTrace();
50
                }
51
                _terrain = terrain;
52
        }
53

    
54
        public void clearAllGraphics() {
55
                // codigo de borrado de busquedas
56
                Group grupo = null;
57
                grupo = _graphicNode;
58

    
59
                while (grupo.getNumChildren() > 0) {
60
                        Node node;
61
                        try {
62
                                node = grupo.getChild(0);
63
                                grupo.removeChild(node);
64
                        } catch (ChildIndexOutOfBoundsExceptions e) {
65
                                _logger.error("Command: " + "Error Child index out of bound.", e);
66
                        } catch (NodeException e) {
67
                                _logger.error("Command: " + "Error removing Child from group.", e);
68
                        }
69
                }
70
        }
71

    
72
        public void addGraphic(FGraphic g) {
73
                // a�adir la etiqueta aki
74

    
75
                FGraphicLabel label = (FGraphicLabel) g;
76
                int scale = 15;
77
                FLabel lab = label.getLabel();
78
                Point2D p = lab.getOrig();
79

    
80
                System.out.println("etiqueta ::: " + label.getLabel().getString());
81

    
82
                // Variable declaration
83
                Vec3 posI = null, posE = null, posT = null;
84
                Vec3 posIni = null, posEnd = null, posText = null, pos1 = null, pos2 = null;
85

    
86
                // search for Gazetteer
87
                // There are two gazetteer modes SPHERICAL and PLANE mode
88
                if (_terrain.getCoordinateSystemType() == Terrain.CoordinateSystemType.GEOCENTRIC) {
89
                        // For spheriacl mode
90

    
91
                        // Geodesical coordinates
92
                        posI = new Vec3(p.getY(), p.getX(), 0);
93
                        posE = new Vec3(p.getY(), p.getX(), 10000);
94
                        posT = new Vec3(p.getY(), p.getX(), scale); // Text position
95

    
96
                        // To convert coordinate to cartesian
97
                        posIni = _terrain.convertLatLongHeightToXYZ(posI);
98
                        posEnd = _terrain.convertLatLongHeightToXYZ(posE);
99

    
100
                        posText = _terrain.convertLatLongHeightToXYZ(posT);
101

    
102
                } else if (_terrain.getCoordinateSystemType() == Terrain.CoordinateSystemType.PROJECTED) {
103

    
104
                        // For plane mode
105
                        posIni = new Vec3(p.getX(), p.getY(), 0);
106
                        posText = new Vec3(p.getX(), p.getY(), scale); // Text position
107
                }
108
                // To display text in gazetteer
109
                Text text = (Text) FeatureFactory.insertTextoS(label.getLabel()
110
                                .getString(), posText, new Vec4(1.0, 0.0, 0.0, 1.0), 30, true);
111

    
112
                Group grupo = null;
113
                grupo = _graphicNode;
114
                String name = ResourcesFactory.getResourcePath("flag.ive");
115
                System.out.println(name);
116
                String path = ResourcesFactory.getResourcesPath();
117
                System.out.println(path);
118
                Node flag = null;
119
                try {
120
                        flag = osgDB.readNodeFile(name);
121
                } catch (LoadNodeException e) {
122
                        _logger.error("Command: " + "Error reading file from system.", e);
123
                } catch (FileNotFoundException e) {
124
                        // TODO Auto-generated catch block
125
                        e.printStackTrace();
126
                }
127

    
128
                // Con autotransform
129
                AutoTransform trans = null;
130
                PositionAttitudeTransform pat = null;
131
                try {
132
                        trans = new AutoTransform();
133
                        pat = new PositionAttitudeTransform();
134
                } catch (NodeException e1) {
135
                        // TODO Auto-generated catch block
136
                        e1.printStackTrace();
137
                }
138
                try {
139
                        trans.addChild(pat);
140
                        pat.addChild(flag);
141
                } catch (NodeException e) {
142
                        _logger.error("Command: " + "Error adding new child.", e);
143
                }
144
                pat.setScale(new Vec3(scale, scale, scale));
145
                trans.setPosition(posIni);
146
                try {
147
                        trans
148
                                        .setAutoRotateMode(AutoTransform.AutoRotateMode.ROTATE_TO_CAMERA);
149
                        trans.setAutoScaleToScreen(true);
150
                } catch (InvalidValueException e) {
151
                        _logger.error("Command: " + "Error setting new camera property.", e);
152
                }
153

    
154
                // Add nodes to graph
155
                try {
156
                        grupo.addChild(trans);
157
                        grupo.addChild(text);
158
                } catch (NodeException e) {
159
                        _logger.error("Command: " + "Error adding new child.", e);
160
                }
161

    
162
        }
163
}