Statistics
| Revision:

gvsig-3d / 1.10 / trunk / extensions / ext3Dgui / src / org / gvsig / gvsig3dgui / display / FullScreenPanel.java @ 10

History | View | Annotate | Download (23.9 KB)

1
package org.gvsig.gvsig3dgui.display;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Component;
5
import java.awt.Dimension;
6
import java.awt.GraphicsDevice;
7
import java.awt.GraphicsEnvironment;
8
import java.awt.HeadlessException;
9
import java.awt.Toolkit;
10
import java.awt.event.ActionEvent;
11
import java.awt.event.ComponentEvent;
12
import java.awt.event.ComponentListener;
13
import java.awt.event.ItemEvent;
14
import java.awt.event.ItemListener;
15
import java.awt.event.KeyEvent;
16
import java.awt.event.KeyListener;
17
import java.awt.event.WindowAdapter;
18
import java.awt.event.WindowEvent;
19
import java.io.File;
20

    
21
import javax.swing.JButton;
22
import javax.swing.JCheckBox;
23
import javax.swing.JDialog;
24
import javax.swing.JFileChooser;
25
import javax.swing.JFormattedTextField;
26
import javax.swing.JLabel;
27
import javax.swing.JOptionPane;
28
import javax.swing.JPanel;
29
import javax.swing.JSpinner;
30
import javax.swing.JTextField;
31
import javax.swing.SpinnerNumberModel;
32
import javax.swing.event.ChangeEvent;
33
import javax.swing.event.ChangeListener;
34

    
35
import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
36
import org.gvsig.gvsig3d.gui.Compass;
37
import org.gvsig.gvsig3d.map3d.MapContext3D;
38
import org.gvsig.gvsig3dgui.view.View3D;
39
import org.gvsig.osgvp.core.osg.Group;
40
import org.gvsig.osgvp.core.osg.Matrix;
41
import org.gvsig.osgvp.core.osg.Node;
42
import org.gvsig.osgvp.core.osg.Vec3;
43
import org.gvsig.osgvp.core.osg.Vec4;
44
import org.gvsig.osgvp.exceptions.node.ChildIndexOutOfBoundsExceptions;
45
import org.gvsig.osgvp.exceptions.node.NodeException;
46
import org.gvsig.osgvp.features.Polygon;
47
import org.gvsig.osgvp.stereoconfig.StereoConfig;
48
import org.gvsig.osgvp.terrain.Terrain;
49
import org.gvsig.osgvp.terrain.TerrainCameraManipulator;
50
import org.gvsig.osgvp.terrain.TerrainViewer;
51
import org.gvsig.osgvp.util.CameraHUD;
52
import org.gvsig.osgvp.util.UpdateNodeListener;
53
import org.gvsig.osgvp.viewer.Camera;
54
import org.gvsig.osgvp.viewer.DisplaySettings;
55
import org.gvsig.osgvp.viewer.ISlaveComponent;
56
import org.gvsig.osgvp.viewer.IViewerContainer;
57
import org.gvsig.osgvp.viewer.ViewerFactory;
58
import org.gvsig.osgvp.viewer.ViewerStateListener;
59

    
60
import com.iver.andami.PluginServices;
61
import com.iver.andami.messages.NotificationManager;
62
import com.iver.andami.ui.mdiManager.IWindow;
63
import com.iver.andami.ui.mdiManager.IWindowListener;
64
import com.iver.andami.ui.mdiManager.WindowInfo;
65
import com.iver.core.NotificationDialog;
66

    
67
public class FullScreenPanel extends GridBagLayoutPanel implements IWindow,
68
ChangeListener, IWindowListener {
69

    
70
        /**
71
         * 
72
         */
73
        private static final long serialVersionUID = 7918162328474597496L;
74

    
75
        private WindowInfo _viewinfo;
76
        private int _width = 650;
77
        private int _height = 270;
78
        private View3D _view3D;
79
        private TerrainViewer _fullScreenViewer;
80
        private DisplaySettings _ds;
81
        private IViewerContainer _canvas3d;
82

    
83
        private JPanel jPanel1;
84
        private JButton jButton2;
85
        private JButton jButton1;
86
        private JTextField jTextField1;
87
        private JCheckBox jCheckBox1;
88
        private JCheckBox jCheckBox2;
89
        private JCheckBox jCheckBox3;
90
        private JCheckBox wowjCheckBox;
91

    
92
        private javax.swing.JSpinner jSpinner1;
93
        private javax.swing.JSpinner jSpinner2;
94
        private javax.swing.JSpinner jSpinner3;
95
        private javax.swing.JSpinner jSpinner4;
96
        private javax.swing.JSpinner jSpinner5;
97

    
98
        private JLabel jLabel4;
99
        private JLabel jLabel3;
100

    
101
        public FullScreenPanel() {
102

    
103
                if (PluginServices.getMDIManager().getActiveWindow() instanceof View3D) {
104
                        _view3D = (View3D) PluginServices.getMDIManager().getActiveWindow();
105
                        initialize();
106
                }
107

    
108
                else
109
                        PluginServices.getMDIManager().closeWindow(this);
110

    
111
        }
112

    
113
        public Object getWindowModel() {
114
                return _view3D;
115
        }
116

    
117
        public void initialize() {
118

    
119
                java.awt.GridBagConstraints gridBagConstraints;
120

    
121
                jPanel1 = new javax.swing.JPanel();
122
                jButton2 = new javax.swing.JButton();
123
                jButton1 = new javax.swing.JButton();
124
                jLabel3 = new javax.swing.JLabel();
125
                jLabel4 = new javax.swing.JLabel();
126
                jCheckBox1 = new javax.swing.JCheckBox();
127
                jCheckBox2 = new javax.swing.JCheckBox();
128
                jCheckBox3 = new javax.swing.JCheckBox();
129
                jSpinner1 = new javax.swing.JSpinner();
130
                jSpinner2 = new javax.swing.JSpinner();
131
                jSpinner3 = new javax.swing.JSpinner();
132
                jSpinner4 = new javax.swing.JSpinner();
133
                jSpinner5 = new javax.swing.JSpinner();
134
                wowjCheckBox = new JCheckBox();
135

    
136
                setLayout(new java.awt.GridBagLayout());
137

    
138
                jPanel1.setLayout(new java.awt.GridBagLayout());
139

    
140
                jButton2.setText(PluginServices.getText(this, "Cancel"));
141
                gridBagConstraints = new java.awt.GridBagConstraints();
142
                gridBagConstraints.gridx = 1;
143
                gridBagConstraints.gridy = 7;
144
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
145
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
146
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5);
147
                jButton2.addActionListener(new java.awt.event.ActionListener() {
148
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
149
                                jButton2ActionPerformed(evt);
150
                        }
151
                });
