1
package opencog.spacetime.vr;
3
import java.awt.BorderLayout;
4
import java.awt.FlowLayout;
5
import java.awt.event.ActionEvent;
6
import java.awt.event.ActionListener;
8
import java.io.IOException;
9
import java.security.AccessController;
10
import java.security.PrivilegedAction;
11
import java.util.HashMap;
13
import javax.swing.Box;
14
import javax.swing.BoxLayout;
15
import javax.swing.ButtonGroup;
16
import javax.swing.JButton;
17
import javax.swing.JCheckBox;
18
import javax.swing.JFileChooser;
19
import javax.swing.JPanel;
20
import javax.swing.JRadioButton;
21
import javax.swing.border.EmptyBorder;
23
import opencog.spacetime.geometry.IndexedFaceSetUtility;
24
import opencog.spacetime.reader.Readers;
25
import opencog.spacetime.scene.IndexedFaceSet;
26
import opencog.spacetime.scene.SceneGraphComponent;
27
import opencog.spacetime.scene.SceneGraphVisitor;
28
import opencog.spacetime.scene.data.Attribute;
29
import opencog.spacetime.ui.viewerapp.FileLoaderDialog;
30
import opencog.spacetime.util.Input;
31
import opencog.spacetime.util.Secure;
34
public class LoadPluginVR extends AbstractPluginVR {
37
private JPanel loadPanel;
38
private JPanel fileChooserPanel;
40
private HashMap<String, Integer> exampleIndices = new HashMap<String, Integer>();
42
public LoadPluginVR(final String[][] examples) {
44
Secure.doPrivileged(new PrivilegedAction<Object>() {
46
makeContentFileChooser();
50
loadPanel = new JPanel(new BorderLayout());
51
loadPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
53
if (examples != null) {
54
ActionListener examplesListener = new ActionListener() {
55
public void actionPerformed(ActionEvent e) {
56
String selectedBox = e.getActionCommand();
57
int selectionIndex = ((Integer) exampleIndices.get(selectedBox)).intValue();
59
SceneGraphComponent read = Readers.read(Input
60
.getInput(examples[selectionIndex][1]));
61
getViewerVR().setContent(read);
62
} catch (IOException e1) {
68
Box buttonGroupPanel = new Box(BoxLayout.Y_AXIS);
69
ButtonGroup group = new ButtonGroup();
70
for (int i = 0; i < examples.length; i++) {
71
JRadioButton button = new JRadioButton(examples[i][0]);
72
button.addActionListener(examplesListener);
73
buttonGroupPanel.add(button);
75
exampleIndices.put(examples[i][0], new Integer(i));
77
loadPanel.add("Center", buttonGroupPanel);
79
JButton loadButton = new JButton("load ...");
80
loadButton.addActionListener(new ActionListener() {
81
public void actionPerformed(ActionEvent arg0) {
82
switchToFileBrowser();
85
loadPanel.add("South", loadButton);
89
public JPanel getPanel() {
93
private void makeContentFileChooser() {
94
this.fileChooserPanel = new JPanel(new BorderLayout());
95
final JFileChooser fileChooser = FileLoaderDialog.createFileChooser();
96
final JCheckBox smoothNormalsCheckBox = new JCheckBox("smooth normals");
97
final JCheckBox removeAppsCheckBox = new JCheckBox("ignore appearances");
98
JPanel checkBoxPanel = new JPanel(new FlowLayout());
99
fileChooserPanel.add(BorderLayout.CENTER, fileChooser);
100
checkBoxPanel.add(smoothNormalsCheckBox);
101
checkBoxPanel.add(removeAppsCheckBox);
102
fileChooserPanel.add(BorderLayout.SOUTH, checkBoxPanel);
103
fileChooser.addActionListener(new ActionListener() {
104
public void actionPerformed(ActionEvent ev) {
105
File file = fileChooser.getSelectedFile();
107
if (ev.getActionCommand() == JFileChooser.APPROVE_SELECTION
109
SceneGraphComponent read = Readers.read(Input.getInput(file));
110
SceneGraphComponent tempRoot = new SceneGraphComponent();
111
tempRoot.addChild(read);
112
tempRoot.accept(new SceneGraphVisitor() {
113
public void visit(SceneGraphComponent c) {
114
if (removeAppsCheckBox.isSelected() && c.getAppearance() != null) c.setAppearance(null);
115
c.childrenWriteAccept(this, false, false, false, false, true,
118
public void visit(IndexedFaceSet i) {
119
if (i.getFaceAttributes(Attribute.NORMALS) == null) IndexedFaceSetUtility.calculateAndSetFaceNormals(i);
120
if (i.getVertexAttributes(Attribute.NORMALS) == null) IndexedFaceSetUtility.calculateAndSetVertexNormals(i);
121
if (smoothNormalsCheckBox.isSelected()) IndexedFaceSetUtility.assignSmoothVertexNormals(i, -1);
124
tempRoot.removeChild(read);
125
getViewerVR().setContent(read);
127
} catch (IOException e) {
130
smoothNormalsCheckBox.setSelected(false);
131
removeAppsCheckBox.setSelected(false);
132
getViewerVR().switchToDefaultPanel();
137
public void switchToFileBrowser() {
138
getViewerVR().switchToFileChooser(fileChooserPanel);