Statistics
| Revision:

gvsig-3d / 2.1 / trunk / org.gvsig.gvsig3d / org.gvsig.gvsig3d.app / org.gvsig.gvsig3d.app.commons / src / main / java / org / gvsig / gvsig3d / app / display / DisplayPanel.java @ 385

History | View | Annotate | Download (17.9 KB)

1
/* gvSIG 3D extension for gvSIG
2
 *
3
 * Copyright (C) 2012 Prodevelop.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *   Prodevelop, S.L.
22
 *   Pza. Don Juan de Villarrasa, 14 - 5
23
 *   46001 Valencia
24
 *   Spain
25
 *
26
 *   +34 963 510 612
27
 *   +34 963 510 968
28
 *   prode@prodevelop.es
29
 *   http://www.prodevelop.es
30
 */
31
/*
32
 * AUTHORS:
33
 * 2012 AI2 - Instituto Universitario de Automatica e Informatica Industrial.
34
 * Universitat Politecnica de Valencia (UPV)
35
 * http://www.ai2.upv.es
36
 */
37

    
38

    
39
package org.gvsig.gvsig3d.app.display;
40

    
41
import java.awt.event.ActionEvent;
42
import java.awt.event.ItemEvent;
43
import java.awt.event.ItemListener;
44

    
45
import javax.swing.JFormattedTextField;
46
import javax.swing.JSpinner;
47
import javax.swing.SpinnerNumberModel;
48
import javax.swing.event.ChangeEvent;
49
import javax.swing.event.ChangeListener;
50

    
51
import org.gvsig.andami.PluginServices;
52
import org.gvsig.andami.ui.mdiManager.IWindow;
53
import org.gvsig.andami.ui.mdiManager.IWindowListener;
54
import org.gvsig.andami.ui.mdiManager.WindowInfo;
55
import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
56
import org.gvsig.gvsig3d.app.extension.DefaultView3DPanel;
57
import org.gvsig.osgvp.viewer.DisplaySettings;
58

    
59

    
60
/**
61
 * @author Jesus Zarzoso- jzarzoso@ai2.upv.es
62
 *
63
 */
