samer@0: /* samer@0: */ samer@0: package samer.j3d; samer@0: samer@0: import samer.core.*; samer@0: import samer.maths.*; samer@0: import samer.tools.*; samer@0: import java.io.*; samer@0: import java.awt.event.*; samer@0: import javax.media.j3d.*; samer@0: import javax.vecmath.*; samer@0: samer@0: public class J3DViewer extends Util samer@0: { samer@0: Shape3D shape; samer@0: samer@0: public J3DViewer(Root root, Matrix P, VVector A) throws Exception samer@0: { samer@0: if (P==null) { samer@0: Shell.print("creating PointsMatrix"); samer@0: P=new Matrix("PointsMatrix",A.size(),4); samer@0: new MatrixAgent(P).execute("load",Shell.env()); samer@0: } samer@0: // create scene samer@0: { samer@0: int viewerType=Shell.getInt("viewerType",0); samer@0: Shape3D shape; samer@0: samer@0: switch (viewerType) { samer@0: case 1: samer@0: shape=new Shape3D(new MatrixPointArrayAlpha(P,A), transparent(0,points())); samer@0: break; samer@0: case 2: samer@0: shape=new Shape3D(new MatrixPoints4D(P,A), transparent(0,points())); samer@0: break; samer@0: case 3: samer@0: Geometry geom=new PatchArrayAlpha(P,A); samer@0: shape=new Shape3D(geom, rndr(flat(transparent(0,patch())),false)); samer@0: break; samer@0: default: samer@0: shape=new Shape3D(new MatrixPointArray(P,A), points()); samer@0: addBackground(root,new Background(new Color3f(0.26f,0.23f,0.35f))); samer@0: break; samer@0: } samer@0: } samer@0: } samer@0: samer@0: public javax.media.j3d.Node getShape() { return rotaterise(shape); } samer@0: samer@0: private Appearance rndr(Appearance a, boolean ignore) samer@0: { samer@0: RenderingAttributes ra=new RenderingAttributes(); samer@0: ra.setDepthBufferEnable(false); samer@0: ra.setIgnoreVertexColors(ignore); samer@0: a.setRenderingAttributes(ra); samer@0: return a; samer@0: } samer@0: samer@0: samer@0: private static Group rotaterise(javax.media.j3d.Node n) samer@0: { samer@0: TransformGroup tg = new TransformGroup(); samer@0: TransformGroup tg2=new TransformGroup(); samer@0: samer@0: mouseRotate(tg); samer@0: mouseTranslate(tg); samer@0: mouseZoom(tg); samer@0: addRotator(tg2,Shell.getInt("rotation.period",10000)); samer@0: tg.addChild(n); samer@0: tg2.addChild(tg); samer@0: return tg2; samer@0: } samer@0: }