152
                jPanel1.add(jButton2, gridBagConstraints);
153

    
154
                jButton1.setText(PluginServices.getText(this, "Accept"));
155
                jButton1.addActionListener(new java.awt.event.ActionListener() {
156
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
157
                                jButton1ActionPerformed(evt);
158
                        }
159
                });
160

    
161
                gridBagConstraints = new java.awt.GridBagConstraints();
162
                gridBagConstraints.gridx = 2;
163
                gridBagConstraints.gridy = 7;
164
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
165
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12);
166
                jPanel1.add(jButton1, gridBagConstraints);
167

    
168
                jCheckBox1.setText(PluginServices.getText(this, "Sincronizar_camaras"));
169
                gridBagConstraints = new java.awt.GridBagConstraints();
170
                gridBagConstraints.gridx = 0;
171
                gridBagConstraints.gridy = 2;
172
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
173
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 0);
174
                jPanel1.add(jCheckBox1, gridBagConstraints);
175
                jCheckBox1.setSelected(false);
176

    
177
                jCheckBox2.setText(PluginServices.getText(this, "Elegir_pantalla"));
178
                gridBagConstraints = new java.awt.GridBagConstraints();
179
                gridBagConstraints.gridx = 0;
180
                gridBagConstraints.gridy = 3;
181
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
182
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 0);
183
                jPanel1.add(jCheckBox2, gridBagConstraints);
184

    
185
                jCheckBox2.addItemListener(new ItemListener() {
186

    
187
                        public void itemStateChanged(ItemEvent e) {
188
                                jCheckBox1ItemSelected(e);
189
                        }
190

    
191
                });