64
public class DisplayPanel extends GridBagLayoutPanel implements IWindow,
65
    ChangeListener, IWindowListener {
66

    
67
    /**
68
* 
69
*/
70
    private static final long serialVersionUID = -7937904493499301555L;
71

    
72
    private WindowInfo _viewinfo;
73
    private int _width = 480;
74
    private int _height = 200;
75
    private DefaultView3DPanel _view3D;
76
    private DisplaySettings _ds;
77

    
78
    private javax.swing.JButton jButton1;
79
    private javax.swing.JButton jButton2;
80
    private javax.swing.JComboBox jComboBox1;
81
    private javax.swing.JComboBox jComboBox3;
82
    private javax.swing.JLabel jLabel1;
83
    private javax.swing.JLabel jLabel3;
84
    private javax.swing.JLabel jLabel4;
85
    private javax.swing.JLabel jLabel5;
86
    private javax.swing.JLabel jLabel6;
87
    private javax.swing.JPanel jPanel1;
88
    private javax.swing.JSpinner jSpinner1;
89
    private javax.swing.JSpinner jSpinner2;
90
    private javax.swing.JSpinner jSpinner3;
91

    
92
    public DisplayPanel() {
93

    
94
        if (PluginServices.getMDIManager().getActiveWindow() instanceof DefaultView3DPanel) {
95
            _view3D =
96
                (DefaultView3DPanel) PluginServices.getMDIManager()
97
                    .getActiveWindow();
98
            _ds = _view3D.getDisplaySettings();
99
            initialize();
100
        }
101

    
102
        else
103
            PluginServices.getMDIManager().closeWindow(this);
104

    
105
    }
106

    
107
    public Object getWindowModel() {
108
        return _view3D;
109
    }
110

    
111
    public void initialize() {
112

    
113
        java.awt.GridBagConstraints gridBagConstraints;
114

    
115
        jPanel1 = new javax.swing.JPanel();
116
        jComboBox1 = new javax.swing.JComboBox();
117
        jButton2 = new javax.swing.JButton();
118
        jButton1 = new javax.swing.JButton();
119
        jComboBox3 = new javax.swing.JComboBox();
120
        jLabel1 = new javax.swing.JLabel();
121
        jLabel3 = new javax.swing.JLabel();
122
        jLabel4 = new javax.swing.JLabel();
123
        jLabel5 = new javax.swing.JLabel();
124
        jLabel6 = new javax.swing.JLabel();
125

    
126
        float min = (float) 0.01;
127
        float max = (float) 0.1;
128
        float step = (float) 0.005;
129
        float initValue = (float) 0.065;
130
        SpinnerNumberModel model =
131
            new SpinnerNumberModel(initValue, min, max, step);
132

    
133
        jSpinner1 = new JSpinner(model);
134
        JFormattedTextField tf =
135
            ((JSpinner.DefaultEditor) jSpinner1.getEditor()).getTextField();
136
        tf.setEditable(false);
137

    
138
        min = (float) 0.1;
139
        max = (float) 1.0;
140
        step = (float) 0.1;
141
        initValue = (float) 0.5;
142
        SpinnerNumberModel model2 =
143
            new SpinnerNumberModel(initValue, min, max, step);
144

    
145
        jSpinner2 = new JSpinner(model2);
146
        JFormattedTextField tf2 =
147
            ((JSpinner.DefaultEditor) jSpinner2.getEditor()).getTextField();
148
        tf2.setEditable(false);
149

    
150
        min = (float) -100.0;
151
        max = (float) 100.0;
152
        step = (float) 1.0;
153
        initValue = (float) 0.0;
154
        SpinnerNumberModel model3 =
155
            new SpinnerNumberModel(initValue, min, max, step);
156

    
157
        jSpinner3 = new JSpinner(model3);
158
        JFormattedTextField tf3 =
159
            ((JSpinner.DefaultEditor) jSpinner3.getEditor()).getTextField();
160
        tf3.setEditable(false);
161

    
162
        setLayout(new java.awt.GridBagLayout());
163

    
164
        jPanel1.setLayout(new java.awt.GridBagLayout());
165

    
166
        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { 
167
            PluginServices.getText(this, "None"),
168
            PluginServices.getText(this, "Anaglyphic"),
169
            PluginServices.getText(this, "HorizontalInterlace"),
170
            PluginServices.getText(this, "VerticalInterlace"),
171
            PluginServices.getText(this, "HorizontalSplit"),
172
            PluginServices.getText(this, "VerticalSplit"),
173
            PluginServices.getText(this, "LeftEye"),
174
            PluginServices.getText(this, "RightEye"),
175
            PluginServices.getText(this, "QuadBuffer"),
176
            PluginServices.getText(this, "CheckerBoard") }));
177
        gridBagConstraints = new java.awt.GridBagConstraints();
178
        gridBagConstraints.gridx = 1;
179
        gridBagConstraints.gridy = 0;
180
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
181
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
182
        jPanel1.add(jComboBox1, gridBagConstraints);
183

    
184
        jComboBox1.addItemListener(new ItemListener() {
185

    
186
            public void itemStateChanged(ItemEvent e) {
187
                jComboBox1ItemSelected(e);
188
            }
189

    
190
        });
191

    
192
        jButton2.setText(PluginServices.getText(this, "Cancel"));
193
        jButton2.addActionListener(new java.awt.event.ActionListener() {
194

    
195
            public void actionPerformed(java.awt.event.ActionEvent evt) {
196
                jButton2ActionPerformed(evt);
197
            }
198
        });
199
        gridBagConstraints = new java.awt.GridBagConstraints();
200
        gridBagConstraints.gridx = 1;
201
        gridBagConstraints.gridy = 7;
202
        jPanel1.add(jButton2, gridBagConstraints);
203

    
204
        jButton1.setText(PluginServices.getText(this, "Accept"));
205
        jButton1.addActionListener(new java.awt.event.ActionListener() {
206

    
207
            public void actionPerformed(java.awt.event.ActionEvent evt) {
208
                jButton1ActionPerformed(evt);
209
            }
210
        });
