HTH
Kev
A. Murat Tanyer wrote:
Dear all,
I sent this message to the list but couldn't get a response.
I am trying to make an animation of my scene. I have thousands of Shape3D objects. I want to wake up different Shape3Ds at different times.
I attached a sample program that tries to do this. As you see there are four cubes on the scene. I want to wake up the first two, 2 seconds after I press the button and the last two 5 seconds after I press the button (3 seconds after the first two appears on the scene). I know that the use of switch is not right in the example but I am working about the TimeBehaviour class.
Can any one help me to solve this problem.
import java.applet.Applet; import java.awt.*; import java.awt.event.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.universe.*; import javax.media.j3d.*; import javax.vecmath.*; import javax.media.j3d.WakeupOnElapsedTime;public class TestSwitch extends Applet { boolean willCrash = true; Switch switchG; static BranchGroup root; static TransformGroup TG1; static TransformGroup TG2; static TransformGroup TG3; static TransformGroup TG4; static Switch SW1; static Switch SW2; static Switch SW3; static Switch SW4; static Behavior bh; // private WakeupOnElapsedTime critter; public BranchGroup createScene() { root = new BranchGroup(); root.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); TG1 = new TransformGroup(); TG2 = new TransformGroup(); TG3 = new TransformGroup(); TG4 = new TransformGroup(); Transform3D T1 = new Transform3D(); Transform3D T2 = new Transform3D(); Transform3D T3 = new Transform3D(); Transform3D T4 = new Transform3D(); T1.set( new Vector3d( -0.45, 0, 0 ) ); T2.set( new Vector3d( -0.15, 0, 0 ) ); T3.set( new Vector3d( +0.15, 0, 0 ) ); T4.set( new Vector3d( +0.45, 0, 0 ) ); TG1.setTransform( T1 ); TG2.setTransform( T2 ); TG3.setTransform( T3 ); TG4.setTransform( T4 ); SW1 = new Switch(); SW2 = new Switch(); SW3 = new Switch(); SW4 = new Switch(); SW1.setWhichChild(Switch.CHILD_NONE); SW2.setWhichChild(Switch.CHILD_NONE); SW3.setWhichChild(Switch.CHILD_NONE); SW4.setWhichChild(Switch.CHILD_NONE); SW1.setCapability(Switch.ALLOW_SWITCH_READ); SW1.setCapability(Switch.ALLOW_SWITCH_WRITE); SW2.setCapability(Switch.ALLOW_SWITCH_READ); SW2.setCapability(Switch.ALLOW_SWITCH_WRITE); SW3.setCapability(Switch.ALLOW_SWITCH_READ); SW3.setCapability(Switch.ALLOW_SWITCH_WRITE); SW4.setCapability(Switch.ALLOW_SWITCH_READ); SW4.setCapability(Switch.ALLOW_SWITCH_WRITE); TG1.addChild(SW1); TG2.addChild(SW2); TG3.addChild(SW3); TG4.addChild(SW4); SW1.addChild(new ColorCube(0.1)); SW2.addChild(new ColorCube(0.1)); SW3.addChild(new ColorCube(0.1)); SW4.addChild(new ColorCube(0.1)); System.out.println("TimeBehaviour added"); root.addChild(TG1); root.addChild(TG2); root.addChild(TG3); root.addChild(TG4); return root; } public TestSwitch() { GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); universe.addBranchGraph( createScene() ); setLayout(new BorderLayout()); add("Center", canvas); Button switcher = new Button( "Switch" ); switcher.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { System.out.println("Switch1"); BranchGroup bg = new BranchGroup(); bh = new TimeBehaviour(SW1, SW2, SW3, SW4); System.out.println("TimeBehaviour created"); BoundingSphere bounds_bh = new BoundingSphere(); bh.setSchedulingBounds(bounds_bh); bg.addChild(bh); root.addChild(bg); } }); add( "South", switcher ); } public static void main( String[] arg ) { new MainFrame(new TestSwitch(), 256, 256); } }
import java.awt.AWTEvent; import javax.media.j3d.Behavior; import java.util.Enumeration; import javax.media.j3d.WakeupOnElapsedTime; import javax.media.j3d.WakeupCondition; import java.awt.event.MouseEvent; import javax.media.j3d.*; public class TimeBehaviour extends Behavior { private long eventMask; private WakeupOnElapsedTime critter; static Switch Switch1; static Switch Switch2; static Switch Switch3; static Switch Switch4; public TimeBehaviour(Switch SW1, Switch SW2, Switch SW3, Switch SW4) { Switch1 = SW1; Switch2 = SW2; Switch3 = SW3; Switch4 = SW4; } public void initialize() { System.out.println("INITIALIZED"); critter = new WakeupOnElapsedTime(2000); resetEvents(); } protected final void resetEvents() { wakeupOn(critter); } public void processStimulus(Enumeration criteria) { System.out.println("RUNNING PROCESS STIMULUS"); WakeupCondition cond; while(criteria.hasMoreElements()) { cond = (WakeupCondition)criteria.nextElement(); if(cond instanceof WakeupOnElapsedTime) { System.out.println("WAKE UP"); Switch1.setWhichChild(Switch.CHILD_ALL); Switch2.setWhichChild(Switch.CHILD_ALL); Switch3.setWhichChild(Switch.CHILD_ALL); Switch4.setWhichChild(Switch.CHILD_ALL); } } } }
![]()
<<image/jpeg>>