192

    
193
                wowjCheckBox.setText(PluginServices.getText(this, "Activar_WOW"));
194
                gridBagConstraints = new java.awt.GridBagConstraints();
195
                gridBagConstraints.gridx = 0;
196
                gridBagConstraints.gridy = 8;
197
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
198
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 0);
199
                jPanel1.add(wowjCheckBox, gridBagConstraints);
200
                wowjCheckBox.setSelected(false);
201

    
202
                jCheckBox3.setText(PluginServices.getText(this, "Modo_ventana"));
203
                gridBagConstraints = new java.awt.GridBagConstraints();
204
                gridBagConstraints.gridx = 0;
205
                gridBagConstraints.gridy = 4;
206
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
207
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 0);
208
                jPanel1.add(jCheckBox3, gridBagConstraints);
209

    
210
                jCheckBox3.addItemListener(new ItemListener() {
211

    
212
                        public void itemStateChanged(ItemEvent e) {
213
                                jCheckBox3ItemSelected(e);
214
                        }
215

    
216
                });
217

    
218
                int min = 0;
219
                int max = 2;
220
                int step = 1;
221
                int initValue = 0;
222
                SpinnerNumberModel model = new SpinnerNumberModel(initValue, min, max,
223
                                step);
224

    
225
                jSpinner1 = new JSpinner(model);
226
                JFormattedTextField tf = ((JSpinner.DefaultEditor) jSpinner1
227
                                .getEditor()).getTextField();
228
                tf.setEditable(false);
229

    
230
                gridBagConstraints = new java.awt.GridBagConstraints();
231
                gridBagConstraints.gridx = 1;
232
                gridBagConstraints.gridy = 3;
233
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
234
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
235
                jSpinner1.setEnabled(false);
236
                jPanel1.add(jSpinner1, gridBagConstraints);
237

    
238
                min = 0;
239
                max = 10000;
240
                step = 1;
241
                initValue = 0;
242
                SpinnerNumberModel model2 = new SpinnerNumberModel(initValue, min, max,
243
                                step);
244

    
245
                jLabel3.setText(PluginServices.getText(this, "Posicion_origen"));
246
                gridBagConstraints = new java.awt.GridBagConstraints();
247
                gridBagConstraints.gridx = 0;
248
                gridBagConstraints.gridy = 5;
249
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
250
                jPanel1.add(jLabel3, gridBagConstraints);
251

    
252
                jSpinner2 = new JSpinner(model2);
253
                gridBagConstraints = new java.awt.GridBagConstraints();
254
                gridBagConstraints.gridx = 1;
255
                gridBagConstraints.gridy = 5;
256
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
257
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
258
                jSpinner2.setEnabled(false);
259
                jPanel1.add(jSpinner2, gridBagConstraints);
260

    
261
                min = 0;
262
                max = 10000;
263
                step = 1;
264
                initValue = 0;
265
                SpinnerNumberModel model3 = new SpinnerNumberModel(initValue, min, max,
266
                                step);
267

    
268
                jSpinner3 = new JSpinner(model3);
269
                gridBagConstraints = new java.awt.GridBagConstraints();
270
                gridBagConstraints.gridx = 2;
271
                gridBagConstraints.gridy = 5;
272
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
273
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
274
                jSpinner3.setEnabled(false);
275
                jPanel1.add(jSpinner3, gridBagConstraints);
276

    
277
                jLabel4.setText(PluginServices.getText(this, "Resolucion"));
278
                gridBagConstraints = new java.awt.GridBagConstraints();
279
                gridBagConstraints.gridx = 0;
280
                gridBagConstraints.gridy = 6;
281
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
282
                jPanel1.add(jLabel4, gridBagConstraints);
283

    
284
                min = 0;
285
                max = 10000;
286
                step = 1;
287
                initValue = 0;
288
                SpinnerNumberModel model4 = new SpinnerNumberModel(initValue, min, max,
289
                                step);
290

    
291
                jSpinner4 = new JSpinner(model4);
292
                gridBagConstraints = new java.awt.GridBagConstraints();
293
                gridBagConstraints.gridx = 1;
294
                gridBagConstraints.gridy = 6;
295
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
296
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
297
                jSpinner4.setEnabled(false);
