Re: [JAVA3D] Picking Behaviors in Java3D

2005-07-10 Thread Todd L. Peters
John-

I still have the problem where it cannot find anything.

SceneGraphPath[] path = null;
path = mPickGroup.pickAll(ray);

path.length is equal to zero.

Do I have to set any attributes on the group?  On the derived shape3d
objects?  Can Java3D identify an object derived from Shape3D as described
below for picking?  Does it matter what group I insert the Highlight
Behavior into?

Thanks,
Todd


-Original Message-
From: Discussion list for Java 3D API
[mailto:[EMAIL PROTECTED] Behalf Of John Wright
Sent: Saturday, July 09, 2005 7:17 PM
To: JAVA3D-INTEREST@JAVA.SUN.COM
Subject: Re: [JAVA3D] Picking Behaviors in Java3D


Todd,

I've found that picking was not reliable unless you do a pickAll and
then loop through the scene graph path array returned (to find your
closest hit).  Clumsy but it works.

- John Wright
Starfire Research

Todd L. Peters wrote:
 I am new to Java 3D and am having trouble with picking behaviors.  The
 tutorial is not really clear to me and the examples on the web seem to use
 deprecated methods.  I think I have the basic concept correct, but things
 do not seem to be working out.

 I have a branchgroup (not the top level group) that has a number of
 children.  These children are all of one class that is derived from
 Shape3D.  The geometry of the object is set to a PointArray with one
 point.  In short, the branchgroup contains a number of points.

 I pass the branchgroup and the canvas3D object to the following behavior:

 public class Highlight extends Behavior {

private Canvas3D mCanvas;
private BranchGroup mPickGroup;
private static ColoringAttributes mColoringAttributes;
private static Appearance mHighlightAppearance;
private int mX,mY;

 /** Creates a new instance of Highlight */
public Highlight(Canvas3D cv3d, BranchGroup bg) {

 mCanvas = cv3d;
 mPickGroup = bg;
 mColoringAttributes = new ColoringAttributes();
 mColoringAttributes.setColor(1.0f, 0.0f, 0.0f);
 mHighlightAppearance = new Appearance();
 mHighlightAppearance.setColoringAttributes(mColoringAttributes);

 }

 /**
  * initialize the Behavior
  * set initial wakeup condition
  * called when behavior becomes live
  */
 public void initialize(){
 // set initial wakeup condition
 this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
 return;
 }


 protected void processAWTEvent(AWTEvent e) {
 MouseEvent evt = (MouseEvent)e;
 mX = evt.getX();
 mY = evt.getY();
 return;
 }

 // called by Java 3D when appropriate stimulus occurs
 public void processStimulus(Enumeration criteria){

 WakeupCondition cond;
 AWTEvent event;

 cond = (WakeupCondition)criteria.nextElement();
 event = ((WakeupOnAWTEvent)cond).getAWTEvent()[0];
 processAWTEvent(event);

 PickRay ray = createPickRay(mCanvas, mX, mY);
 SceneGraphPath path = null;
 path = mPickGroup.pickClosest(ray);
 if (path != null) {
 Shape3D s = (Shape3D)path.getObject();
 if (s != null) {
 s.setAppearance(mHighlightAppearance);
 }
 }
 this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
 return;


 }

 private PickRay createPickRay(Canvas3D canvas, int x, int y)   {
 Point3d eye_pos = new Point3d();
 Point3d mouse_pos = new Point3d();

 canvas.getCenterEyeInImagePlate(eye_pos);
 canvas.getPixelLocationInImagePlate(x, y, mouse_pos);

 Transform3D motion = new Transform3D();
 canvas.getImagePlateToVworld(motion);
 motion.transform(eye_pos);
 motion.transform(mouse_pos);

 Vector3d direction = new Vector3d(mouse_pos);
 direction.sub(eye_pos);

 return new PickRay(eye_pos, direction);
 }

 }

 It is initialized as such:

 Highlight mousemoveBehavior = new Highlight(cv, bgNodes);
 mousemoveBehavior.setSchedulingBounds(new BoundingSphere());
 bg.addChild(mousemoveBehavior);

 Where bgNodes is the aforementioned branchgroup with all the points and bg
 is the top-level branchgroup.

 However, the Highlight behavior does not seem to detect any geometry.  If
 I assign the behavior to the top-level branchgroup, it appears to detect
 other geometry in the scene (although I have trouble following the
 debugger output).

 Can anyone help clarify how I should be doing this?

 Regards,
 Todd


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

Re: [JAVA3D] Picking Behaviors in Java3D

2005-07-10 Thread John Wright

Todd,

You have to set the objects you want to pick as pickable.  If they
aren't set as pickable they won't trigger a pick.

- John Wright
Starfire Research

Todd L. Peters wrote:

John-

I still have the problem where it cannot find anything.

SceneGraphPath[] path = null;
path = mPickGroup.pickAll(ray);

path.length is equal to zero.

Do I have to set any attributes on the group?  On the derived shape3d
objects?  Can Java3D identify an object derived from Shape3D as described
below for picking?  Does it matter what group I insert the Highlight
Behavior into?

Thanks,
Todd


-Original Message-
From: Discussion list for Java 3D API
[mailto:[EMAIL PROTECTED] Behalf Of John Wright
Sent: Saturday, July 09, 2005 7:17 PM
To: JAVA3D-INTEREST@JAVA.SUN.COM
Subject: Re: [JAVA3D] Picking Behaviors in Java3D


Todd,

I've found that picking was not reliable unless you do a pickAll and
then loop through the scene graph path array returned (to find your
closest hit).  Clumsy but it works.

- John Wright
Starfire Research

Todd L. Peters wrote:


I am new to Java 3D and am having trouble with picking behaviors.  The
tutorial is not really clear to me and the examples on the web seem to use
deprecated methods.  I think I have the basic concept correct, but things
do not seem to be working out.

I have a branchgroup (not the top level group) that has a number of
children.  These children are all of one class that is derived from
Shape3D.  The geometry of the object is set to a PointArray with one
point.  In short, the branchgroup contains a number of points.

I pass the branchgroup and the canvas3D object to the following behavior:

public class Highlight extends Behavior {

  private Canvas3D mCanvas;
  private BranchGroup mPickGroup;
  private static ColoringAttributes mColoringAttributes;
  private static Appearance mHighlightAppearance;
  private int mX,mY;

   /** Creates a new instance of Highlight */
  public Highlight(Canvas3D cv3d, BranchGroup bg) {

   mCanvas = cv3d;
   mPickGroup = bg;
   mColoringAttributes = new ColoringAttributes();
   mColoringAttributes.setColor(1.0f, 0.0f, 0.0f);
   mHighlightAppearance = new Appearance();
   mHighlightAppearance.setColoringAttributes(mColoringAttributes);

   }

   /**
* initialize the Behavior
* set initial wakeup condition
* called when behavior becomes live
*/
   public void initialize(){
   // set initial wakeup condition
   this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
   return;
   }


   protected void processAWTEvent(AWTEvent e) {
   MouseEvent evt = (MouseEvent)e;
   mX = evt.getX();
   mY = evt.getY();
   return;
   }

   // called by Java 3D when appropriate stimulus occurs
   public void processStimulus(Enumeration criteria){

   WakeupCondition cond;
   AWTEvent event;

   cond = (WakeupCondition)criteria.nextElement();
   event = ((WakeupOnAWTEvent)cond).getAWTEvent()[0];
   processAWTEvent(event);

   PickRay ray = createPickRay(mCanvas, mX, mY);
   SceneGraphPath path = null;
   path = mPickGroup.pickClosest(ray);
   if (path != null) {
   Shape3D s = (Shape3D)path.getObject();
   if (s != null) {
   s.setAppearance(mHighlightAppearance);
   }
   }
   this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
   return;


   }

   private PickRay createPickRay(Canvas3D canvas, int x, int y)   {
   Point3d eye_pos = new Point3d();
   Point3d mouse_pos = new Point3d();

   canvas.getCenterEyeInImagePlate(eye_pos);
   canvas.getPixelLocationInImagePlate(x, y, mouse_pos);

   Transform3D motion = new Transform3D();
   canvas.getImagePlateToVworld(motion);
   motion.transform(eye_pos);
   motion.transform(mouse_pos);

   Vector3d direction = new Vector3d(mouse_pos);
   direction.sub(eye_pos);

   return new PickRay(eye_pos, direction);
   }

}

It is initialized as such:

   Highlight mousemoveBehavior = new Highlight(cv, bgNodes);
   mousemoveBehavior.setSchedulingBounds(new BoundingSphere());
   bg.addChild(mousemoveBehavior);

Where bgNodes is the aforementioned branchgroup with all the points and bg
is the top-level branchgroup.

However, the Highlight behavior does not seem to detect any geometry.  If
I assign the behavior to the top-level branchgroup, it appears to detect
other geometry in the scene (although I have trouble following the
debugger output).

Can anyone help clarify how I should be doing this?

Regards,
Todd




===


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

Re: [JAVA3D] Picking Behaviors in Java3D

2005-07-10 Thread Todd L. Peters
 event;

cond = (WakeupCondition)criteria.nextElement();
event = ((WakeupOnAWTEvent)cond).getAWTEvent()[0];
processAWTEvent(event);

PickRay ray = createPickRay(mCanvas, mX, mY);
SceneGraphPath[] path = null;
path = mPickGroup.pickAll(ray);
if (path != null) {
Shape3D s = (Shape3D)path[0].getObject();
if (s != null) {
s.setAppearance(mHighlightAppearance);

}
}
this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
return;


}

private PickRay createPickRay(Canvas3D canvas, int x, int y)   {
Point3d eye_pos = new Point3d();
Point3d mouse_pos = new Point3d();

canvas.getCenterEyeInImagePlate(eye_pos);
canvas.getPixelLocationInImagePlate(x, y, mouse_pos);

Transform3D motion = new Transform3D();
canvas.getImagePlateToVworld(motion);
motion.transform(eye_pos);
motion.transform(mouse_pos);

Vector3d direction = new Vector3d(mouse_pos);
direction.sub(eye_pos);

return new PickRay(eye_pos, direction);
}

}

