samer@0: /** samer@0: ViewGroup.java samer@0: samer@0: A View branch group containing a ViewPlatform samer@0: and associated Views, Canvas3Ds and Windows to samer@0: hold the canvases. Can be added dynamically samer@0: to a live universe. samer@0: samer@0: Parameters: samer@0: initial placement samer@0: autostart canvas? samer@0: autostart view? samer@0: keyboard navigator? samer@0: various view policies samer@0: samer@0: Requirements: samer@0: must be placable (hence TransformGroup and ViewPlatform) samer@0: must be Node so addable to universe samer@0: renderable: samer@0: view.renderOnce() samer@0: view.startView() samer@0: view.stopView() samer@0: canvas.startRenderer() samer@0: canvas.stopRenderer() samer@0: ... ? samer@0: disposable: cleans up properly samer@0: must have accessible View and Canvas objects samer@0: must manage multiple canvases for stereo samer@0: samer@0: */ samer@0: package samer.j3d; samer@0: samer@0: import samer.core.*; samer@0: import javax.media.j3d.*; samer@0: import javax.vecmath.*; samer@0: samer@0: samer@0: public class ViewGroup extends BranchGroup samer@0: { samer@0: TransformGroup VT; samer@0: ViewPlatform VP; samer@0: ViewBase V; samer@0: samer@0: public void lookFrom(Point3d eye, Vector3d up) samer@0: { samer@0: // view platform placement samer@0: Transform3D t=new Transform3D(); samer@0: t.lookAt(eye, new Point3d(0,0,0), up); samer@0: t.invert(); samer@0: VT.setTransform(t); samer@0: } samer@0: samer@0: public ViewGroup() samer@0: { samer@0: VT=new TransformGroup(); samer@0: VP=new ViewPlatform(); samer@0: lookFrom( samer@0: new Point3d(X.doubleArray(Shell.getString("lookfrom","(0,1,8)"),3)), samer@0: new Vector3d(0,1,0) samer@0: ); samer@0: VT.addChild(VP); samer@0: addChild(VT); samer@0: samer@0: // addChild(new FPS(200)); samer@0: // setCapability(ALLOW_DETACH); samer@0: // setCapability(ALLOW_CHILDREN_WRITE); samer@0: } samer@0: samer@0: public void attachView(View v) { v.attachViewPlatform(VP); } samer@0: }