Dan,

Yup... my code works FINE with only a single link to the SG.

My code was used successfully for a project last year.

Can you tell me what is wrong with this code:

        TransformGroup bushes = new TransformGroup();
        Vector3f translate = new Vector3f();
        Transform3D T3D = new Transform3D();
        TransformGroup TGT;

        public PlaceBushes() {
                bushes.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
                bushes.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);

                SharedGroup sg = new SharedGroup();
                String filename = "/pernica/images/bush.gif";
                OrientedShape3D bush = new OrientedPlane(filename,1,1,1); // 1 meter
by 1 meter placed 1 meter high
                bush.setAlignmentAxis( 0.0f, 1.0f, 0.0f); // unnecessary
                sg.addChild(bush);

                float[][] position = {
                        {0,0,-50}, // markers for distances
                        {0,0,-100},
                        {0,0,-150},
                        {0,0,-200},

                        {0,0,-5}, // To demo transparency problems
                        {0,0,-7},
                        {0,0,-9},
                        {0,0,-11},

                        {162,0,-199}, // 2nd Floor walkway corners
                        {200,0,-248.5f},
                        {286,0,-199},
                        {248f,0,-248.5f},

                        {162,18,-199}, // 4th Floor walkway corners
                        {200,18,-248.5f},
                        {286,18,-199},
                        {248f,18,-248.5f},

                        {142.5f,0,-224}, // near west bench
                        {137.5f,0,-224},

                        {195,0,-289} // last one inside north store

                };

    for (int i = 0; i < position.length; i++){
        translate.set(position[i]);
        T3D.setTranslation(translate);
        TGT = new TransformGroup(T3D);
        TGT.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        TGT.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        TGT.addChild(new Link(sg));
        bushes.addChild(TGT);
    }

}

Thank you.
- John Wright
Starfire Research

