I have a live scene graph and I want to give my user the ability to change
the axis (and alpha information) about a RotationInterpolator.  They select
the rotation axis, number of revolutions, and time delay for alpha and then
hit a button to start the spin.  After it has completed the number of revs,
I want to let them choose a different axis and do it again.

I have found a bunch of code about RotationInterpolators, but they all seem
to deal with planning a spin prior to making the graph live.  I need to
modify the Interpolation after the graph is live....

I have these nodes:

TransformGroup theModel   -- my model to spin
BranchGroup modelGroup    -- used to attach and detach models when they open
a different model file.
RotationInterpolator rotate   -- the rotation
BranchGroup removableRot  -- I found a code snippet that showed how to add
and detach behaviors by wrapping in a branchgroup.  I tried this but to no
avail =(

Code for creating theModel TG:

{
        modelGroup.detach();

        modelGroup = new BranchGroup();
        modelGroup.setCapability(BranchGroup.ALLOW_DETACH);
        modelGroup.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
        modelGroup.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);

        Inspector3DS loader = new Inspector3DS(sFilename);
        loader.setLogging(true); // turns on logging to a disk file
"log3ds.txt"
        loader.setDetail(7); // sets the level of detail to be logged
        loader.parseIt();
        theModel = loader.getModel();
        theModel.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        theModel.setCapability(TransformGroup.ALLOW_CHILDREN_READ);
        theModel.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
        theModel.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);
        modelGroup.addChild(theModel);

        rotate = new RotationInterpolator(new Alpha(0,0), theModel);
        BoundingSphere bounds = new BoundingSphere();
        rotate.setBounds(bounds);

        removableRot = new BranchGroup();
        removableRot.addChild(rotate);
        removableRot.setCapability(BranchGroup.ALLOW_DETACH);

        theModel.addChild(removableRot);

        scene.addChild(modelGroup);
}


Code for when they click "Spin":

{
        Transform3D rotT3D = new Transform3D();
        if (xRBSpin.isSelected()) {
            // X was selected
            rotT3D.rotX(Math.PI*2/180);
            System.out.println("rotating on x");
        } else if (yRBSpin.isSelected()) {
            // Y was selected
            rotT3D.rotY(Math.PI*2/180);
            System.out.println("rotating on y");
        } else if (zRBSpin.isSelected()) {
            // Z was selected
            rotT3D.rotZ(Math.PI*2/180);
            System.out.println("rotating on z");
        }

        System.out.println("revs: " + revs + "  delay: " + delay);

        Alpha rotationAlpha = new Alpha(revs, delay);

        rotate = new RotationInterpolator(rotationAlpha, theModel);
        rotate.setTransformAxis(rotT3D);

        BoundingSphere bounds = new BoundingSphere();
        rotate.setBounds(bounds);

        removableRot.detach();
        removableRot.addChild(rotate);

        theModel.addChild(removableRot);
}


Any ideas?

Thank you

Eric Sandegren

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to