298
                jSpinner4.setValue((int) 800);
299
                jPanel1.add(jSpinner4, gridBagConstraints);
300

    
301
                min = 0;
302
                max = 10000;
303
                step = 1;
304
                initValue = 0;
305
                SpinnerNumberModel model5 = new SpinnerNumberModel(initValue, min, max,
306
                                step);
307

    
308
                jSpinner5 = new JSpinner(model5);
309
                gridBagConstraints = new java.awt.GridBagConstraints();
310
                gridBagConstraints.gridx = 2;
311
                gridBagConstraints.gridy = 6;
312
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
313
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
314
                jSpinner5.setEnabled(false);
315
                jSpinner5.setValue((int) 600);
316
                jPanel1.add(jSpinner5, gridBagConstraints);
317

    
318
                add(jPanel1, new java.awt.GridBagConstraints());
319

    
320
        }
321

    
322
        protected void jCheckBox3ItemSelected(ItemEvent e) {
323

    
324
                if (e.getStateChange() == ItemEvent.SELECTED) {
325
                        jSpinner2.setEnabled(true);
326
                        jSpinner3.setEnabled(true);
327
                        jSpinner4.setEnabled(true);
328
                        jSpinner5.setEnabled(true);
329
                } else {
330
                        jSpinner2.setEnabled(false);
331
                        jSpinner3.setEnabled(false);
332
                        jSpinner4.setEnabled(false);
333
                        jSpinner5.setEnabled(false);
334
                }
335

    
336
        }
337

    
338
        protected void jCheckBox1ItemSelected(ItemEvent e) {
339

    
340
                if (e.getStateChange() == ItemEvent.SELECTED)
341
                        jSpinner1.setEnabled(true);
342
                else
343
                        jSpinner1.setEnabled(false);
344

    
345
        }
346

    
347
        protected void jButton3ActionPerformed(ActionEvent evt) {
348
                JFileChooser jFileChooser1 = new JFileChooser();
349
                int returnVal = jFileChooser1.showOpenDialog(this);
350

    
351
                if (returnVal == JFileChooser.APPROVE_OPTION)
352
                        jTextField1.setText(jFileChooser1.getSelectedFile()
353
                                        .getAbsolutePath());
354

    
355
        }
356

    
357
        private JDialog frame;
358
        private boolean changedManipulator;
359
        private Camera viewCam;
360
        private int _numScreens;
361

    
362
        private Compass compass;
363

    
364
        
