import java.io.*; import java.awt.*; import java.applet.*; import vrml.external.*; import vrml.external.field.*; // import vrml.external.exception.*; // import netscape.plugin.*; // import netscape.javascript.*; // import netscape.plugin.Plugin; // import netscape.javascript.JSObject; // import netscape.javascript.JSException; public class solarsys extends Applet implements EventOutObserver { // private Button sunlight; // private Button orbit; // private Scrollbar uzeit; // private Scrollbar rzeit; private Scrollbar scaleX; private Scrollbar scaleP; private TextField FieldSelected; private Scrollbar colorR ,colorG, colorB; // private Node[] planet; private Node System; private Node Merkur; private Node Venus; // private Node Erde; private Node Mars; private Node Jupiter; private Node Saturn; private Node Uranus; private Node Neptun; private Node Pluto; private Node selectedPlanet = null; public void init() { setLayout(null); addNotify(); FieldSelected = new TextField("none"); FieldSelected.setEditable(false); FieldSelected.reshape(80, 20, 100, 24); add(FieldSelected); colorR = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 100); colorR.reshape(100, 90, 200, 20); add(colorR); colorG = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 100); colorG.reshape(100, 120, 200, 20); add(colorG); colorB = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 100); colorB.reshape(100, 150, 200, 20); add(colorB); scaleX = new Scrollbar(Scrollbar.HORIZONTAL, 0, 8, 20, 100); scaleX.reshape(500, 60, 200, 20); add(scaleX); scaleP = new Scrollbar(Scrollbar.HORIZONTAL, 0, 8, 20, 100); scaleP.reshape(500, 120, 200, 20); add(scaleP); Label l; l = new Label("Planet:"); l.reshape(20, 20, 50, 20); add(l); l = new Label("Color:"); l.reshape(30, 60, 40, 20); add(l); l = new Label("red:"); l.reshape(40, 90, 40, 20); add(l); l = new Label("green:"); l.reshape(40, 120, 40, 20); add(l); l = new Label("blue:"); l.reshape(40, 150, 40, 20); add(l); l = new Label("Physics:"); l.reshape(400, 20, 40, 20); add(l); l = new Label("Planet:"); l.reshape(410, 40, 40, 20); add(l); l = new Label("Radius:"); l.reshape(420, 60, 40, 20); add(l); l = new Label("Solar System:"); l.reshape(410, 80, 40, 20); add(l); l = new Label(" Sun-Planet-Ratio:");l.reshape(420,100, 40, 20); add(l); Browser browser = Browser.getBrowser(this); System = new Node(); Merkur = new Node(); Venus = new Node(); // Erde = new Node(); Mars = new Node(); Jupiter = new Node(); Saturn = new Node(); Uranus = new Node(); Neptun = new Node(); Pluto = new Node(); System = browser.getNode("System"); Merkur = browser.getNode("Merkur"); Merkur.getEventOut("pselected").advise(this, new Integer(0)); Venus = browser.getNode("Venus"); Venus.getEventOut("pselected").advise(this, new Integer(1)); // Erde = browser.getNode("Erde"); // Erde.getEventOut("pselected").advise(this, new Integer(0)); Mars = browser.getNode("Mars"); Mars.getEventOut("pselected").advise(this, new Integer(2)); Jupiter = browser.getNode("Jupiter"); Jupiter.getEventOut("pselected").advise(this, new Integer(3)); Saturn = browser.getNode("Saturn"); Saturn.getEventOut("pselected").advise(this, new Integer(4)); Uranus = browser.getNode("Uranus"); Uranus.getEventOut("pselected").advise(this, new Integer(5)); Neptun = browser.getNode("Neptun"); Neptun.getEventOut("pselected").advise(this, new Integer(6)); Pluto = browser.getNode("Pluto"); Pluto.getEventOut("pselected").advise(this, new Integer(7)); // planet[i] = browser.getNode("planet" + (new Integer(i)).toString()); // planet[i].getEventOut("pselected").advise(this, new Integer(i)); } public void callback(EventOut active, double timestamp, Object idx) { if (((EventOutSFBool) active).getValue()) { int intIdx = ((Integer) idx).intValue(); switch (intIdx) { case 0: FieldSelected.setText("Merkur"); selectedPlanet = Merkur; break; case 1: FieldSelected.setText("Venus"); selectedPlanet = Venus; break; // case 2: FieldSelected.setText("Erde"); selectedPlanet = Erde; break; case 2: FieldSelected.setText("Mars"); selectedPlanet = Mars; break; case 3: FieldSelected.setText("Jupiter"); selectedPlanet = Jupiter; break; case 4: FieldSelected.setText("Saturn"); selectedPlanet = Saturn; break; case 5: FieldSelected.setText("Uranus"); selectedPlanet = Uranus; break; case 6: FieldSelected.setText("Neptun"); selectedPlanet = Neptun; break; case 7: FieldSelected.setText("Pluto"); } // selectedPlanet = planet[intIdx]; getPlanetValues(); } } public void getSystemValues() { float[] scale = ((EventOutSFVec3f) System.getEventOut("scale-changed")).getValue(); scaleP.setValue((int) (scale[0] * 100)); } public void setSystemValues() { float[] scale = new float[3]; scale[0] = (((float) scaleP.getValue()) / 50) * (((float) scaleP.getValue()) / 50); scale[1] = (((float) scaleP.getValue()) / 50) * (((float) scaleP.getValue()) / 50); scale[2] = (((float) scaleP.getValue()) / 50) * (((float) scaleP.getValue()) / 50); ((EventInSFVec3f) System.getEventIn("set_scale" )).setValue(scale); } public void getPlanetValues() { float[] col = ((EventOutSFColor) selectedPlanet.getEventOut("col")).getValue(); // float size = ((EventOutSFFloat) selectedPlanet.getEventOut("size")).getValue(); float[] size= ((EventOutSFVec3f) selectedPlanet.getEventOut("size")).getValue(); colorR.setValue((int) (col[0] * 100)); colorG.setValue((int) (col[1] * 100)); colorB.setValue((int) (col[2] * 100)); // radius.setValue((int) (size * 100)); scaleX.setValue((int) ((size[0] * 100)-50)); // scaleY.setValue((int) (size[1] * 10)); // scaleZ.setValue((int) (size[2] * 10)); } private void setPlanetValues() { if (selectedPlanet != null) { float[] col = new float[3]; float[] size = new float[3]; // float size = new float; // float size; col[0] = ((float) colorR.getValue()) / 100; col[1] = ((float) colorG.getValue()) / 100; col[2] = ((float) colorB.getValue()) / 100; size[0] = (((float) scaleX.getValue()) / 10) * (((float) scaleX.getValue()) / 10); size[1] = (((float) scaleX.getValue()) / 10) * (((float) scaleX.getValue()) / 10); size[2] = (((float) scaleX.getValue()) / 10) * (((float) scaleX.getValue()) / 10); // size = ((float) radius.getValue()) / 100; ((EventInSFColor) selectedPlanet.getEventIn("col")).setValue(col); ((EventInSFVec3f) selectedPlanet.getEventIn("size" )).setValue(size); // ((EventInSFFloat) selectedPlanet.getEventIn("size" )).setValue(size); } } public boolean handleEvent(Event e) { if ((e.id == Event.SCROLL_LINE_UP) || (e.id == Event.SCROLL_LINE_DOWN) || (e.id == Event.SCROLL_PAGE_UP) || (e.id == Event.SCROLL_PAGE_DOWN) || (e.id == Event.SCROLL_ABSOLUTE)) { setPlanetValues(); setSystemValues(); return true; } return false; } }