// Java 3D Test Applet // SwitchTest.java // Copyright (c) 1999 ENDO Yasuyuki // mailto:yasuyuki@javaopen.org // http://www.javaopen.org/j3dbook/index.html import java.applet.*; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.geometry.Primitive; import com.sun.j3d.utils.geometry.Sphere; public class SwitchTest extends Applet { private Switch switchNode = null; private BitSet bitset = null; private boolean isStandalone = false; public SwitchTest() { this.setLayout(new BorderLayout()); Panel panel = new Panel(); this.add(panel, BorderLayout.SOUTH); Checkbox rcheck = new Checkbox("Red", true); rcheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); if (state == ItemEvent.SELECTED) { bitset.set(0); } else if (state == ItemEvent.DESELECTED) { bitset.clear(0); } switchNode.setChildMask(bitset); } }); panel.add(rcheck); Checkbox ocheck = new Checkbox("Orange", true); ocheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); if (state == ItemEvent.SELECTED) { bitset.set(1); } else if (state == ItemEvent.DESELECTED) { bitset.clear(1); } switchNode.setChildMask(bitset); } }); panel.add(ocheck); Checkbox ycheck = new Checkbox("Yellow", true); ycheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); if (state == ItemEvent.SELECTED) { bitset.set(2); } else if (state == ItemEvent.DESELECTED) { bitset.clear(2); } switchNode.setChildMask(bitset); } }); panel.add(ycheck); Checkbox gcheck = new Checkbox("Green", true); gcheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); if (state == ItemEvent.SELECTED) { bitset.set(3); } else if (state == ItemEvent.DESELECTED) { bitset.clear(3); } switchNode.setChildMask(bitset); } }); panel.add(gcheck); Checkbox bcheck = new Checkbox("Blue-green", true); bcheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); if (state == ItemEvent.SELECTED) { bitset.set(4); } else if (state == ItemEvent.DESELECTED) { bitset.clear(4); } switchNode.setChildMask(bitset); } }); panel.add(bcheck); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); this.add(canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); BranchGroup scene = createSceneGraph(); universe.addBranchGraph(scene); } private BranchGroup createSceneGraph() { BranchGroup root = new BranchGroup(); BoundingSphere bounds = new BoundingSphere( new Point3d(), 100.0 ); DirectionalLight light = new DirectionalLight( new Color3f(1.0f, 1.0f, 1.0f), new Vector3f(-0.57f, -0.57f, -0.57f) ); light.setInfluencingBounds(bounds); root.addChild(light); AmbientLight alight = new AmbientLight(); alight.setInfluencingBounds(bounds); root.addChild(alight); Transform3D t3d = new Transform3D(); TransformGroup trans = new TransformGroup(t3d); bitset = new BitSet(5); for (int i=0; i<5; i++) bitset.set(i); switchNode = new Switch(Switch.CHILD_MASK, bitset); switchNode.setCapability(Switch.ALLOW_SWITCH_READ); switchNode.setCapability(Switch.ALLOW_SWITCH_WRITE); trans.addChild(switchNode); switchNode.addChild( createSphere( 0.1f, new Vector3d(-0.8, 0.0, 0.0), new Color3f(1.0f, 0.0f, 0.0f) ) ); // red switchNode.addChild( createSphere( 0.1f, new Vector3d(-0.4, 0.0, 0.0), new Color3f(1.0f, 0.5f, 0.0f) ) ); // orange switchNode.addChild( createSphere( 0.1f, new Vector3d(0.0, 0.0, 0.0), new Color3f(1.0f, 1.0f, 0.0f) ) ); // yellow switchNode.addChild( createSphere( 0.1f, new Vector3d(0.4, 0.0, 0.0), new Color3f(0.5f, 1.0f, 0.0f) ) ); // yellow green switchNode.addChild( createSphere( 0.1f, new Vector3d(0.8, 0.0, 0.0), new Color3f(0.0f, 1.0f, 0.5f) ) ); // blue green root.addChild(trans); return root; } private TransformGroup createSphere(float size, Vector3d pos, Color3f color) { Transform3D t3d = new Transform3D(); t3d.set(pos); TransformGroup trans = new TransformGroup(t3d); Appearance ap = new Appearance(); Material mat = new Material(); mat.setDiffuseColor(color); mat.setShininess(100.0f); ap.setMaterial(mat); Sphere sphere = new Sphere( size, Primitive.GENERATE_NORMALS, ap ); trans.addChild(sphere); return trans; } public static void main(String[] args) { SwitchTest applet = new SwitchTest(); Frame frame = new MainFrame(applet, 500, 500); } }