Little progress to report...I figure out why I was not getting a branchgroup
picked...it was because I did not set the capability to
ENABLE_PICK_REPORTING.

But I have one more confusing issue: This is my setup:
I have a SphereBG and an OtherBG BranchGroups all children of a main
transform
group.

      SphereBG   // Sphere BranchGroup
      /   \   \
     /     \   sphere1BG
sphere2BG  sphere3BG

     OtherBG
       |
    LineStripArrayBG
       |
    LineStripArray


The SphereBG BranchGroup contains my Sphere3d objects (class which extends
BranchGroup) so they can be added and removed from the live scene. I also
a OtherBG BranchGroup which has another branchgroup attached to it, which
contains a line strip array. This too can be removed/added to the live scene
since it is a BranchGroup.

In my picking...I get "nice" picking when I ONLY have the Sphere3D objects
attached to the SphereBG BranchGroup...but, when I add the LineStripArrayBG
BranchGroup to the scene, then my picking gets really bad. Even though I did
not enable pick reporting on the LineStripArrayBG BranchGroup.

Basically, adding the LineStripArrayBG BranchGroup causes my picking to
screw
up...even when I rotate my scene so this LineStripArray is not visible and
hence would not be in direct view of the pick ray.

Note that only the Sphere3D objects (sphere1BG,sphere2B, etc) have the
ENABLE_PICK_REPORTING capability set....the SphereBG,OtherBG,
LineStripArrayBG
do NOT have the capability.

Does anyone have a guess as to why adding this other branchgroup would cause
picking to screw up?


   Mario



-----Original Message-----
From: ZACZEK, MARIUSZ P. (MARIO) (JSC-DM) (NASA)
Sent: Friday, March 14, 2003 3:07 PM
To: [EMAIL PROTECTED]
Subject: [JAVA3D] ? Picking inconsistency ?


I have a canvas with several 3D spheres generated from my own Sphere3d class
which itself is a BranchGroup and has a translation TransformGroup attached
to it and then a Primitive of the Sphere attached to it. I want to select
the individual spheres and tell my program which sphere it is...using the
code below I implemented the MousePickBehavior but found that I have a lot
of inconsistency in picking the objects. Sometimes I click on a sphere and
I pick it, other times I getting nothing at all...if I rotate the scene
around
then sometime I can get the sphere again. It seems like the picking is
going very well. I tried also using PRIMITIVE instead of SHAPE3D for
my 'pickResult.getNode(PickResult.SHAPE3D)' but with similar results.
Additionally I tried using the BRANCH_GROUP but I could not select anything
at all.

My questions are:
   1) Have any of you found inconsistency in your picking?
   2) How can I get the BRANCH_GROUP pickResult to work so that I can
      directly get the node instead of using User defined data attached to
      the Sphere?
   3) Do you think using a VirtualUniverse, instead of SimpleUniverse
affects
      the results? I tested this but could not find an issue.
   4) Does anyone have a better picking system/code or simply can give me
      insight on how to fix the one I have...by the way, the code below is
      entirely from the java3D demos and I only added some print lines.

thanks,

Mario




-------------------------------------------------------------------------


        PickHighlightBehavior pickBeh = new PickHighlightBehavior(canvas3D,
objRoot, bounds);



-------------------------------------------------------------------------



/*
 *      @(#)PickHighlightBehavior.java 1.15 02/04/01 15:03:24
 *
 * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 * - Redistribution in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in
 *   the documentation and/or other materials provided with the
 *   distribution.
 *
 * Neither the name of Sun Microsystems, Inc. or the names of
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * 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.
 *
 * You acknowledge that Software is not designed,licensed or intended
 * for use in the design, construction, operation or maintenance of
 * any nuclear facility.
 */

import javax.media.j3d.*;
import com.sun.j3d.utils.picking.PickTool;
import com.sun.j3d.utils.picking.PickResult;
import com.sun.j3d.utils.picking.behaviors.PickMouseBehavior;
import java.util.*;
import java.awt.*;
import java.awt.Event;
import java.awt.AWTEvent;
import java.awt.event.MouseEvent;
import javax.vecmath.*;
import com.sun.j3d.utils.picking.PickIntersection;


public class PickHighlightBehavior extends PickMouseBehavior {
  Appearance savedAppearance = null;
  Shape3D oldShape = null;
  Appearance highlightAppearance;

  public PickHighlightBehavior(Canvas3D canvas, BranchGroup root, Bounds
bounds) {
      super(canvas, root, bounds);
      this.setSchedulingBounds(bounds);
      root.addChild(this);
      Color3f white = new Color3f(1.0f, 1.0f, 1.0f);
      Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
      Color3f highlightColor = new Color3f(0.0f, 1.0f, 0.0f);
      Material highlightMaterial = new Material(highlightColor, black,
                                                highlightColor, white,
                                                80.0f);
      highlightAppearance = new Appearance();
      highlightAppearance.setMaterial(new Material(highlightColor, black,
                                                   highlightColor, white,
                                                   80.0f));

      pickCanvas.setMode(PickTool.BOUNDS);
  }

    public void updateScene(int xpos, int ypos) {
        PickResult pickResult = null;
        Shape3D shape = null;

        pickCanvas.setShapeLocation(xpos, ypos);

        Point3d eyePos = pickCanvas.getStartPosition();
        System.out.println("EYE: "+eyePos);


        pickResult = pickCanvas.pickClosest();


        if (pickResult != null) {
            shape = (Shape3D) pickResult.getNode(PickResult.SHAPE3D);
          System.out.println("     Shape:  "+shape);
        }


        if (oldShape != null){
            oldShape.setAppearance(savedAppearance);
        }
        try {
          if (shape != null) {
            savedAppearance = shape.getAppearance();
            oldShape = shape;

            shape.setAppearance(highlightAppearance);
          }
        } catch ( Exception e ) { System.out.println(" Caught E ");}

    }
}


-------------------------------------------------------------------------











   Mario

Mariusz Zaczek
NASA - Johnson Space Center
Automated Vehicles and Orbit Analysis / DM35
Flight Design and Dynamics Division
Mission Operations Directorate
Bldg: 30A     Room: 3040A

Disclaimer: "The opinions, observations and comments expressed in my email
             are strictly my own and do not necessarily reflect those of
NASA."

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

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