211
        gridBagConstraints = new java.awt.GridBagConstraints();
212
        gridBagConstraints.gridx = 0;
213
        gridBagConstraints.gridy = 7;
214
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
215
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 6);
216
        jPanel1.add(jButton1, gridBagConstraints);
217

    
218
        jComboBox3.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
219
            PluginServices.getText(this, "Monitor"),
220
            PluginServices.getText(this, "HeadMounted"),
221
            PluginServices.getText(this, "PowerWall"),
222
            PluginServices.getText(this, "RealityCenter") }));
223
        gridBagConstraints = new java.awt.GridBagConstraints();
224
        gridBagConstraints.gridx = 1;
225
        gridBagConstraints.gridy = 3;
226
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
227
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0);
228
        jPanel1.add(jComboBox3, gridBagConstraints);
229
        jComboBox3.setEnabled(false);
230

    
231
        jComboBox3.addItemListener(new ItemListener() {
232

    
233
            public void itemStateChanged(ItemEvent e) {
234
                jComboBox3ItemSelected(e);
235
            }
236

    
237
        });
238

    
239
        jLabel1.setText(PluginServices.getText(this, "Tipo_pantalla"));
240
        gridBagConstraints = new java.awt.GridBagConstraints();
241
        gridBagConstraints.gridx = 0;
242
        gridBagConstraints.gridy = 3;
243
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
244
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0);
245
        jPanel1.add(jLabel1, gridBagConstraints);
246

    
247
        jLabel3.setText(PluginServices.getText(this, "Visualizacion_estereo"));
248
        gridBagConstraints = new java.awt.GridBagConstraints();
249
        gridBagConstraints.gridx = 0;
250
        gridBagConstraints.gridy = 0;
251
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
252
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 22);
253
        jPanel1.add(jLabel3, gridBagConstraints);
254

    
255
        jLabel4.setText(PluginServices.getText(this, "Distancia_interocular"));
256
        gridBagConstraints = new java.awt.GridBagConstraints();
257
        gridBagConstraints.gridx = 0;
258
        gridBagConstraints.gridy = 1;
259
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
260
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 10);
261
        jPanel1.add(jLabel4, gridBagConstraints);
262

    
263
        gridBagConstraints = new java.awt.GridBagConstraints();
264
        gridBagConstraints.gridx = 1;
265
        gridBagConstraints.gridy = 1;
266
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
267
        gridBagConstraints.ipadx = 30;
268
        // gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 22);
269
        jSpinner1.setEnabled(false);
270
        jPanel1.add(jSpinner1, gridBagConstraints);
271

    
272
        jLabel5.setText(PluginServices.getText(this, "Distancia_pantalla"));
273
        gridBagConstraints = new java.awt.GridBagConstraints();
274
        gridBagConstraints.gridx = 0;
275
        gridBagConstraints.gridy = 5;
276
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0);
277
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
278
        // gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 10);
279
        jPanel1.add(jLabel5, gridBagConstraints);
280

    
281
        gridBagConstraints = new java.awt.GridBagConstraints();
282
        gridBagConstraints.gridx = 1;
283
        gridBagConstraints.gridy = 5;
284
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
285
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0);
286
        gridBagConstraints.ipadx = 30;
287
        jSpinner2.setEnabled(false);
288
        jPanel1.add(jSpinner2, gridBagConstraints);
289

    
290
        jLabel6
291
            .setText(PluginServices.getText(this, "Increm_distancia_fusion"));
292
        gridBagConstraints = new java.awt.GridBagConstraints();
293
        gridBagConstraints.gridx = 0;
294
        gridBagConstraints.gridy = 6;
295
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0);
296
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
297
        // gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 10);
298
        jPanel1.add(jLabel6, gridBagConstraints);
299

    
300
        gridBagConstraints = new java.awt.GridBagConstraints();
301
        gridBagConstraints.gridx = 1;
302
        gridBagConstraints.gridy = 6;
303
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
304
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0);
305
        gridBagConstraints.ipadx = 30;
306
        jSpinner3.setEnabled(false);
307
        jPanel1.add(jSpinner3, gridBagConstraints);
