Have you set the capabilities to allow deleting these branchGroups?

bg1.setCapability(BranchGroup.ALLOW_DETACH);
bg2.setCapability(BranchGroup.ALLOW_DETACH);

Im not sure, but you may also need to set:
rootTG.setCapability(Group.ALLOW_CHILDREN_WRITE);

Lisa

dao wrote:

> Hi, all
> I have a Java3D Scene graph like this
>
>                                         Locale
>                                             |
>                                             |
>                                         rootBG
>                                             |
>                                             |
>                                         rootTG
>                                         /            \
>                                       /                \
>                Behavior1--- BG1             BG2 ---- Behavior2
>                            \       /                        \      /
>                              \   /                            \ /
>                             TG1                        TG2
>                                |                               |
>                         Shape3D1             Shape3D2
>
> The goal is to delete the Shape3D2 from  a PickResult object  generated
> by a PickCanvas.
> For this purpose I have extended  the  Behavior class.
> Then I recover the SceneGraphPath from PickResult and I get  the
> terminal node ?
> When this one is Shape3D, I search the corresponding  BG here (BG1 or
> BG2) then  remove it from the local.
> The strange think occurs is that after deleting, the Shape3D remaining
> can't be delete and  does not
> reponse any more to my  behavior class. This is  two  classes used for
> deleting.
>
> import java.io.*;
> import java.awt.*;
> import java.awt.event.*;
> import java.util.*;
> import javax.media.j3d.*;
> import javax.vecmath.*;
> import javax.swing.*;
> import com.sun.j3d.utils.behaviors.mouse.*;
> import com.sun.j3d.utils.picking.*;
> import com.sun.j3d.utils.picking.behaviors.*;
> import com.sun.j3d.utils.geometry.*;
> import javax.media.j3d.*;
>
> /** This class is made for use with the class Tools. It is used to link GUI
>  *  components such as buttons and menu items to methods of the class
> Tools.
>  */
> public class ToolsBehavior extends Behavior
> { float size=0.5f;
>   private static double sphereDistance = 0.1;
>   PickCanvas pickCanvas;
>   PickResult[] pickResult = null;
>   BranchGroup rootBranchGroup;
>   javax.media.j3d.Locale locale;
>   public SceneCreator creator = null;
>   boolean intersectOrNot = false;
>   PickResult[] intersectPickResult = null;
>   private SceneGraphPath path;
>   private Node node;
>   private PickIntersection pi;
>   private Point3d eyePos;
>   private String doAction = "Delete";
>
>   /** Constructs a ToolsBehavior object by giving it references to
> Canvas3D,
>    *  Locale, BranchGroup.
>    *
>    *  @param canvas3D The Canvas3D object used to interact with the scene.
>    *  @param locale The Locale object of the scene.
>    *  @param branchGroup The root of the objects to handle.
>    */
>  public ToolsBehavior(Canvas3D canvas3D, javax.media.j3d.Locale locale,
> BranchGroup branchGroup,  SceneCreator sc)
>   {
>     rootBranchGroup = branchGroup;
>     this.locale = locale;
>     creator = sc;
>     pickCanvas = new PickCanvas(canvas3D, branchGroup);
>     pickCanvas.setTolerance(2.0f);
>     pickCanvas.setMode(PickTool.GEOMETRY_INTERSECT_INFO);
>   }
>
>   /** Initialising method.
>    *
>    */
>   public void initialize()
>   { wakeupOn (new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED));
>   }
>
>   /** Process Stimulus meothod.
>    *
>    */
>   public void processStimulus (Enumeration criteria)
>   { WakeupCriterion wakeup;
>     AWTEvent[] event;
>     int eventId;
>     while (criteria.hasMoreElements())
>     { wakeup = (WakeupCriterion) criteria.nextElement();
>       if (wakeup instanceof WakeupOnAWTEvent)
>       { event = ((WakeupOnAWTEvent)wakeup).getAWTEvent();
>     for (int i= event.length; i-- > 0; )
>         { eventId = event[i].getID();
>       if (eventId == MouseEvent.MOUSE_PRESSED){
>             if (((MouseEvent)event[i]).getModifiers() ==
> MouseEvent.BUTTON3_MASK)
>             {
>               int x = ((MouseEvent)event[i]).getX();
>               int y = ((MouseEvent)event[i]).getY();
>               pickCanvas.setShapeLocation(x, y);
>              eyePos = pickCanvas.getStartPosition ();
>              pickResult = pickCanvas.pickAllSorted();
>              if  (pickResult != null)
>               System.out.println("Picked True ");
>               if (doAction.equals("Delete") &&( pickResult != null))
> Tools.deleteObject(pickResult);
>             }
>         }
>      } //endfor
>    }
>  }//endwhile
> wakeupOn (new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED));
> }
>
> I put to BG1 and BG2  an instance of  toolBehavior.
>
> public class Tools {
> ..
> .....
>
> /** Method that deletes the object picked by user. (Class Tools)
>    *
>    * @param pickResult array of  PickResult objects according to the
> user selection.
>    */
>   public static void deleteObject(PickResult[]  pickResult){
>     if  (pickResult != null){   if (pickResult != null){ // Check if the
> ray intersects an object.
>        toolPATH = pickResult.getSceneGraphPath();
>        toolNODE = toolPATH.getObject();
>        if  ( toolNODE instanceof Shape3D ) {
>
> 
>SceneCreator.l.removeBranchGraph((BranchGroup)pickResult.getNode(pickResult.BRANCH_GROUP));
>
>       }
>    }
> }
>
> }//End Tools
>
> SceneCreator is a class that  creates Virtual universe, locale, rootBG
> and rootTG and view  branchGroup.
>
> Is anybody can give me the best way to delete Shape3D1 or Shape3D2 or
> the errors in my code.
>
> Thanks for all.
>
> ===========================================================================
> 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