Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / ext3Dgui / src / com / iver / ai2 / gvsig3dgui / view / View3D.java @ 20297

History | View | Annotate | Download (14 KB)

1
/* Generated by Together */
2

    
3
package com.iver.ai2.gvsig3dgui.view;
4

    
5
import java.awt.BorderLayout;
6
import java.awt.Color;
7
import java.awt.Component;
8
import java.awt.Cursor;
9
import java.awt.Dimension;
10
import java.awt.Image;
11
import java.awt.Point;
12
import java.awt.Toolkit;
13
import java.awt.geom.Rectangle2D;
14
import java.beans.PropertyChangeEvent;
15
import java.beans.PropertyChangeListener;
16
import java.net.URL;
17

    
18
import javax.swing.ImageIcon;
19
import javax.swing.JPanel;
20
import javax.swing.JSplitPane;
21

    
22
import org.cresques.cts.IProjection;
23

    
24
import com.iver.ai2.gvsig3d.listener.canvasListener;
25
import com.iver.ai2.gvsig3d.map3d.MapContext3D;
26
import com.iver.ai2.gvsig3d.map3d.MapControl3D;
27
import com.iver.ai2.gvsig3d.map3d.ViewPort3D;
28
import com.iver.ai2.gvsig3d.navigation.NavigationMode;
29
import com.iver.ai2.gvsig3d.resources.ResourcesFactory;
30
import com.iver.ai2.gvsig3dgui.ProjectView3D;
31
import com.iver.ai2.gvsig3dgui.behavior.RectangleBehavior3D;
32
import com.iver.ai2.gvsig3dgui.listener.PointSelectListerner3D;
33
import com.iver.ai2.gvsig3dgui.listener.RectangleSelectListener3D;
34
import com.iver.andami.PluginServices;
35
import com.iver.andami.ui.mdiManager.WindowInfo;
36
import com.iver.cit.gvsig.fmap.ColorEvent;
37
import com.iver.cit.gvsig.fmap.ExtentEvent;
38
import com.iver.cit.gvsig.fmap.ProjectionEvent;
39
import com.iver.cit.gvsig.fmap.ViewPort;
40
import com.iver.cit.gvsig.fmap.ViewPortListener;
41
import com.iver.cit.gvsig.fmap.MapControl.MapToolListener;
42
import com.iver.cit.gvsig.fmap.crs.CRSFactory;
43
import com.iver.cit.gvsig.fmap.layers.FLayers;
44
import com.iver.cit.gvsig.fmap.tools.Behavior.Behavior;
45
import com.iver.cit.gvsig.fmap.tools.Behavior.PointBehavior;
46
import com.iver.cit.gvsig.project.documents.view.MapOverview;
47
import com.iver.cit.gvsig.project.documents.view.gui.BaseView;
48
import com.iver.cit.gvsig.project.documents.view.toc.gui.TOC;
49
import com.iver.cit.gvsig.project.documents.view.toolListeners.InfoListener;
50

    
51
import es.upv.ai2.osgvp.planets.Planet;
52
import es.upv.ai2.osgvp.planets.RequestLayerListener;
53
import es.upv.ai2.osgvp.planets.TileCreatedListener;
54
import es.upv.ai2.osgvp.planets.TileManagerListener;
55
import es.upv.ai2.osgvp.viewer.Camera;
56
import es.upv.ai2.osgvp.viewer.IViewerContainer;
57

    
58
public class View3D extends BaseView {
59

    
60
        private static final long serialVersionUID = 1L;
61

    
62
        private IViewerContainer m_canvas3d;
63

    
64
        private Planet m_planet;
65

    
66
        private FLayers m_layers;
67

    
68
        private UpdateView3D updateViewThread;
69
        
70
        private NavigationMode navMode = null;
71

    
72
        private String buttonPath;
73

    
74
        public View3D() {
75
                this.setName("View3D");
76
        }
77

    
78
        public void setModel(ProjectView3D model) {
79
                this.modelo = model;
80

    
81
                initComponents();
82

    
83
                // Se registra como listener de cambios en FMap
84
                MapContext3D fmap = (MapContext3D)modelo.getMapContext();
85

    
86
                m_layers = fmap.getLayers();
87
                /*
88
                 * for (int i=0;i<layers.getLayersCount();i++){ if
89
                 * (layers.getLayer(i).isEditing() && layers.getLayer(i) instanceof
90
                 * FLyrVect){ this.showConsole(); } }
91
                 */
92

    
93
                // Make layers listen to tile requests
94
                TileManagerListener tileManager = (TileManagerListener) m_planet
95
                                .getTileListener();
96
                tileManager.setTileCreatedListener((TileCreatedListener) fmap);
97
                tileManager.setRequestLayerListener((RequestLayerListener) fmap);
98

    
99
                // set projection for 3D view
100
                IProjection projection = null;
101
                ViewPort vp = null;
102
                Rectangle2D extend;
103
                if (m_planet.getCoordinateSystemType() == Planet.CoordinateSystemType.GEOCENTRIC) {
104
                        projection = CRSFactory.getCRS("EPSG:4326");
105
                        extend = new Rectangle2D.Double(-180.0, 90.0, 180.0, -90.0);
106
                } else {
107
                        projection = CRSFactory.getCRS("EPSG:23030"); // test
108
                        // projection = CRSFactory.getCRS("EPSG:4326"); // test
109
                        // extend = new Rectangle2D.Double(-20000000.0, 10000000.0,
110
                        // 40000000.0, 20000000.0);
111
                        extend = new Rectangle2D.Double(20000000.0, 10000000.0,
112
                                        -20000000.0, -10000000.0);
113
                }
114
                vp = new ViewPort3D(projection);
115
                vp.setExtent(extend);
116
                fmap.setViewPort(vp);
117
                ((ViewPort3D)vp).setPlanet(this.m_planet);
118
                
119
                // Add  ViewPort3D listener to canvas3D. to refresh locator.
120
                m_canvas3d.addMouseListener((ViewPort3D)vp);
121

    
122
                // Pass JOSG objects to MapContext3D
123
                fmap.setViewer(m_canvas3d);
124
                fmap.setViewProjection(projection);
125
                fmap.setPlanet(m_planet);
126

    
127
                // Se configura el mapControl
128
                        
129
                canvasListener lis = new canvasListener();
130
                lis.setPlanet(m_planet);
131
                lis.setCanvas(m_canvas3d);
132
                m_canvas3d.addKeyListener(lis);
133
                m_canvas3d.addMouseListener(lis);
134
                
135
                MapToolListener mapToolListener = m_MapControl.getMapToolListener();
136
                m_canvas3d.addMouseListener(mapToolListener);
137
                m_canvas3d.addMouseMotionListener(mapToolListener);
138
                m_canvas3d.addMouseWheelListener(mapToolListener);
139
                
140
                m_MapControl.setMapContext(fmap);
141
                m_TOC.setMapContext(fmap);
142
                m_MapControl.setBackground(new Color(255, 255, 255));
143
                if (modelo.getMapOverViewContext() != null) {
144
                        m_MapLoc.setModel(modelo.getMapOverViewContext());
145
                }
146
                model.addPropertyChangeListener(new PropertyChangeListener() {
147
                        public void propertyChange(PropertyChangeEvent evt) {
148
                                if (evt.getPropertyName().equals("name")) {
149
                                        PluginServices.getMDIManager().getWindowInfo(View3D.this)
150
                                                        .setTitle(
151
                                                                        PluginServices.getText(this, "Vista3D")
152
                                                                                        + " : "
153
                                                                                        + (String) evt.getNewValue());
154
                                }
155
                        }
156
                });
157
                if (m_MapControl.getViewPort() != null) {
158
                        m_MapControl.getViewPort().addViewPortListener(
159
                                        new ViewPortListener() {
160
                                                public void extentChanged(ExtentEvent e) {
161
                                                        /*
162
                                                         * if (PluginServices.getMainFrame() != null){
163
                                                         * PluginServices.getMainFrame().getStatusBar().setControlValue("scale",String.valueOf(m_MapControl.getMapContext().getScaleView()));
164
                                                         * PluginServices.getMainFrame().getStatusBar().setMessage("projection",
165
                                                         * getMapControl().getViewPort().getProjection().getAbrev()); }
166
                                                         */
167
                                                }
168

    
169
                                                public void backColorChanged(ColorEvent e) {
170
                                                }
171

    
172
                                                public void projectionChanged(ProjectionEvent e) {
173
                                                        m_MapLoc.setProjection(e.getNewProjection());
174
                                                }
175
                                        });
176
                }
177
        }
178

    
179
        /**
180
         * DOCUMENT ME!
181
         */
182
        // FALTA CONVERTIR QUE CANVAS3D HAGA EL PAPEL DE m_MapControl
183
        protected void initComponents() { // GEN-BEGIN:initComponents
184
                m_MapControl = new MapControl3D(this); // Default is paintEnabled = false.
185
                // Remember to activate it
186
                m_MapControl.addExceptionListener(mapControlExceptionListener);
187
                // modelo.setMapContext(m_MapControl.getMapContext());
188

    
189
                // m_MapControl.setAcceptEvents(true); Lo comento porque ya se hace en
190
                // el setModel
191
                m_TOC = new TOC();
192

    
193
                // Ponemos el localizador
194
                m_MapLoc = new MapOverview(m_MapControl);
195
                m_MapLoc.setPreferredSize(new Dimension(150, 200));
196
                removeAll();
197
                tempMainSplit = new ViewSplitPane(JSplitPane.HORIZONTAL_SPLIT);
198
                tempMainSplit.setPreferredSize(new Dimension(500, 300));
199
                if (!isPalette()) {
200
                        JSplitPane tempSplitToc = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
201
                        tempSplitToc.setTopComponent(m_TOC);
202
                        tempSplitToc.setBottomComponent(m_MapLoc);
203
                        tempSplitToc.setResizeWeight(0.7);
204
                        tempMainSplit.setLeftComponent(tempSplitToc);
205
                } else {
206
                        tempMainSplit.setLeftComponent(m_TOC);
207
                }
208
                m_TOC.setVisible(true);
209
                JPanel panel = new JPanel();
210
                panel.setLayout(new BorderLayout());
211
                panel.add((Component) m_canvas3d /* m_MapControl */);
212
                tempMainSplit.setRightComponent(panel);
213
                panel.setMinimumSize(new Dimension(100, 100));
214
                // split.setBottomComponent(getConsolePanel());
215
                // split.setTopComponent(tempMainSplit);
216
                // split.setResizeWeight(0.9);
217
                this.setLayout(new BorderLayout());
218
                this.add(tempMainSplit, BorderLayout.CENTER);
219
                
220
                // default cursor
221
                
222
                String oldPath = ResourcesFactory.getExtPath();// Save the path. 
223
                ResourcesFactory.setExtPath("/gvSIG/extensiones/com.iver.ai2.gvsig3dgui/images/");//my new path
224
                buttonPath = ResourcesFactory.getResourcesPath();
225
                ResourcesFactory.setExtPath(oldPath);// Restore the old path. 
226
                System.out.println(oldPath);
227
                System.out.println(buttonPath);
228
                
229
                URL path;
230
                path = this.getClass().getClassLoader().getResource("images/");
231
                buttonPath = path.getPath(); 
232

    
233
                Image navCursorImage = new ImageIcon(buttonPath + "/NavigationCursor.gif")
234
                                .getImage();
235
                
236
                //Image navCursorImage = new ImageIcon(this.getClass().getResource(
237
        //    "images/NavigationCursor.gif")).getImage();
238
        Cursor navCursor = Toolkit.getDefaultToolkit().createCustomCursor(navCursorImage,
239
            new Point(16, 16), "");
240
        ((Component)m_canvas3d).setCursor(navCursor);
241

    
242
                // hideConsole();
243

    
244
                // //Listener de eventos de movimiento que pone las coordenadas del
245
                // rat�n en la barra de estado
246
                // StatusBarListener sbl = new StatusBarListener(m_MapControl);
247
                //
248
                // // Zoom out (pinchas y el mapa se centra y te muestra m�s).
249
                // // No es dibujando un rect�ngulo, es solo pinchando.
250
                //
251
                // ZoomOutListener zol = new ZoomOutListener(m_MapControl);
252
                // m_MapControl.addMapTool("zoomOut", new Behavior[]{new
253
                // PointBehavior(zol), new MouseMovementBehavior(sbl)});
254
                //
255
                // // pan
256
                //
257
                // PanListener pl = new PanListener(m_MapControl);
258
                // m_MapControl.addMapTool("pan", new Behavior[]{new MoveBehavior(pl),
259
                // new MouseMovementBehavior(sbl)});
260
                //
261
                // // Medir
262
                //
263
                // MeasureListener mli = new MeasureListener(m_MapControl);
264
                // m_MapControl.addMapTool("medicion", new Behavior[]{new
265
                // PolylineBehavior(mli), new MouseMovementBehavior(sbl)});
266
                //
267
                // // Area
268
                //
269
                // AreaListener ali = new AreaListener(m_MapControl);
270
                // m_MapControl.addMapTool("area", new Behavior[]{new
271
                // PolygonBehavior(ali), new MouseMovementBehavior(sbl)});
272
                //
273
                 //Seleccion por punto
274
        
275
        PointSelectListerner3D psl = new PointSelectListerner3D(m_MapControl);
276
                 m_MapControl.addMapTool("pointSelection", new Behavior[]{new
277
                 PointBehavior(psl)});
278
                //
279
            //Info por punto
280
                InfoListener il = new InfoListener(m_MapControl);
281
                m_MapControl.addMapTool("info", new Behavior[]{new PointBehavior(il)});
282
                //new MouseMovementBehavior(sbl)});
283
                //
284
                // // Link por punto
285
                // LinkListener ll = new LinkListener(m_MapControl);
286
                // m_MapControl.addMapTool("link", new Behavior[]{new PointBehavior(ll),
287
                // new MouseMovementBehavior(sbl)});
288
                //
289
                 // Selecci�n por rect�ngulo
290
                RectangleSelectListener3D rsl = new RectangleSelectListener3D(m_MapControl);
291
                m_MapControl.addMapTool("rectSelection", new Behavior[] {
292
                                new RectangleBehavior3D(rsl)});
293
                //
294
                // //Selecci�n por pol�gono
295
                // PolygonSelectListener poligSel = new
296
                // PolygonSelectListener(m_MapControl);
297
                // m_MapControl.addMapTool("polSelection", new Behavior[]{new
298
                // PolygonBehavior(poligSel), new MouseMovementBehavior(sbl)});
299
                //
300
                // // Zoom por rect�ngulo
301
                // ZoomOutRightButtonListener zoil = new
302
                // ZoomOutRightButtonListener(m_MapControl);
303
                // ZoomInListener zil = new ZoomInListener(m_MapControl);
304
                // m_MapControl.addMapTool("zoomIn", new Behavior[]{new
305
                // RectangleBehavior(zil),
306
                // new PointBehavior(zoil), new MouseMovementBehavior(sbl)});
307
                //
308
                // SelectImageListener sil = new SelectImageListener(m_MapControl);
309
                // m_MapControl.addMapTool("selectImage", new Behavior[]{
310
                // new PointBehavior(sil), new MouseMovementBehavior(sbl)});
311
                //
312
                // ZoomPixelCursorListener zp = new
313
                // ZoomPixelCursorListener(m_MapControl);
314
                // m_MapControl.addMapTool("zoom_pixel_cursor", new Behavior[]{new
315
                // PointBehavior(zp), new MouseMovementBehavior(sbl)});
316
                //
317
                // m_MapControl.setTool("zoomIn"); // Por defecto
318
                // m_MapControl.setPaintEnabled(true);
319
        }
320

    
321
        public WindowInfo getWindowInfo() {
322
                if (m_viewInfo == null) {
323
                        m_viewInfo = new WindowInfo(WindowInfo.ICONIFIABLE
324
                                        | WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE);
325

    
326
                        m_viewInfo.setWidth(500);
327
                        m_viewInfo.setHeight(300);
328
                        m_viewInfo.setTitle(PluginServices.getText(this, "Vista3D") + " : "
329
                                        + modelo.getName());
330
                }
331
                return m_viewInfo;
332
        }
333

    
334
        public IViewerContainer getCanvas3d() {
335
                return m_canvas3d;
336
        }
337

    
338
        public void setCanvas3d(IViewerContainer canvas3d) {
339
                m_canvas3d = canvas3d;
340

    
341
                // Launching slider update
342
                // Create the object with the run() method
343
                updateViewThread = new UpdateView3D(30000);
344

    
345
                // Create the thread supplying it with the runnable object
346
                Thread thread = new Thread(updateViewThread);
347

    
348
                // Start the thread
349
                thread.start();
350
        }
351

    
352
        public Planet getPlanet() {
353
                return m_planet;
354
        }
355

    
356
        public void setPlanet(Planet planet) {
357
                if (m_canvas3d == null)
358
                        return;
359
                m_planet = planet;
360

    
361
                // Preguntar a rafa si cuando se hace un setSceneData se cuelga un nodo
362
                // nuevo o se destruye el grafo entero y se crea de nuevo
363
                // m_canvas3d.setSceneData(m_planet);
364
        }
365

    
366
        public void windowActivated() {
367
                m_canvas3d.repaint();
368

    
369
        }
370

    
371
        public void windowClosed() {
372
                super.windowClosed();
373
        }
374

    
375
        public void repaint() {
376
                if (m_canvas3d != null)
377
                        m_canvas3d.repaint();
378
                super.repaint();
379
        }
380

    
381
        public Camera getCamera() {
382
                return getCanvas3d().getOSGViewer().getCamera();
383
        }
384

    
385
        public void setCamera(Camera camera) {
386
                getCanvas3d().getOSGViewer().setCamera(camera);
387
        }
388

    
389
        /**
390
         * Class to repaint canvas 3D. This class implements runnable and contructor with time parameter. 
391
         * 
392
         * @author julio
393
         *
394
         */
395
        public class UpdateView3D implements Runnable {
396

    
397
                private boolean finish = false;
398
                
399
                private long time;
400

    
401
                public UpdateView3D(long time) {
402
                        this.time = time;
403
                }
404

    
405
                // This method is called when the thread runs
406
                public void run() {
407
                        while (true) {
408
                                try {
409
                                        Thread.sleep(time);
410
                                        synchronized (this) {
411
                                                if (finish) {
412
                                                        break;
413
                                                }
414
                                        }
415
                                } catch (InterruptedException e) {
416

    
417
                                        e.printStackTrace();
418
                                }
419
                                // Repainting canvas
420
                                m_canvas3d.repaint();
421
                        }
422
                }
423

    
424
                public synchronized void end() {
425
                        finish = true;
426
                }
427

    
428
                public long getTime() {
429
                        return time;
430
                }
431

    
432
                public void setTime(long time) {
433
                        this.time = time;
434
                }
435

    
436
        }
437

    
438
        public NavigationMode getNavMode() {
439
                return navMode;
440
        }
441

    
442
        public void setNavMode(NavigationMode navMode) {
443
                this.navMode = navMode;
444
        }
445

    
446
}