308
        // jSpinner1.addChangeListener(new ChangeListener() {
309
        //      
310
        // public void stateChanged(ChangeEvent e) {
311
        // JSpinner spinner = (JSpinner) e.getSource();
312
        //      
313
        // double value = (Double) spinner.getValue();
314
        // ds.setEyeSeparation((float) value);
315
        // view3D.getCanvas3d().getOSGViewer().setDisplaySettings(ds);
316
        //      
317
        // }
318
        //      
319
        // });
320

    
321
        add(jPanel1, new java.awt.GridBagConstraints());
322

    
323
        if (_ds != null)
324
            setDisplaySettings();
325

    
326
    }
327

    
328
    protected void jButton2ActionPerformed(ActionEvent evt) {
329
        PluginServices.getMDIManager().closeWindow(this);
330

    
331
    }
332

    
333
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
334

    
335
        int stereo, device;
336

    
337
        _view3D =
338
            (DefaultView3DPanel) PluginServices.getMDIManager()
339
                .getActiveWindow();
340
        stereo = jComboBox1.getSelectedIndex();
341
        device = jComboBox3.getSelectedIndex();
342
        switch (stereo) {
343

    
344
        case 0:
345
            _ds.setStereo(false);
346
            break;
347

    
348
        case 1:
349
            _ds.setStereo(true);
350
            _ds.setStereoMode(DisplaySettings.StereoMode.ANAGLYPHIC);
351
            break;
352

    
353
        case 2:
354
            _ds.setStereo(true);
355
            _ds.setStereoMode(DisplaySettings.StereoMode.HORIZONTAL_INTERLACE);
356
            break;
357

    
358
        case 3:
359
            _ds.setStereo(true);
360
            _ds.setStereoMode(DisplaySettings.StereoMode.VERTICAL_INTERLACE);
361
            break;
362

    
363
        case 4:
364
            _ds.setStereo(true);
365
            _ds.setStereoMode(DisplaySettings.StereoMode.HORIZONTAL_SPLIT);
366
            break;
367

    
368
        case 5:
369
            _ds.setStereo(true);
370
           // _ds.setStereoMode(DisplaySettings.StereoMode.VERTICAL_SPLIT);
371
            break;
372

    
373
        case 6:
374
            _ds.setStereo(true);
375
            _ds.setStereoMode(DisplaySettings.StereoMode.LEFT_EYE);
376
            break;
377

    
378
        case 7:
379
            _ds.setStereo(true);
380
            _ds.setStereoMode(DisplaySettings.StereoMode.RIGHT_EYE);
381
            break;
382

    
383
        case 8:
384
            _ds.setStereo(false);
385
            _ds.setStereoMode(DisplaySettings.StereoMode.QUAD_BUFFER);
386
            break;
387
        case 9:
388
            _ds.setStereo(true);
389
           // _ds.setStereoMode(DisplaySettings.StereoMode.CHECKERBOARD);
390
            break;
391

    
392
        }
393
        /*
394
         * switch (antialias) {
395
         * 
396
         * case 0:
397
         * break;
398
         * 
399
         * case 1:
400
         * _ds.setNumMultiSamples(2);
401
         * break;
402
         * 
403
         * case 2:
404
         * _ds.setNumMultiSamples(4);
405
         * break;
406
         * 
407
         * }
408
         */
409

    
410
        switch (device) {
411

    
412
        case 0:
413
            _ds.setDisplayType(DisplaySettings.DisplayType.MONITOR);
414
            break;
415

    
416
        case 1:
417
            _ds
418
                .setDisplayType(DisplaySettings.DisplayType.HEAD_MOUNTED_DISPLAY);
419
            break;
420

    
421
        case 2:
422
            _ds.setDisplayType(DisplaySettings.DisplayType.POWERWALL);
423
            break;
424

    
425
        case 3:
426
            _ds.setDisplayType(DisplaySettings.DisplayType.REALITY_CENTER);
427
            break;
428

    
429
        }
