package test01;

import java.util.*;

import javax.media.j3d.*;
import javax.vecmath.*;
import javax.swing.*;

import com.sun.j3d.utils.universe.*;

public class test01
{
  BranchGroup scene;
  BranchGroup BG2;
  Switch SW;

  static final int MAX_NUM_BITS = 64;

  public test01()
  {
    JFrame frame = new JFrame("Test01");

    // SimpleUniverse is a Convenience Utility class
    Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
    SimpleUniverse simpleU = new SimpleUniverse(canvas3D);


    // create all the geometry

    scene = createSceneGraph(simpleU);
    simpleU.addBranchGraph(scene);

    frame.getContentPane().add("Center", canvas3D);
    frame.setVisible(true);

    modify();

  }

  public static void main(String[] args)
  {
    new test01();
  }



 public BranchGroup createSceneGraph(SimpleUniverse SU)
 {
   // Create the root of the branch graph
   BranchGroup objRoot = new BranchGroup();
   objRoot.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
   objRoot.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
   objRoot.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
   objRoot.setCapability(BranchGroup.ALLOW_DETACH);


   BG2 = new BranchGroup();
   BG2.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
   BG2.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
   BG2.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
   BG2.setCapability(BranchGroup.ALLOW_DETACH);

   SW = new Switch();
   SW.setCapability(Switch.ALLOW_CHILDREN_READ);
   SW.setCapability(Switch.ALLOW_CHILDREN_EXTEND);
   SW.setCapability(Switch.ALLOW_CHILDREN_WRITE);
   SW.setCapability(Switch.ALLOW_SWITCH_READ);
   SW.setCapability(Switch.ALLOW_SWITCH_WRITE);
   SW.setCapability(Switch.CHILD_MASK);
   BitSet BS = new BitSet(MAX_NUM_BITS);
   BS.set(0);
   SW.setChildMask(BS);

   BG2.addChild(SW);
   objRoot.addChild(BG2);

   return objRoot;

 } // end of createSceneGraph method

 void  modify()
 {
System.out.println("modify: cp 1");
System.out.println("scene is live: "+scene.isLive());

    BG2.detach();

    SharedGroup SG = new SharedGroup();
    SG.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
    SG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
    SG.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
    SG.setCapability(BranchGroup.ALLOW_DETACH);

    Link Lnk = new Link();
    Lnk.setCapability(Link.ALLOW_SHARED_GROUP_READ);
    Lnk.setCapability(Link.ALLOW_SHARED_GROUP_WRITE);

//    Lnk.setSharedGroup(SG);

    SW.addChild(Lnk);

    scene.addChild(BG2);

System.out.println("modify: cp 2");

 } // end modify


}