// // PointJ3D.java // /* VisAD system for interactive analysis and visualization of numerical data. Copyright (C) 1996 - 2017 Bill Hibbard, Curtis Rueden, Tom Rink, Dave Glowacki, Steve Emmerson, Tom Whittaker, Don Murray, and Tommy Jasmin. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ package visad.bom.annotations; import visad.DisplayImpl; import visad.java3d.DisplayImplJ3D; /** * Meant to encapsulate information representing a Point which is * going to be rendered on a VisAD display without being * subject to the usual VisAD transformations. Thus the label should * stick in Screen Coordinates. */ public class PointJ3D implements ScreenAnnotation { private int x1, y1; // point in screen coordinates private float[] colour; private double zValue; private double thickness; // for point size /** * Simple constructor which makes a point at (0, 0) * coloured white. More meaningful values can be set * after construction. */ public PointJ3D() { this(0, 0, new float[] {1,1,1}, 0, 1.0); } /** * Constructs a PointJ3D from specified values in screen coordinates. * * @param x1 x screen coordinate of the point. * @param y1 y screen coordinate of the point. * @param colour red green blue triple; each value in [0.0, 1.0]. * @param zValue Virtual world value; larger z is in front. * @param thickness used for the size of the point. */ public PointJ3D(int x1, int y1, float[] colour, double zValue, double thickness) { this.x1 = x1; this.y1 = y1; this.colour = colour; this.zValue = zValue; this.thickness = thickness; } /** * Constructs a PointJ3D from specified values in screen coordinates. * * @param points 2 rows with each column containing a point * in screen coordinates; requires 1 point (column). * @param colour red green blue triple; each value in [0.0, 1.0]. * @param zValue Virtual world value; larger z is in front. * @param thickness used for the size of the point. */ public PointJ3D(int[][] points, float[] colour, double zValue, double thickness) { this(points[0][0], points[1][0], colour, zValue, thickness); } /** * Set coordinates for the PointJ3D. * * @param x1 x screen coordinate of the point. * @param y1 y screen coordinate of the point. */ public void setPointJ3Ds(int x1, int y1) { this.x1 = x1; this.y1 = y1; } /** * Set coordinates for the PointJ3D. * * @param points 2 rows with each column containing a point * in screen coordinates; requires 1 point (column). */ public void setPointJ3Ds(int[][] points) { setPointJ3Ds(points[0][0], points[1][0]); } /** * Set colour for the PointJ3D. * * @param colour red green blue triple; each value in [0.0, 1.0]. */ public void setColour(float[] colour) { this.colour = colour; } /** * Set Z position for the PointJ3D. * * @param zValue Virtual world value; larger z is in front. */ public void setZValue(double zValue) { this.zValue = zValue; } /** * Make the PointJ3D into a {@link javax.media.j3d.Shape3D}. * * @param display the VisAD display for this Point. * * @return the Triangle description as a Shape3D object. */ public Object toDrawable(DisplayImpl display) { return ScreenAnnotatorUtils.makePointShape3D( (DisplayImplJ3D)display, x1, y1, colour, zValue, thickness); } } // class PointJ3D