-Original Message-
From: Discussion list for Java 3D API
[mailto:[EMAIL PROTECTED] Behalf Of John Wright
Sent: Sunday, July 10, 2005 10:34 AM
To: JAVA3D-INTEREST@JAVA.SUN.COM
Subject: Re: [JAVA3D] Picking Behaviors in Java3D


Todd,

You have to set the objects you want to pick as pickable.  If they
aren't set as pickable they won't trigger a pick.

- John Wright
Starfire Research

Todd L. Peters wrote:
 John-

 I still have the problem where it cannot find anything.

 SceneGraphPath[] path = null;
 path = mPickGroup.pickAll(ray);

 path.length is equal to zero.

 Do I have to set any attributes on the group?  On the derived shape3d
 objects?  Can Java3D identify an object derived from Shape3D as described
 below for picking?  Does it matter what group I insert the Highlight
 Behavior into?

 Thanks,
 Todd


 -Original Message-
 From: Discussion list for Java 3D API
 [mailto:[EMAIL PROTECTED] Behalf Of John Wright
 Sent: Saturday, July 09, 2005 7:17 PM
 To: JAVA3D-INTEREST@JAVA.SUN.COM
 Subject: Re: [JAVA3D] Picking Behaviors in Java3D


 Todd,

 I've found that picking was not reliable unless you do a pickAll and
 then loop through the scene graph path array returned (to find your
 closest hit).  Clumsy but it works.

 - John Wright
 Starfire Research

 Todd L. Peters wrote:

I am new to Java 3D and am having trouble with picking behaviors.  The
tutorial is not really clear to me and the examples on the web seem to use
deprecated methods.  I think I have the basic concept correct, but things
do not seem to be working out.

I have a branchgroup (not the top level group) that has a number of
children.  These children are all of one class that is derived from
Shape3D.  The geometry of the object is set to a PointArray with one
point.  In short, the branchgroup contains a number of points.

I pass the branchgroup and the canvas3D object to the following behavior:

public class Highlight extends Behavior {

   private Canvas3D mCanvas;
   private BranchGroup mPickGroup;
   private static ColoringAttributes mColoringAttributes;
   private static Appearance mHighlightAppearance;
   private int mX,mY;

/** Creates a new instance of Highlight */
   public Highlight(Canvas3D cv3d, BranchGroup bg) {

mCanvas = cv3d;
mPickGroup = bg;
mColoringAttributes = new ColoringAttributes();
mColoringAttributes.setColor(1.0f, 0.0f, 0.0f);
mHighlightAppearance = new Appearance();
mHighlightAppearance.setColoringAttributes(mColoringAttributes);

}

/**
 * initialize the Behavior
 * set initial wakeup condition
 * called when behavior becomes live
 */
public void initialize(){
// set initial wakeup condition
this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
return;
}


protected void processAWTEvent(AWTEvent e) {
MouseEvent evt = (MouseEvent)e;
mX = evt.getX();
mY = evt.getY();
return;
}

// called by Java 3D when appropriate stimulus occurs
public void processStimulus(Enumeration criteria){

WakeupCondition cond;
AWTEvent event;

cond = (WakeupCondition)criteria.nextElement();
event = ((WakeupOnAWTEvent)cond).getAWTEvent()[0];
processAWTEvent(event);

PickRay ray = createPickRay(mCanvas, mX, mY);
SceneGraphPath path = null;
path = mPickGroup.pickClosest(ray);
if (path != null) {
Shape3D s = (Shape3D)path.getObject();
if (s != null) {
s.setAppearance(mHighlightAppearance);
}
}
this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
return;


}

private PickRay createPickRay(Canvas3D canvas, int x, int y)   {
Point3d eye_pos = new Point3d

Re: [JAVA3D] Picking Behaviors in Java3D

2005-07-10 Thread Todd L. Peters
I got it now.

Apparently a PickRay is virtually impossible to intersect with a point, the
answer is to use a larger pickshape.

-Todd

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


Re: [JAVA3D] Picking Behaviors in Java3D

2005-07-10 Thread John Wright

Todd,

I'm glad you got it.  Yes, a point is extremely hard to intersect with!

- John Wright
Starfire Research

Todd L. Peters wrote:

I got it now.

Apparently a PickRay is virtually impossible to intersect with a point, the
answer is to use a larger pickshape.

-Todd


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


Re: [JAVA3D] Picking Behaviors in Java3D

2005-07-09 Thread John Wright

Todd,

I've found that picking was not reliable unless you do a pickAll and
then loop through the scene graph path array returned (to find your
closest hit).  Clumsy but it works.

- John Wright
Starfire Research

Todd L. Peters wrote:

I am new to Java 3D and am having trouble with picking behaviors.  The
tutorial is not really clear to me and the examples on the web seem to use
deprecated methods.  I think I have the basic concept correct, but things
do not seem to be working out.

I have a branchgroup (not the top level group) that has a number of
children.  These children are all of one class that is derived from
Shape3D.  The geometry of the object is set to a PointArray with one
point.  In short, the branchgroup contains a number of points.

I pass the branchgroup and the canvas3D object to the following behavior:

public class Highlight extends Behavior {

   private Canvas3D mCanvas;
   private BranchGroup mPickGroup;
   private static ColoringAttributes mColoringAttributes;
   private static Appearance mHighlightAppearance;
   private int mX,mY;

/** Creates a new instance of Highlight */
   public Highlight(Canvas3D cv3d, BranchGroup bg) {

mCanvas = cv3d;
mPickGroup = bg;
mColoringAttributes = new ColoringAttributes();
mColoringAttributes.setColor(1.0f, 0.0f, 0.0f);
mHighlightAppearance = new Appearance();
mHighlightAppearance.setColoringAttributes(mColoringAttributes);

}

/**
 * initialize the Behavior
 * set initial wakeup condition
 * called when behavior becomes live
 */
public void initialize(){
// set initial wakeup condition
this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
return;
}


protected void processAWTEvent(AWTEvent e) {
MouseEvent evt = (MouseEvent)e;
mX = evt.getX();
mY = evt.getY();
return;
}

// called by Java 3D when appropriate stimulus occurs
public void processStimulus(Enumeration criteria){

WakeupCondition cond;
AWTEvent event;

cond = (WakeupCondition)criteria.nextElement();
event = ((WakeupOnAWTEvent)cond).getAWTEvent()[0];
processAWTEvent(event);

PickRay ray = createPickRay(mCanvas, mX, mY);
SceneGraphPath path = null;
path = mPickGroup.pickClosest(ray);
if (path != null) {
Shape3D s = (Shape3D)path.getObject();
if (s != null) {
s.setAppearance(mHighlightAppearance);
}
}
this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
return;


}

private PickRay createPickRay(Canvas3D canvas, int x, int y)   {
Point3d eye_pos = new Point3d();
Point3d mouse_pos = new Point3d();

canvas.getCenterEyeInImagePlate(eye_pos);
canvas.getPixelLocationInImagePlate(x, y, mouse_pos);

Transform3D motion = new Transform3D();
canvas.getImagePlateToVworld(motion);
motion.transform(eye_pos);
motion.transform(mouse_pos);

Vector3d direction = new Vector3d(mouse_pos);
direction.sub(eye_pos);

return new PickRay(eye_pos, direction);
}

}

It is initialized as such:

Highlight mousemoveBehavior = new Highlight(cv, bgNodes);
mousemoveBehavior.setSchedulingBounds(new BoundingSphere());
bg.addChild(mousemoveBehavior);

Where bgNodes is the aforementioned branchgroup with all the points and bg
is the top-level branchgroup.

However, the Highlight behavior does not seem to detect any geometry.  If
I assign the behavior to the top-level branchgroup, it appears to detect
other geometry in the scene (although I have trouble following the
debugger output).

Can anyone help clarify how I should be doing this?

Regards,
Todd

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