430

    
431
        if (jSpinner1.isEnabled()) {
432

    
433
            _ds.setEyeSeparation(((SpinnerNumberModel) jSpinner1.getModel())
434
                .getNumber().floatValue());
435
            _ds.setScreenDistance(((SpinnerNumberModel) jSpinner2.getModel())
436
                .getNumber().floatValue());
437

    
438
        }
439
        _view3D.getCanvas3d().getOSGViewer().setDisplaySettings(_ds);
440

    
441
        PluginServices.getMDIManager().closeWindow(this);
442

    
443
    }
444

    
445
    private void jComboBox3ItemSelected(ItemEvent e) {
446

    
447
    }
448

    
449
    private void jComboBox1ItemSelected(ItemEvent e) {
450
        if (e.getItem().equals(PluginServices.getText(this, "None"))) {
451
            jComboBox3.setEnabled(false);
452
            jComboBox3.setSelectedIndex(0);
453
            jSpinner1.setEnabled(false);
454
            jSpinner2.setEnabled(false);
455
            jSpinner3.setEnabled(false);
456
        } else {
457
            jComboBox3.setEnabled(true);
458
            jSpinner1.setEnabled(true);
459
            jSpinner2.setEnabled(true);
460
            jSpinner3.setEnabled(true);
461
        }
462

    
463
    }
464

    
465
    public WindowInfo getWindowInfo() {
466
        _viewinfo = new WindowInfo(WindowInfo.MODALDIALOG);
467
        _viewinfo.setTitle(PluginServices.getText(this, "Display"));
468
        _viewinfo.setHeight(_height);
469
        _viewinfo.setWidth(_width);
470
        return _viewinfo;
471
    }
472

    
473
    public void stateChanged(ChangeEvent e) {
474

    
475
    }
476

    
477
    public void windowActivated() {
478
        _view3D =
479
            (DefaultView3DPanel) PluginServices.getMDIManager()
480
                .getActiveWindow();
481
        
482
    }
483

    
484
    public void windowClosed() {
485

    
486
    }
487

    
488
    public void setDisplaySettings() {
489

    
490
        int stereo, antialias, device;
491

    
492
        if (_ds.getStereo()) {
493

    
494
            stereo = _ds.getStereoMode();
495
            jSpinner1.setValue(_ds.getEyeSeparation());
496
            jSpinner2.setValue((_ds.getScreenDistance()));
497

    
498
        }
499

    
500
        else
501
            stereo = -1;
502
        antialias = _ds.getNumMultiSamples();
503
        device = _ds.getDisplayType();
504

    
505
        switch (stereo) {
506

    
507
        case 0:
508
            jComboBox1.setSelectedIndex(7);
509
            break;
510

    
511
        case 1:
512
            jComboBox1.setSelectedIndex(1);
513
            break;
514

    
515
        case 2:
516
            jComboBox1.setSelectedIndex(4);
517
            break;
518

    
519
        case 3:
520
            jComboBox1.setSelectedIndex(5);
521
            break;
522

    
523
        case 4:
524
            jComboBox1.setSelectedIndex(6);
525
            break;
526

    
527
        case 5:
528
            jComboBox1.setSelectedIndex(2);
529
            break;
530

    
531
        case 6:
532
            jComboBox1.setSelectedIndex(3);
533
            break;
534

    
535
        default:
536
            jComboBox1.setSelectedIndex(0);
537
            break;
538

    
539
        }
540

    
541
        if (!_ds.getStereo())
542
            jComboBox1.setSelectedIndex(0);
543

    
544
        switch (device) {
545

    
546
        case 0:
547
            jComboBox3.setSelectedIndex(0);
548
            break;
549

    
550
        case 1:
551
            jComboBox3.setSelectedIndex(2);
552
            break;
553

    
554
        case 2:
555
            jComboBox3.setSelectedIndex(3);
556
            break;
557

    
558
        case 3:
559
            jComboBox3.setSelectedIndex(1);
560
            break;
561

    
562
        }
563

    
564
    }
565

    
566
    /*
567
     * public DisplaySettings getDisplaySettings() {
568
     * 
569
     * return ds; }
570
     */
571
    public Object getWindowProfile() {
572
        return WindowInfo.DIALOG_PROFILE;
573
    }
574
}