package mocap.figure; import java.awt.Color; import javax.media.j3d.Appearance; import javax.media.j3d.ColoringAttributes; import javax.media.j3d.Geometry; import javax.media.j3d.LineStripArray; import javax.media.j3d.Material; import javax.media.j3d.Shape3D; import javax.media.j3d.TransparencyAttributes; import javax.vecmath.Color3f; import javax.vecmath.Point3f; import com.sun.j3d.utils.geometry.Primitive; /** * Create a Circle for the 3d scene * * @author Quan * */ public class Circle extends Primitive { private Shape3D _shape3DForm; private Appearance _appearance; public Circle(float radius, int divisions, Color color) { super(); _appearance = initAppearance(color); _shape3DForm = new Shape3D(createCircleGeometry(radius, divisions), _appearance); this.addChild(_shape3DForm); } private Appearance initAppearance(Color color) { Material materialStandard = new Material(new Color3f(color), new Color3f(color), new Color3f(color), new Color3f(0.7f, 0.7f, 0.7f), 10.0f); Appearance appearance = new Appearance(); TransparencyAttributes attrTransparency = new TransparencyAttributes( TransparencyAttributes.NICEST, 0.2f); appearance.setTransparencyAttributes(attrTransparency); appearance.setMaterial(materialStandard); ColoringAttributes ca = new ColoringAttributes(new Color3f(color), ColoringAttributes.FASTEST); appearance.setColoringAttributes(ca); return appearance; } private Point3f[] createCircleCoords(float radius, int divisions) { Point3f[] coords = new Point3f[divisions]; double dAngle = 0; float x, z; for (int i = 0; i < divisions; dAngle = 2.0 * Math.PI / (divisions - 1) * ++i) { x = (float) (radius * Math.sin(dAngle)); z = (float) (radius * Math.cos(dAngle)); coords[i] = new Point3f(x, 0f, z); } return coords; } /** * Generates the geometry of a circle * * @param radius * @param divisions * @return */ private Geometry createCircleGeometry(float radius, int divisions) { int[] stripCounts = {divisions}; LineStripArray lsArray = new LineStripArray(divisions, LineStripArray.COORDINATES, stripCounts); lsArray.setCoordinates(0, createCircleCoords(radius, divisions)); return lsArray; } // @Override public Appearance getAppearance(int arg0) { return _appearance; // return null; } @Override public Shape3D getShape(int arg0) { return _shape3DForm; } @Override public void setAppearance(Appearance appearance) { _appearance = appearance; _shape3DForm.setAppearance(_appearance); } }