my pick operation returns a result based on the original un"oriented"
orientation of the shape. here is a test case illustrating what i mean.
i've drawn a white box in the middle of the canvas3d with a pi/3 rotation
about the Y axis. click near the middle and the edges of the white box to
see what i mean. thanks.
Will
--test.java--
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.universe.*;
import com.sun.j3d.utils.picking.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class test extends Applet implements MouseListener {
private PickCanvas pickCanvas;
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.
Transform3D trans = new Transform3D();
trans.rotY(Math.PI*1/3);
TransformGroup objTrans = new TransformGroup(trans);
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objRoot.addChild(objTrans);
// Create a 2d square
int[] v = {4};
float[] cord = {-0.5f, -0.5f, 0f};
QuadArray tfa = new QuadArray(4, QuadArray.COORDINATES);
tfa.setCoordinate(3, cord);
cord[0] = 0.5f; cord[1] = -0.5f; cord[2] = 0;
tfa.setCoordinate(2, cord);
cord[0] = 0.5f; cord[1] = 0.5f; cord[2] = 0;
tfa.setCoordinate(1, cord);
cord[0] = -0.5f; cord[1] = 0.5f; cord[2] = 0;
tfa.setCoordinate(0, cord);
tfa.setCapability(Geometry.ALLOW_INTERSECT);
Appearance app = new Appearance();
Material mat = new Material();
mat.setLightingEnable(false);
app.setMaterial(mat);
ColoringAttributes ca = new ColoringAttributes();
app.setColoringAttributes(ca);
PolygonAttributes pa = new PolygonAttributes();
pa.setCullFace(PolygonAttributes.CULL_NONE);
app.setPolygonAttributes(pa);
OrientedShape3D aShape = new OrientedShape3D(tfa, app,
OrientedShape3D.ROTATE_ABOUT_POINT, new Point3f(0,0,0));
aShape.setPickable(true);
aShape.setBoundsAutoCompute(true);
// Create a simple Shape3D node; add it to the scene graph.
objTrans.addChild(aShape);
// Have Java 3D perform optimizations on this scene graph.
objRoot.compile();
return objRoot;
}
public test() {
setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
add("Center", c);
c.addMouseListener(this);
// Create a simple scene and attach it to the virtual universe
BranchGroup scene = createSceneGraph();
SimpleUniverse u = new SimpleUniverse(c);
// set picker
pickCanvas = new PickCanvas(c, scene);
pickCanvas.setMode(PickTool.GEOMETRY);
//pickCanvas.setTolerance(4.0f);
// 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 mouseClicked(MouseEvent e)
{
System.out.print("@(" + e.getX() + ", " + e.getY() + "): ");
pickCanvas.setShapeLocation(e);
PickResult results = pickCanvas.pickClosest();
if(results != null)
{
System.out.println("We got something!");
}
else
System.out.println("Found nothing :(");
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
//
// The following allows HelloUniverse to be run as an application
// as well as an applet
//
public static void main(String[] args) {
new MainFrame(new test(), 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".