package org.freehep.j3d;
// 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>org.freehep.j3d</code> shapes.
* @version 1.0.1
* @author <a href="mailto:Julius.Hrivnac@cern.ch">J.Hrivnac</a> */
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("Trapezoid")) {
return(new Trapezoid(0.1, // xmu
0.2, // xmd
0.3, // xpu
0.4, // xpd
0.5, // ym
0.6, // yp
1.0, // z
10, // inclXZ
20, // inclYm
30, // declYm
40, // declYp
new Appearance()));
}
else if (name.equals("ConeSegment")) {
return(new ConeSegment(0.1, // rminm
0.2, // rminp
0.3, // rmaxm
0.6, // rmaxp
0.6, // l
20, // phimin
120, // phimax
10, // granularity
new Appearance()));
}
else if (name.equals("SphereSegment")) {
return(new SphereSegment(0.4, // rmin
0.8, // rmax
0, // phimin
120, // phimax
-40, // thetamin
70, // thetamax
10, // granularity
new Appearance()));
}
else if (name.equals("PolyConeSegment")) {
double[] rmins = {0.1, 0.2, 0.4};
double[] rmaxs = {0.5, 0.6, 0.8};
double[] zs = {-0.5, 0.0, 0.5};
return(new PolyConeSegment(rmins,
rmaxs,
zs,
20, // phimin
120, // phimax
10, // granularity
new Appearance()));
}
else if (name.equals("PolyGoneSegment")) {
double[] rmins = {0.1, 0.2, 0.4};
double[] rmaxs = {0.5, 0.6, 0.8};
double[] zs = {-0.5, 0.0, 0.5};
return(new PolyGoneSegment(rmins,
rmaxs,
zs,
20, // phimin
230, // phimax
10, // sides
new Appearance()));
}
else if (name.equals("TorusSegment")) {
return(new TorusSegment(0.1, // rmin
0.3, // rmax
0.5, // rtor
20, // phimin
250, // phimax
20, // granularity
new Appearance()));
}
else if (name.equals("PolyLine")) {
Point3d[] points = {new Point3d(0.0, 0.1, -0.1),
new Point3d(0.1, -0.1, 0.1),
new Point3d(0.2, 0.1, -0.1),
new Point3d(0.3, -0.1, 0.1),
new Point3d(0.4, 0.2, -0.1),
new Point3d(0.5, -0.4, 0.1),
new Point3d(0.6, 0.8, -0.1),
new Point3d(0.7, -0.8, 0.2),
new Point3d(0.8, 0.8, -0.4),
new Point3d(0.9, -0.8, 0.8)};
return(new PolyLine(points, // points
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 org.freehep.j3d.Test [Trapezoid|ConeSegment|SphereSegment|PolyConeSegment|PolyGoneSegment|TorusSegment|PolyLine]");
System.exit(1);
}
else {
new MainFrame(new Test(args[0]), 512, 512);
}
}
}