package hep.graphics.j3d.geant4;
// 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.geant4</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("G4Box")) {
return(new G4Box("G4Box",
0.1, // pX
0.2, // pY
0.3)); // pZ
}
else if (name.equals("G4Para")) {
return(new G4Para("G4Para",
0.1, // pDx
0.2, // pDy
0.3, // pDz
0.5, // pAlpha
0.5, // pTheta
0.5)); // pPhi
}
else if (name.equals("G4Trap")) {
return(new G4Trap("G4Trap",
0.5, // pDz
0.5, // pTheta
0.5, // pPhi
0.2, // pDy1
0.1, // pDx1
0.1, // pDx2
0.5, // pAlp1
0.3, // pDy2
0.2, // pDx3
0.2, // pDx4
0.3)); // pAlp2
}
else if (name.equals("G4Trd")) {
return(new G4Trd("G4Trd",
0.1, // dx1
0.3, // dx2
0.2, // dy1
0.4, // dy2
0.6)); // dz
}
else if (name.equals("G4Cons")) {
return(new G4Cons("G4Cons",
0.1, // pRmin1
0.2, // pRmin2
0.3, // pRmax1
0.4, // pRmax2
0.3, // pDz
0.4, // pSPhi
1.2)); // pDPhi
}
else if (name.equals("G4Tubs")) {
return(new G4Tubs("G4Tubs",
0.1, // pRMin
0.3, // pRMax
0.3, // pDz
0.4, // pSPhi
1.2)); // pDPhi
}
else if (name.equals("G4Sphere")) {
return(new G4Sphere("G4Sphere",
0.4, // rmin
0.8, // rmax
0, // phimin
2.0, // phimax
-0.4, // thetamin
1.3)); // thetamax
}
else if (name.equals("G4Polycone")) {
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 G4Polycone("G4Polycone",
0.2, // phiStart
1.2, // phiTotal
3, // numZPlanes
zs, // zPlane
rmins, // rInner
rmaxs)); // rOuter
}
else if (name.equals("G4Polyhedra")) {
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 G4Polyhedra("G4Polyhedra",
0.2, // phiStart
2.1, // phiTotal
10, // numSides
3, // numZPlanes
zs, // zPlane
rmins, // rInner
rmaxs)); // rOuter
}
else if (name.equals("G4Torus")) {
return(new G4Torus("G4Torus",
0.1, // pRmin
0.3, // pRmax
0.5, // pRtor
0.2, // pSPhi
1.5)); // pDPhi
}
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.geant4.Test G4[Box|Trd|Trap|Para|Cons|Tubs|Polycone|Polyhedra|Sphere|Torus]");
System.exit(1);
}
else {
new MainFrame(new Test(args[0]), 512, 512);
}
}
}