package hep.graphics.j3d; // FreeHEP import org.freehep.j3d.Trapezoid; import org.freehep.j3d.OutlinedShape3D; // AWT import java.applet.Applet; import java.awt.BorderLayout; import java.awt.GraphicsConfiguration; // Java3D import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.SimpleUniverse; import javax.media.j3d.Canvas3D; import javax.media.j3d.Shape3D; import javax.media.j3d.Appearance; import javax.media.j3d.BranchGroup; import javax.media.j3d.TransformGroup; import javax.media.j3d.Transform3D; import javax.media.j3d.BoundingSphere; import javax.media.j3d.Alpha; import javax.media.j3d.RotationInterpolator; import javax.vecmath.Point3d; import javax.vecmath.Color3f; /** Test for <code>hep.graphics.j3d</code> shapes. * @version 1.0.0 * @author <a href="mailto:Julius.Hrivnac@cern.ch">J.Hrivnac</a> */ // TBD: refactor with org.freehep.j3d.Test public class Test extends Applet { public BranchGroup createSceneGraph(String arg) { BranchGroup objRoot = new BranchGroup(); TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objTrans); Color3f color = new Color3f(1f, 0f, 0f); Color3f color0 = new Color3f(1f, 1f, 1f); Shape3D shape = testShape(arg); if (shape == null) { System.out.println("I don't know how to create " + arg); System.exit(1); } Shape3D shape0 = new Trapezoid(0.03, 0.10, 0.06, 0.15, 0.20, new Appearance()); Shape3D s3d = OutlinedShape3D.create(shape, color); Shape3D s3d0 = OutlinedShape3D.create(shape0, color0); objTrans.addChild(s3d); objTrans.addChild(s3d0); Transform3D yAxis = new Transform3D(); Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, 4000, 0, 0, 0, 0, 0); RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI*2.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); rotator.setSchedulingBounds(bounds); objTrans.addChild(rotator); objRoot.compile(); return objRoot; } protected Shape3D testShape(String name) { if (name.equals("Helix")) { return(new Helix(1, // charge 1, // eta 30, // phi 0.2, // pt 30, // v_phi 0.1, // v_rho 0.1, // v_z 2, // mField 100, // granularity new Appearance())); } else { return(null); } } public Test(String arg) { setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D c = new Canvas3D(config); add("Center", c); BranchGroup scene = createSceneGraph(arg); SimpleUniverse u = new SimpleUniverse(c); u.getViewingPlatform().setNominalViewingTransform(); u.addBranchGraph(scene); } public static void main(String[] args) { if (args.length != 1) { System.out.println("java hep.graphics.j3d.Test [Helix]"); System.exit(1); } else { new MainFrame(new Test(args[0]), 512, 512); } } }