Dan Petersen wrote:
>
> > X-Accept-Language: en
> > MIME-Version: 1.0
> > Content-Transfer-Encoding: 7bit
> > Date: Wed, 2 May 2001 10:45:44 -0500
> > From: John Wright <[EMAIL PROTECTED]>
> > Subject: [JAVA3D] Oriented Shape3Ds in Shared Groups
> > To: [EMAIL PROTECTED]
> >
> > Oriented Shape3Ds in Shared Groups appears to be malfuctioning again
> > (Java 3D 1.2.1 and 1.2.1_01). The shapes do appear but do not change
> > orientation anymore.
> >
> > - John Wright
> > Starfire Research
>
> Attached is a modified version of the OrientedTest example program, placing
> the OrienetdShape3D (text) in a SharedGroup.  This example works.
>
> If you have a more complicated example that is not working please send us
> an example program so we can investigate.
>
> Thanks,
>
> Dan Petersen
> Java 3D Team
> Sun Microsystems
>
>   ------------------------------------------------------------------------
> /*
>  *      %Z%%M% %I% %E% %U%
>  *
>  * Copyright (c) 1996-2001 Sun Microsystems, Inc. All Rights Reserved.
>  *
>  * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
>  * modify and redistribute this software in source and binary code form,
>  * provided that i) this copyright notice and license appear on all copies of
>  * the software; and ii) Licensee does not utilize the software in a manner
>  * which is disparaging to Sun.
>  *
>  * This software is provided "AS IS," without a warranty of any kind. ALL
>  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
>  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
>  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
>  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
>  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
>  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
>  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
>  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
>  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
>  * POSSIBILITY OF SUCH DAMAGES.
>  *
>  * This software is not designed or intended for use in on-line control of
>  * aircraft, air traffic, aircraft navigation or aircraft communications; or in
>  * the design, construction, operation or maintenance of any nuclear
>  * facility. Licensee represents and warrants that it will not use or
>  * redistribute the Software for such purposes.
>  */
>
> import java.applet.Applet;
> import java.awt.*;
> import java.awt.event.*;
> import com.sun.j3d.utils.image.TextureLoader;
> 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 com.sun.j3d.utils.behaviors.mouse.*;
>
> public class OrientedTest extends Applet {
>
>     // setup font stuff
>     private String fontName = "TestFont";
>     private String textString = "OrientedShape3D";
>     float sl = textString.length();
>
>     // paths to texture image files
>     private java.net.URL earthImage = null;
>     private java.net.URL stoneImage = null;
>
>     private SimpleUniverse u = null;
>
>     public BranchGroup createSceneGraph() {
>
>         // Create the root of the branch graph
>         BranchGroup objRoot = new BranchGroup();
>
>         TransformGroup objScale = new TransformGroup();
>         Transform3D textMat = new Transform3D();
>         // Assuming uniform size chars, set scale to fit string in view
>         textMat.setScale(1.2/sl);
>         objScale.setTransform(textMat);
>
>         // Create the transform group node and initialize it to the
>         // identity.  Enable the TRANSFORM_WRITE capability so that
>         // our behavior code can modify it at runtime.  Add it to the
>         // root of the subgraph.
>         TransformGroup objTrans = new TransformGroup();
>         objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
>         objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
>         objRoot.addChild(objTrans);
>
>         BoundingSphere bounds =
>             new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
>
>         Appearance apText = new Appearance();
>         Material m = new Material();
>         m.setLightingEnable(true);
>         apText.setMaterial(m);
>
>         Appearance apEarth= new Appearance();
>         Material mm = new Material();
>         mm.setLightingEnable(true);
>         apEarth.setMaterial(mm);
>
>         Appearance apStone = new Appearance();
>         apStone.setMaterial(mm);
>
>         // Put OrientedShape3D in a SharedGroup
>         SharedGroup sg = new SharedGroup();
>         Font3D f3d = new Font3D(new Font(fontName, Font.PLAIN, 2),
>                                 new FontExtrusion());
>         Text3D txt = new Text3D(f3d, textString,
>              new Point3f( -sl/2.0f, 3.0f, 0.0f));
>         OrientedShape3D textShape = new OrientedShape3D();
>         textShape.setGeometry(txt);
>         textShape.setAppearance(apText);
>         textShape.setAlignmentAxis( 0.0f, 1.0f, 0.0f);
>         sg.addChild( textShape );
>
>         // Add a Link in the SceneGraph
>         Link link1 = new Link(sg);
>         objScale.addChild(link1);
>
>         // Move down a bit and add another Link
>         Transform3D t3d = new Transform3D();
>         t3d.set(new Vector3d(0.0d, -8.0d, 0.0d));
>         TransformGroup xlateTrans = new TransformGroup(t3d);
>         objScale.addChild(xlateTrans);
>
>         Link link2 = new Link(sg);
>         xlateTrans.addChild(link2);
>
>         // Create a simple shape leaf node, add it to the scene graph.
>
>         Transform3D cubeMat = new Transform3D();
>         TransformGroup cubeTrans = new TransformGroup(cubeMat);
>         cubeMat.set(new Vector3d(0.9, 0.0, -1.0));
>         cubeTrans.setTransform(cubeMat);
>         cubeTrans.addChild(new ColorCube(0.3));
>         objTrans.addChild(cubeTrans);
>
>         TextureLoader stoneTex = new TextureLoader(stoneImage, new String("RGB"), 
>this);
>         if (stoneTex != null) apStone.setTexture(stoneTex.getTexture());
>
>         TextureAttributes texAttr = new TextureAttributes();
>         texAttr.setTextureMode(TextureAttributes.MODULATE);
>         apStone.setTextureAttributes(texAttr);
>
>         Transform3D coneMat = new Transform3D();
>         TransformGroup coneTrans = new TransformGroup(coneMat);
>         coneMat.set(new Vector3d(0.0, 0.0, 0.0));
>         coneTrans.setTransform(coneMat);
>         coneTrans.addChild(new Cone(.2f, 0.8f,Cone.GENERATE_NORMALS |
>                                     Cone.GENERATE_TEXTURE_COORDS, apStone));
>         objTrans.addChild(coneTrans);
>
>         TextureLoader earthTex = new TextureLoader(earthImage, new String("RGB"), 
>this);
>         if (earthTex != null) apEarth.setTexture(earthTex.getTexture());
>
>         apEarth.setTextureAttributes(texAttr);
>
>         Transform3D cylinderMat = new Transform3D();
>         TransformGroup cylinderTrans = new TransformGroup(cylinderMat);
>         cylinderMat.set(new Vector3d(-0.9, 0.5, -1.0));
>         cylinderTrans.setTransform(cylinderMat);
>         cylinderTrans.addChild(new Cylinder(.35f, 2.0f,Cylinder.GENERATE_NORMALS |
>                                                       
>Cylinder.GENERATE_TEXTURE_COORDS, apEarth));
>         objTrans.addChild(cylinderTrans);
>
>         objTrans.addChild(objScale);
>
>         // Set up the background
>         Color3f bgColor = new Color3f(0.05f, 0.05f, 0.5f);
>         Background bgNode = new Background(bgColor);
>         bgNode.setApplicationBounds(bounds);
>         objRoot.addChild(bgNode);
>
>         // Set up the ambient light
>         Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f);
>         AmbientLight ambientLightNode = new AmbientLight(ambientColor);
>         ambientLightNode.setInfluencingBounds(bounds);
>         objRoot.addChild(ambientLightNode);
>
>         // Set up the directional lights
>         Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);
>         Vector3f light1Direction  = new Vector3f(1.0f, 1.0f, 1.0f);
>         Color3f light2Color = new Color3f(1.0f, 1.0f, 0.9f);
>         Vector3f light2Direction  = new Vector3f(-1.0f, -1.0f, -1.0f);
>
>         DirectionalLight light1
>             = new DirectionalLight(light1Color, light1Direction);
>         light1.setInfluencingBounds(bounds);
>         objRoot.addChild(light1);
>
>         DirectionalLight light2
>             = new DirectionalLight(light2Color, light2Direction);
>         light2.setInfluencingBounds(bounds);
>         objRoot.addChild(light2);
>
>         apText.setMaterial(mm);
>
>         // Have Java 3D perform optimizations on this scene graph.
>         objRoot.compile();
>
>         return objRoot;
>     }
>
>     public OrientedTest() {
>     }
>
>     public OrientedTest(java.net.URL earthURL, java.net.URL stoneURL) {
>         earthImage = earthURL;
>         stoneImage = stoneURL;
>     }
>
>     public void init() {
>         // the paths to the image files for an applet
>         if (earthImage == null) {
>             try {
>                 earthImage = new java.net.URL(getCodeBase().toString() +
>                                               "../images/earth.jpg");
>             }
>             catch (java.net.MalformedURLException ex) {
>                 System.out.println(ex.getMessage());
>                 System.exit(1);
>             }
>         }
>         if (stoneImage == null) {
>           try {
>               stoneImage = new java.net.URL(getCodeBase().toString() +
>                                             "../images/stone.jpg");
>           }
>           catch (java.net.MalformedURLException ex) {
>               System.out.println(ex.getMessage());
>               System.exit(1);
>           }
>         }
>         setLayout(new BorderLayout());
>         GraphicsConfiguration config =
>            SimpleUniverse.getPreferredConfiguration();
>
>         Canvas3D c = new Canvas3D(config);
>         add("Center", c);
>
>         // Create a simple scene and attach it to the virtual universe
>         BranchGroup scene = createSceneGraph();
>         u = new SimpleUniverse(c, 4);
>
>         // add mouse behaviors to ViewingPlatform
>         ViewingPlatform viewingPlatform = u.getViewingPlatform();
>
>         // there is a special rotate behavior, so can't use the utility
>         // method
>         MouseRotateY rotate = new MouseRotateY(MouseRotateY.INVERT_INPUT);
>         rotate.setTransformGroup(viewingPlatform.getMultiTransformGroup().
>                                    getTransformGroup(0));
>         BranchGroup rotateBG = new BranchGroup();
>         rotateBG.addChild(rotate);
>         viewingPlatform.addChild(rotateBG);
>         BoundingSphere bounds =
>             new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
>         rotate.setSchedulingBounds(bounds);
>
>         MouseZoom zoom =
>             new MouseZoom(c, MouseZoom.INVERT_INPUT);
>         zoom.setTransformGroup(viewingPlatform.getMultiTransformGroup().
>                           getTransformGroup(1));
>         zoom.setSchedulingBounds(bounds);
>         BranchGroup zoomBG = new BranchGroup();
>         zoomBG.addChild(zoom);
>         viewingPlatform.addChild(zoomBG);
>
>         MouseTranslate translate =
>             new MouseTranslate(c, MouseTranslate.INVERT_INPUT);
>         translate.setTransformGroup(viewingPlatform.getMultiTransformGroup().
>                                     getTransformGroup(2));
>         translate.setSchedulingBounds(bounds);
>         BranchGroup translateBG = new BranchGroup();
>         translateBG.addChild(translate);
>         viewingPlatform.addChild(translateBG);
>
>         // 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.removeAllLocales();
>     }
>
>     //
>     // The following allows OrientedTest to be run as an application
>     // as well as an applet
>     //
>     public static void main(String[] args) {
>         java.net.URL earthURL = null;
>         java.net.URL stoneURL = null;
>         try {
>             // the paths to the image files for an application
>             earthURL = new java.net.URL("file:../images/earth.jpg");
>             stoneURL = new java.net.URL("file:../images/stone.jpg");
>         }
>         catch (java.net.MalformedURLException ex) {
>             System.out.println(ex.getMessage());
>             System.exit(1);
>         }
>
>         new MainFrame(new OrientedTest(earthURL, stoneURL), 400, 400);
>     }
> }

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