365

    
366
        protected void jButton1ActionPerformed(ActionEvent evt) {
367

    
368
                _view3D = (View3D) PluginServices.getMDIManager().getActiveWindow();
369
                PluginServices.getMDIManager().closeWindow(this);
370

    
371
                _ds = _view3D.getDisplaySettings();
372

    
373
                final boolean synchronize = jCheckBox1.isSelected();
374
                changedManipulator = false;
375

    
376
                GraphicsEnvironment ge = GraphicsEnvironment
377
                .getLocalGraphicsEnvironment();
378
                try {
379
                        GraphicsDevice[] gs = ge.getScreenDevices();
380

    
381
                        _numScreens = gs.length;
382
                        //        System.out.println("NUMERO DE PANTALLAS: " + _numScreens);
383
                } catch (HeadlessException e) {
384
                        // Is thrown if there are no screen devices
385
                }
386

    
387
                try {
388
                        Terrain planetView3D = ((TerrainViewer) _view3D.getCanvas3d()
389
                                        .getOSGViewer()).getTerrain(0);
390
                        final Terrain terrain = new Terrain();
391
                        terrain.setCoordinateSystemType(planetView3D
392
                                        .getCoordinateSystemType());
393
                        terrain.setCoordinateSystemName(planetView3D
394
                                        .getCoordinateSystemName());
395
                        terrain.setCoordinateSystemFormat(planetView3D
396
                                        .getCoordinateSystemFormat());
397
                        terrain.setExtent(planetView3D.getExtent());
398
                        terrain.setTerrainName(planetView3D.getTerrainName());
399

    
400
                        MapContext3D mc = (MapContext3D) _view3D.getMapControl()
401
                        .getMapContext();
402
                        terrain.init();
403
                        terrain.setLayerManager(mc.getTerrain().getLayerManager());
404
                        viewCam = new Camera();
405
                        _fullScreenViewer = new TerrainViewer() {
406

    
407
                                public void frame() {
408
                                        if (synchronize) {
409
                                                _fullScreenViewer.setFusionDistance((float) terrain
410
                                                                .getZoom());
411
                                                Matrix refView = _view3D.getCanvas3d().getOSGViewer()
412
                                                .getViewMatrix();
413
                                                viewCam.setViewMatrix(refView);
414
                                                _fullScreenViewer.setCamera(viewCam);
415

    
416

    
417
                                        }
418

    
419
                                        super.frame();
420
                                };
421
                        };
422

    
423

    
424

    
425
                        _fullScreenViewer.addTerrain(terrain);
426
                        _fullScreenViewer.addFeature((((TerrainViewer) _view3D
427
                                        .getCanvas3d().getOSGViewer()).getFeatures()));
428
                        Terrain pl = (((TerrainViewer) _view3D.getCanvas3d().getOSGViewer())
429
                                        .getTerrain(0));
430
                        compass = new Compass(pl);
431

    
432
                        if (pl.getCoordinateSystemType() == Terrain.CoordinateSystemType.GEOCENTRIC) {
433
                                compass.setPanetType(Compass.Mode.SPHERIC);
434
                        } else
435
                                compass.setPanetType(Compass.Mode.FLAT);
436

    
437
                        compass.setUpdateListener(new UpdateNodeListener() {
438

    
439
                                public void update(Node arg0) {
440
                                        compass.update(_fullScreenViewer.getCamera());
441

    
442
                                }
443
                        });
444

    
445
                        _fullScreenViewer.addNodeToCameraHUD(compass);
446

    
447
                        Vec4 color = ((TerrainViewer) _view3D.getCanvas3d().getOSGViewer())
448
                        .getClearColor();
449
                        _fullScreenViewer.setClearColor(color.x(), color.y(), color.z(),
450
                                        color.w());
451
                        _fullScreenViewer.setDisplaySettings(_ds);
452
                        Matrix refView = _view3D.getCanvas3d().getOSGViewer()
453
                        .getViewMatrix();
454
                        viewCam.setViewMatrix(refView);
455
                        _fullScreenViewer.setCamera(viewCam);
456

    
457

    
458

    
459
                        _canvas3d = ViewerFactory.getInstance().createViewer(
460
                                        ViewerFactory.VIEWER_TYPE.CANVAS_VIEWER, _fullScreenViewer);
461
                        _canvas3d
462
                        .addKeyListener(new ViewerStateListener(_fullScreenViewer));
463
                        frame = new JDialog();
464
                        JPanel jContentPane = new JPanel();
465
                        jContentPane.setLayout(new BorderLayout());
466
                        frame.setContentPane(jContentPane);
467
                        jContentPane.add((Component) _canvas3d, BorderLayout.CENTER);
468
                        ViewerFactory.getInstance().startAnimator();
469
                        frame.addWindowListener(new WindowAdapter() {
470
                                public void windowClosing(WindowEvent e) {
471
                                        if (changedManipulator) {
472
                                                ((TerrainViewer) (_view3D.getCanvas3d().getOSGViewer()))
473
                                                .setCameraManipulator(null);
474
                                        }
475

    
476
                                        _canvas3d.dispose();
477
                                }
478
                        });
479

    
480
                        frame.addComponentListener(new ComponentListener() {
481
                                public void componentResized(ComponentEvent arg0) {
482
                                        compass.setPosition(new Vec3(frame.getWidth() - 70, frame
483
                                                        .getHeight() - 70, 0));
484

    
485
                                }
486

    
487
                                public void componentMoved(ComponentEvent arg0) {
488
                                        // TODO Auto-generated method stub
489

    
490
                                }
491

    
492
                                public void componentShown(ComponentEvent arg0) {
493
                                        // TODO Auto-generated method stub
494

    
495
                                }
496

    
497
                                public void componentHidden(ComponentEvent e) {
498
                                        // TODO Auto-generated method stub
499

    
500
                                }
501
                        });
502
                        _canvas3d.addKeyListener(new KeyListener() {
503

    
504
                                public void keyPressed(KeyEvent arg0) {
505
                                        // TODO Auto-generated method stub
506

    
507
                                }
508

    
509
                                public void keyReleased(KeyEvent arg0) {
510

    
511
                                        if (arg0.getKeyCode() == KeyEvent.VK_ESCAPE) {
512

    
513
                                                frame.dispose();
514

    
515
                                        }
516

    
517
                                }
518

    
519
                                public void keyTyped(KeyEvent arg0) {
520
                                        // TODO Auto-generated method stub
521

    
522
                                }
523
                        });
524

    
525
                } catch (ChildIndexOutOfBoundsExceptions e1) {
526

    
527
                        e1.printStackTrace();
528
                } catch (NodeException e1) {
529

    
530
                        e1.printStackTrace();
531
                }
532

    
533
                if (_view3D.getCanvas3d().getOSGViewer().getCameraManipulator() == null) {
534
                        ((TerrainViewer) (_view3D.getCanvas3d().getOSGViewer()))
535
                        .restoreCustomTerrainManipulator();
536
                        changedManipulator = true;
537
                }
538

    
539
                if (synchronize)
540
                        _fullScreenViewer.setCameraManipulator(null);
541

    
542
                if (!jCheckBox3.isSelected()) { // the viewer is created in
543
                        // fullscreen
544
                        if (wowjCheckBox.isSelected()) {
545
                                char wow_content = 0x02, wow_factor = 0x40, wow_offset = 0x80;
546
                                float wow_Zd = 0.459813f;
547
                                float wow_vz = 6.180772f;
548
                                float wow_M = -1586.34f;
549
                                float wow_C = 127.5f;
550
                                int screenNum = ((SpinnerNumberModel) jSpinner1
551
                                                .getModel()).getNumber().intValue();
552
                                //try {
553
                                //        _fullScreenViewer.getTerrain(0).setEnabledClampProjectionMatrixCallback(false);
554
                                //} catch (ChildIndexOutOfBoundsExceptions e) {
555
                                //        NotificationManager.addError("No terrain found", e);
556
                                //        return;
557
                                //}
558
                                _fullScreenViewer.setUpViewForWoWVxDisplay(screenNum,
559
                                                wow_content, wow_factor, wow_offset, wow_Zd, wow_vz,
560
                                                wow_M, wow_C);
561

    
562
                                final ISlaveComponent slavePainter = new ISlaveComponent() {
563

    
564
                                        public void repaint() {
565
                                                _fullScreenViewer.frame();
566
                                        }
567
                                };
568
                                _view3D.getCanvas3d().addRenderSlaveComponent(slavePainter);
569
                                new Thread(new Runnable() {
570

    
571
                                        public void run() {
572
                                                while(!_fullScreenViewer.done()) {
573
                                                        try {
574
                                                                Thread.sleep(1);
575
                                                        } catch (InterruptedException e) {
576
                                                        }
577
                                                }
578
                                                _view3D.getCanvas3d().removeRenderSlaveComponent(slavePainter);
579
                                                _fullScreenViewer.dispose();
580
                                        }
581
                                }).start();
582

    
583
                        }
584
                        else if(_ds.getStereoMode()== DisplaySettings.StereoMode.QUAD_BUFFER){
585
                                
586
                                GraphicsDevice[] gs = ge.getScreenDevices();
587
                                int width = gs[0].getDisplayMode().getWidth();
588
                                int height = gs[0].getDisplayMode().getHeight();
589
                                
590
                                if(!_fullScreenViewer.setUpViewerWithQuadBuffer(0, 0, width, height))
591
                                        JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), PluginServices.getText(this, "Quadbuffer_error"));
592
                                compass.setPosition(new Vec3(width - 70, height - 70, 0));
593

    
594
                                final ISlaveComponent slavePainter = new ISlaveComponent() {
595

    
596
                                        public void repaint() {
597
                                                _fullScreenViewer.frame();
598
                                        }
599
                                };
600
                                _view3D.getCanvas3d().addRenderSlaveComponent(slavePainter);
601
                                new Thread(new Runnable() {
602

    
603
                                        public void run() {
604
                                                while(!_fullScreenViewer.done()) {
605
                                                        try {
606
                                                                Thread.sleep(1);
607
                                                        } catch (InterruptedException e) {
608
                                                        }
609
                                                }
610
                                                _view3D.getCanvas3d().removeRenderSlaveComponent(slavePainter);
611
                                                _fullScreenViewer.dispose();
612
                                                _ds.setStereo(false);
613
                                        }
614
                                }).start();
615
                                
616
                        }
