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