>On Fri, 9 Jul 2004 09:35:44 -0400, Mike Pilone <[EMAIL PROTECTED]> wrote:

>Hello,
>
>I tested the code you posted in the HelloUniverse and it never caused
>deadlock. I also modified the code to create a new frame and show it with
>the canvas. This also worked.
>
>Linux/J2SDK 1.4.2_04/OGL/Java3D 1.3.2b4
>
>There should not be a problem with swing deadlocking since the action
>listener will be called from the swing thread.
>
>-mike
>

Mike,

Thanks much for giving it a shot. If it works fine on Linux, then
it's probably my config (P4 WinXP) specific problem.

Just to make it easy for those who might want to give it a try, attached
below is the complete code.

The issue is that upon clicking the "Create Canvas3D" button, the app.
freezes. You could, however, continue to click on the button to
instantiate new Canvas3Ds. Same issue if attempted from a Behavior also.

Related issue: If an OffScreenCanvas3D is added to a View in Swing's
EDT, sometimes the Canvas3D#renderOffScreenBuffer() fails with an NPE
(even if an ImageComponent2D has been explicitly set at construction time
of the OffScreenCanvas3D). Haven't checked this one yet from a Behavior.

--Vaidya

/*
 * This is a modified version of HelloUniverse.java by Sun Microsystems
 * in Sun's Java 3D demo bundle. Please note that all of Sun's original
 * copyright apply and make sure to refer to the demo bundle for
 * further info.
 */

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class HelloUniverse extends Applet {

    private SimpleUniverse u = null;

    public BranchGroup createSceneGraph() {
 // Create the root of the branch graph
 BranchGroup objRoot = new BranchGroup();

 // Create the TransformGroup node and initialize it to the
 // identity. Enable the TRANSFORM_WRITE capability so that
 // our behavior code can modify it at run time. Add it to
 // the root of the subgraph.
 TransformGroup objTrans = new TransformGroup();
 objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
 objRoot.addChild(objTrans);

 // Create a simple Shape3D node; add it to the scene graph.
 objTrans.addChild(new ColorCube(0.4));

 // Create a new Behavior object that will perform the
 // desired operation on the specified transform and add
 // it into the scene graph.
 Transform3D yAxis = new Transform3D();
 Alpha rotationAlpha = new Alpha(-1, 4000);

 RotationInterpolator rotator =
     new RotationInterpolator(rotationAlpha, objTrans, yAxis,
         0.0f, (float) Math.PI*2.0f);
 BoundingSphere bounds =
     new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
 rotator.setSchedulingBounds(bounds);
 objRoot.addChild(rotator);

        // Have Java 3D perform optimizations on this scene graph.
        objRoot.compile();

 return objRoot;
    }

    public HelloUniverse() {
    }

    public void init() {
 setLayout(new BorderLayout());
        GraphicsConfiguration config =
           SimpleUniverse.getPreferredConfiguration();

 Canvas3D c = new Canvas3D(config);
 add("Center", c);

        // BeginMods
        javax.swing.JButton canBtn =
            new javax.swing.JButton("Create Canvas3D");
        canBtn.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent e ) {
               Canvas3D newC =
                 new Canvas3D(SimpleUniverse.getPreferredConfiguration());
               System.out.println("New Canvas3D created");
            }
        });
        add("South", canBtn);
        // EndMods

 // Create a simple scene and attach it to the virtual universe
 BranchGroup scene = createSceneGraph();
 u = new SimpleUniverse(c);

        // This will move the ViewPlatform back a bit so the
        // objects in the scene can be viewed.
        u.getViewingPlatform().setNominalViewingTransform();

 u.addBranchGraph(scene);
    }

    public void destroy() {
 u.cleanup();
    }

    //
    // The following allows HelloUniverse to be run as an application
    // as well as an applet
    //
    public static void main(String[] args) {
 new MainFrame(new HelloUniverse(), 256, 256);
    }
}

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