617
                        else {
618
                                if (!jCheckBox2.isSelected()) {
619
                                        frame.setUndecorated(true);
620
                                        frame.requestFocus();
621
                                        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
622
                                        frame.setSize(dim.width, dim.height);
623
                                        frame.setVisible(true);
624
                                }
625

    
626
                                else {
627
                                        frame.setUndecorated(true);
628
                                        frame.requestFocus();
629
                                        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
630
                                        frame.setSize(dim.width / _numScreens, dim.height);
631
                                        frame.setLocation(((SpinnerNumberModel) jSpinner1
632
                                                        .getModel()).getNumber().intValue()
633
                                                        * dim.width, 0);
634
                                        frame.setVisible(true);
635
                                }
636
                        }
637
                }
638

    
639
                else { // here is created a windowed viewer
640

    
641
                        if (jCheckBox2.isSelected()) {
642

    
643
                                Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
644
                                frame.setSize(((SpinnerNumberModel) jSpinner4.getModel())
645
                                                .getNumber().intValue(),
646
                                                ((SpinnerNumberModel) jSpinner5.getModel()).getNumber()
647
                                                .intValue());
648
                                frame.setLocation((((SpinnerNumberModel) jSpinner1.getModel())
649
                                                .getNumber().intValue() * dim.width)
650
                                                + ((SpinnerNumberModel) jSpinner2.getModel())
651
                                                .getNumber().intValue(),
652
                                                ((SpinnerNumberModel) jSpinner3.getModel()).getNumber()
653
                                                .intValue());
654
                                frame.setVisible(true);
655
                        } else {
656

    
657
                                frame.setSize(((SpinnerNumberModel) jSpinner4.getModel())
658
                                                .getNumber().intValue(),
659
                                                ((SpinnerNumberModel) jSpinner5.getModel()).getNumber()
660
                                                .intValue());
661
                                frame.setLocation(((SpinnerNumberModel) jSpinner2.getModel())
662
                                                .getNumber().intValue(),
663
                                                ((SpinnerNumberModel) jSpinner3.getModel()).getNumber()
664
                                                .intValue());
665
                                frame.setVisible(true);
666

    
667
                        }
668

    
669
                }
