This error should result from the statement
       obj.setCapability(Shape3D.ALLOW_GEOMETRY_READ);
 
I think you should set the capability when constructing the shape object. please send me the relevant codes, I can test it. Thanks.
 
Rgds,
 
Cheng Chang Dong
 
 
 
 
----- Original Message -----
Sent: Thursday, January 31, 2002 12:37 AM
Subject: [JAVA3D] exception while picking

Hi,
I use the following code to perform a pick, but it returns "RestrictedAccessException: Cannot modify capability bits on a live scene or compiled object"
What kind of setting do I need to avoid this?
 
many thanks in advance
OLivier.
 
                   scene.setCapability(Node.ENABLE_PICK_REPORTING);
                    (...)
                    // build pick ray object from ray origin and direction        
                    PickRay ray = new PickRay(rayOrg, rayDir);
 
                    // throw the pick ray into the scene at all the leaf shape
                    // nodes under the pick root
                    SceneGraphPath paths[] = scene.pickAllSorted(ray);
 
                    if( paths != null) {
 
                            // shape target bounds were hit, check for real hits
                            for( int hitI= 0; hitI< paths.length; hitI++) {
                                System.out.println(" hit [" + hitI+ "]=" + paths[ hitI]);
 
                                // intersect pick ray with shape target geometry
                                Node shape = paths[ hitI].getObject();
                                double dist[] = {0.0};
                                Shape3D obj=( Shape3D) shape;
                               
                                obj.setCapability(Shape3D.ALLOW_GEOMETRY_READ);                //same problem when the capabilities are set directly in the BG scene
                                obj.getGeometry().setCapability(Geometry.ALLOW_INTERSECT);
                                
                                boolean isRealHit = obj.intersect(paths[ hitI], ray, dist);
 
                                if( isRealHit) {
                                    // compute hit point from hit distance and pick ray
                                    Point3d point = new Point3d();
                                    point.scaleAdd( dist[ 0], rayDir, rayOrg);
 
                                    System. out. println("real hit at " + point);
                                }
 
                            }
                    }
(most of this code comes from the java boutique web site)

Reply via email to