You could either use 2 behaviours, each with different timings that wake up seperate elements, or you could add two different wake up criterion and replace your instanceof check with a check against the criteria.

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>>

Reply via email to