670

    
671
                compass.setScale(new Vec3(75, 75, 75));
672

    
673
                System.gc();
674

    
675
        }
676

    
677
        private boolean runMStereo() {
678
                Group g = new Group();
679
                TerrainViewer viewer;
680
                CameraHUD ch = null;
681
                Polygon p = null;
682

    
683
                try {
684
                        Vec4 color = new Vec4(1, 1, 1, 1);
685
                        p = new Polygon();
686
                        p.addVertex(new Vec3(0.0, 0.0, 0.0), color);
687
                        p.addVertex(new Vec3(392.0, 0.0, 0.0), color);
688
                        p.addVertex(new Vec3(392.0, 82.0, 0.0), color);
689
                        p.addVertex(new Vec3(0.0, 82.0, 0.0), color);
690
                        p.setTexture(this.getClass().getClassLoader().getResource(
691
                        "images/okode-stereotoolbox.png").getPath());
692
                        p.setEnabledBlending(true);
693

    
694
                        ch = new CameraHUD();
695
                        ch.addChild(p);
696

    
697
                } catch (NodeException e) {
698
                        // TODO Auto-generated catch block
699
                        e.printStackTrace();
700
                }
701

    
702
                boolean synchronize = jCheckBox1.isSelected();
703
                boolean changedManipulator = false;
704
                Terrain terrain = null;
705
                StereoConfig sc = null;
706
                try {
707
                        viewer = null;
708
                        try {
709
                                terrain = ((TerrainViewer) _view3D.getCanvas3d().getOSGViewer())
710
                                .getTerrain(0);
711

    
712
                                g.addChild(terrain);
713
                                g.addChild(((TerrainViewer) _view3D.getCanvas3d()
714
                                                .getOSGViewer()).getFeatures());
715
                                g.addChild(ch);
716
                                viewer = new TerrainViewer();
717

    
718
                        } catch (ChildIndexOutOfBoundsExceptions e) {
719
                                // TODO Auto-generated catch block
720
                                e.printStackTrace();
721
                        } catch (NodeException e) {
722
                                // TODO Auto-generated catch block
723
                                e.printStackTrace();
724
                        }
725

    
726
                        File config = new File(jTextField1.getText());
727
                        sc = new StereoConfig();
728
                        Node n = sc.pipes2screens1texture(g, viewer, config
729
                                        .getAbsolutePath());
730
                        viewer.setSceneData(n);
731

    
732
                        Vec4 color = ((TerrainViewer) _view3D.getCanvas3d().getOSGViewer())
733
                        .getClearColor();
734
                        viewer.setClearColor(color.x(), color.y(), color.z(), color.w());
735
                        viewer.setDisplaySettings(_ds);
736

    
737
                        if (_view3D.getCanvas3d().getOSGViewer().getCameraManipulator() == null) {
738
                                ((TerrainViewer) (_view3D.getCanvas3d().getOSGViewer()))
739
                                .restoreCustomTerrainManipulator();
740
                                changedManipulator = true;
741
                        }
742

    
743
                } catch (Exception e1) {
744

    
745
                        e1.printStackTrace();
746
                        return false;
747
                }
748
                Matrix refView = _view3D.getCanvas3d().getOSGViewer().getViewMatrix();
749
                System.out.println("refCam view " + refView.toString());
750
                Camera viewCam = new Camera();
751
                viewCam.setViewMatrix(refView);
752
                viewer.setCamera(viewCam);
753

    
754
                if (synchronize) {
755
                        viewer.setCameraManipulator(null);
756
                } else
757
                        viewer.setCameraManipulator(new TerrainCameraManipulator());
758
                if (!jCheckBox3.isSelected()) {
759

    
760
                        viewer.setUpViewOnSingleScreen(((SpinnerNumberModel) jSpinner1
761
                                        .getModel()).getNumber().intValue());
762
                }
763

    
764
                else {
765

    
766
                        viewer.setUpViewInWindow(0, 0, 800, 600,
767
                                        ((SpinnerNumberModel) jSpinner1.getModel()).getNumber()
768
                                        .intValue());
769

    
770
                }
771

    
772
                while (!viewer.done()) {
773
                        if (synchronize) {
774
                                viewer.setFusionDistance((float) terrain.getZoom());
775
                                refView = _view3D.getCanvas3d().getOSGViewer().getViewMatrix();
776
                                viewCam.setViewMatrix(refView);
777
                                viewer.setCamera(viewCam);
778

    
779
                        }
780
                        sc.updateCameras(viewer);
781
                        viewer.frame();
782
                }
783
                viewer.releaseGLContext();
784
                viewer.dispose();
785
                viewer = null;
786

    
787
                if (changedManipulator) {
788
                        ((TerrainViewer) (_view3D.getCanvas3d().getOSGViewer()))
789
                        .setCameraManipulator(null);
790
                }
791

    
792
                System.gc();
793
                return true;
794

    
795
        }
796

    
797
        protected void jButton2ActionPerformed(ActionEvent evt) {
798
                PluginServices.getMDIManager().closeWindow(this);
799

    
800
        }
801

    
802
        public WindowInfo getWindowInfo() {
803
                _viewinfo = new WindowInfo(WindowInfo.MODALDIALOG);
804
                _viewinfo.setTitle(PluginServices.getText(this, "FullScreen"));
805
                _viewinfo.setHeight(_height);
806
                _viewinfo.setWidth(_width);
807
                return _viewinfo;
808
        }
809

    
810
        public void stateChanged(ChangeEvent e) {
811

    
812
        }
813

    
814
        public void windowActivated() {
815
                _view3D = (View3D) PluginServices.getMDIManager().getActiveWindow();
816
                System.out.println(_view3D.getName());
817
        }
818

    
819
        public void windowClosed() {
820

    
821
        }
822

    
823
        public Object getWindowProfile() {
824
                // TODO Auto-generated method stub
825
                return WindowInfo.DIALOG_PROFILE;
826
        }
827
}