public void startWaitForUpdate() {
   updateBehavior.startWaitForUpdate();
 }
 public void waitForUpdate() {
   updateBehavior.waitForUpdateFinish();
 }
  BranchGroup createSceneGraph() {
    Color3f lColor1 = new Color3f(0.7f, 0.7f, 0.7f);
    Vector3f lDir1 = new Vector3f(0.0f, 0.0f, 1.0f);
    Color3f alColor = new Color3f(1.0f, 1.0f, 1.0f);

    // Create the root of the branch graph
    BranchGroup objRoot = new BranchGroup();

    // Create a transform group to scale the
    // whole scene
    TransformGroup scaleGroup = new TransformGroup();
    Transform3D scaleXform = new Transform3D();
    double scale = 1;
    scaleXform.setScale(scale);
    scaleGroup.setTransform(scaleXform);
    objRoot.addChild(scaleGroup);

    // Create the static ordered group
    OrderedGroup scaleOGroup = new OrderedGroup();
    scaleGroup.addChild(scaleOGroup);

    // Create the static annotation group
    staticBackAnnotationSwitch = new Switch();
    staticBackAnnotationSwitch.setCapability(Switch.ALLOW_SWITCH_WRITE);
    staticBackAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_READ);
    staticBackAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_WRITE);
    staticBackAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_EXTEND);
    scaleOGroup.addChild(staticBackAnnotationSwitch);

    // Create the static attachment group
    staticAttachGroup = new Group();
    staticAttachGroup.setCapability(Group.ALLOW_CHILDREN_READ);
    staticAttachGroup.setCapability(Group.ALLOW_CHILDREN_WRITE);
    staticAttachGroup.setCapability(Group.ALLOW_CHILDREN_EXTEND);
    scaleOGroup.addChild(staticAttachGroup);

    // Create a TG at the origin
    objectGroup = new TransformGroup();

    // Enable the TRANSFORM_WRITE capability
    // so that our behavior code
    // can modify it at runtime. Add it to the
    // root of the subgraph.
    //
    objectGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    objectGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
    scaleOGroup.addChild(objectGroup);

    // Create the static annotation group
    staticFrontAnnotationSwitch = new Switch();
    staticFrontAnnotationSwitch.setCapability(Switch.ALLOW_SWITCH_WRITE);
    staticFrontAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_READ);
    staticFrontAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_WRITE);
    staticFrontAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_EXTEND);
    scaleOGroup.addChild(staticFrontAnnotationSwitch);
    // added after objectGroup so it shows up
    // in front

    // Create the transform group node and
    // initialize it center the
    // object around the origin
    centerGroup = new TransformGroup();
    updateCenter(new Point3d(0.0, 0.0, 0.0), new Point3d(1.0, 1.0, 1.0));
    centerGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    objectGroup.addChild(centerGroup);

    // Set up the annotation/volume/annotation
    // sandwitch
    OrderedGroup centerOGroup = new OrderedGroup();
    centerGroup.addChild(centerOGroup);

    // create the back dynamic annotation
    // point
    dynamicBackAnnotationSwitch = new Switch(Switch.CHILD_ALL);
    dynamicBackAnnotationSwitch.setCapability(Switch.ALLOW_SWITCH_WRITE);
    dynamicBackAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_READ);
    dynamicBackAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_WRITE);
    dynamicBackAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_EXTEND);
    centerOGroup.addChild(dynamicBackAnnotationSwitch);

    // create the dynamic attachment point
    dynamicAttachGroup = new Group();
    dynamicAttachGroup.setCapability(Group.ALLOW_CHILDREN_READ);
    dynamicAttachGroup.setCapability(Group.ALLOW_CHILDREN_WRITE);
    dynamicAttachGroup.setCapability(Group.ALLOW_CHILDREN_EXTEND);
    centerOGroup.addChild(dynamicAttachGroup);

    // create the front dynamic annotation
    // point
    dynamicFrontAnnotationSwitch = new Switch(Switch.CHILD_ALL);
    dynamicFrontAnnotationSwitch.setCapability(Switch.ALLOW_SWITCH_WRITE);
    dynamicFrontAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_READ);
    dynamicFrontAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_WRITE);
    dynamicFrontAnnotationSwitch.setCapability(Group.ALLOW_CHILDREN_EXTEND);
    centerOGroup.addChild(dynamicFrontAnnotationSwitch);

    // Create the annotations
    Annotations annotations = new Annotations(view, context, volume);
    annotations.attachBack(dynamicBackAnnotationSwitch, staticBackAnnotationSwitch);
    annotations.attach(dynamicFrontAnnotationSwitch, staticFrontAnnotationSwitch);

    coordSwitch = new Switch(Switch.CHILD_ALL);
    coordSwitch.setCapability(Switch.ALLOW_SWITCH_WRITE);
    coordSwitch.addChild(new CoordSys(0.2, new Vector3d(-0.1, -0.1, -0.1)));
    centerGroup.addChild(coordSwitch);

    BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 10000000.0);

    FirstFramesBehavior ff = new FirstFramesBehavior(this);
    ff.setSchedulingBounds(bounds);
    objRoot.addChild(ff);

    updateBehavior = new UpdateBehavior();
    updateBehavior.setSchedulingBounds(bounds);
    objRoot.addChild(updateBehavior);

    // ExitKeyBehavior eb = new
    // ExitKeyBehavior();
    // eb.setSchedulingBounds(bounds);
    // objRoot.addChild(eb);

    BranchGroup trueRoot = new BranchGroup();
    TransformGroup trueTransform = new TransformGroup();

    trueTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    trueTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);

    trueRoot.addChild(trueTransform);
    trueTransform.addChild(objRoot);

    // MouseTranslate mt = new
    // MouseTranslate();
    // mt.setupCallback(this);
    // mt.setTransformGroup(trueTransform);
    // mt.setSchedulingBounds(bounds);
    // trueRoot.addChild(mt);

    MouseZoom mz = new MouseZoom();
    mz.setupCallback(this);
    mz.setTransformGroup(trueTransform);
    mz.setSchedulingBounds(bounds);
    trueRoot.addChild(mz);

    MouseRotate mr = new MouseRotate();
    mr.setupCallback(this);
    mr.setTransformGroup(trueTransform);
    mr.setSchedulingBounds(bounds);
    mr.setFactor(0.007);
    trueRoot.addChild(mr);

    // trueTransform.addChild(objRoot);
    // trueRoot.addChild(trueTransform);
    return trueRoot;
  }
 void update() {
   updateBehavior.postId(POST_AWT_CHANGE);
 }