package ptolemy.domains.gro.lib; import javax.media.opengl.GL; import ptolemy.actor.TypedIOPort; import ptolemy.actor.gui.ColorAttribute; import ptolemy.data.ArrayToken; import ptolemy.data.DoubleToken; import ptolemy.data.expr.Parameter; import ptolemy.data.type.BaseType; import ptolemy.domains.gro.kernel.GROActor; import ptolemy.domains.gro.kernel.GRODirector; import ptolemy.kernel.CompositeEntity; import ptolemy.kernel.util.IllegalActionException; import ptolemy.kernel.util.NameDuplicationException; public class Point3D extends GROActor { public Point3D(CompositeEntity container, String name) throws IllegalActionException, NameDuplicationException { super(container, name); GLPipelineObject = new TypedIOPort(this, "GLPipelineObject"); GLPipelineObject.setOutput(true); radius = new Parameter(this, "radius"); radius.setExpression("10.0"); rgbColor = new ColorAttribute(this, "rgbColor"); rgbColor.setExpression("{1.0, 1.0, 1.0}"); origin = new Parameter(this, "origin"); origin.setExpression("{0.0, 0.0, 0.0}"); GLPipelineObject.setTypeEquals(BaseType.OBJECT); } public Parameter radius; /** The red, green, blue, and alpha components of the line. This * parameter must contain an array of double values. The default * value is {0.0, 0.0, 1.0}, corresponding to opaque black. */ public ColorAttribute rgbColor; /** The origin coordinate of the point. */ public Parameter origin; public TypedIOPort GLPipelineObject; public void fire() throws IllegalActionException { if (_debugging) { _debug("Called fire()"); } ArrayToken originToken = ((ArrayToken) origin.getToken()); ArrayToken rgbColorValue = ((ArrayToken) rgbColor.getToken()); DoubleToken radiusValue = (DoubleToken) radius.getToken(); GL gl = ((GRODirector) getDirector()).getGL(); gl.glPointSize((float) radiusValue.doubleValue()); gl.glBegin(GL.GL_POINTS); gl.glColor3d( ((DoubleToken) rgbColorValue.getElement(0)).doubleValue(), ((DoubleToken) rgbColorValue.getElement(1)).doubleValue(), ((DoubleToken) rgbColorValue.getElement(2)).doubleValue()); // origin of the line gl.glVertex3d( ((DoubleToken) originToken.getElement(0)).doubleValue(), ((DoubleToken) originToken.getElement(1)).doubleValue(), ((DoubleToken) originToken.getElement(2)).doubleValue()); gl.glEnd( ); } }