//
// ImageJ3D.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 java.awt.Image;
import java.awt.Toolkit;

import visad.DisplayImpl;
import visad.VisADException;

import visad.java3d.DisplayImplJ3D;

import visad.util.ImageHelper;

/**
 *  Meant to encapsulate information representing an Image which is
 *  going to be rendered on a VisAD display without being
 *  subject to the usual VisAD transformations. Thus the Image should
 *  stick in Screen Coordinates.
 */
public class ImageJ3D implements ScreenAnnotation
{
  /** Image top left positioned on x, y */
  public static final int TOP_LEFT = 20;

  /** Image top right positioned on x, y */
  public static final int TOP_RIGHT = 21;

  /** Image bottom right positioned on x, y */
  public static final int BOTTOM_RIGHT = 22;

  /** Image bottom left positioned on x, y */
  public static final int BOTTOM_LEFT = 23;

  /** Image centre positioned on x, y */
  public static final int CENTER = 24;
  
  private Image image;
  private int position;
  private int x, y;    // location in screen coordinates
  private int width = -1, height = -1; // of the image, in pixels
  private double zValue;
  private double scaleFactor;      // for point size

  /** 
   *  Constructs a ImageJ3D from specified values in screen coordinates.
   *
   *  @param filename  of a valid GIF, JPEG or PNG file.
   *  @param position  how to place the image relative to (x, y);
   *         one of Image.TOP_LEFT (default), Image.TOP_RIGHT,
   *         Image.BOTTOM_RIGHT, Image.BOTTOM_LEFT, Image.CENTER
   *  @param x  x screen coordinate of image location.
   *  @param y  y screen coordinate of image location.
   *  @param zValue  Virtual world value; larger z is in front.
   *  @param scaleFactor  scale factor for image magnification; greater
   *         than 0.0.
   *
   *  @throws VisADException if the Image is bad.
   */
  public ImageJ3D(String filename, int position, int x, int y,
    double zValue, double scaleFactor)
        throws VisADException
  {
    this(Toolkit.getDefaultToolkit().getImage(filename),
      position, x, y, zValue, scaleFactor);
  }

  /** 
   *  Constructs a ImageJ3D from specified values in screen coordinates.
   *
   *  @param image  base java.awt.Image object to represent.
   *  @param position  how to place the image relative to (x, y);
   *         one of Image.TOP_LEFT (default), Image.TOP_RIGHT,
   *         Image.BOTTOM_RIGHT, Image.BOTTOM_LEFT, Image.CENTER
   *  @param x  x screen coordinate of image location.
   *  @param y  y screen coordinate of image location.
   *  @param zValue  Virtual world value; larger z is in front.
   *  @param scaleFactor  scale factor for image magnification; greater
   *         than 0.0.
   *
   *  @throws VisADException if the Image is bad.
   */
  public ImageJ3D(Image image, int position, int x, int y,
    double zValue, double scaleFactor)
        throws VisADException
  {
    this.position = position;
    this.x = x;
    this.y = y;
    this.zValue = zValue;
    this.scaleFactor = scaleFactor;
    setImage(image);
  }

  /**
   *  Set the Image for this object.
   *
   *  @param image  base java.awt.Image object to represent.
   *
   *  @throws VisADException if the Image is bad.
   */
  public void setImage(Image image)
        throws VisADException
  {
    this.image = image;
    // get the image width and height
    ImageHelper ih = new ImageHelper();
    do {
      if (width < 0) { width = image.getWidth(ih); }
      if (height < 0) { height = image.getHeight(ih); }
      if (ih.badImage || (width >=0 && height >= 0)) {
        break;
      }
      try {
        Thread.currentThread().sleep(100);
      } catch (InterruptedException e) {
        throw new VisADException("ImageJ3D: Interrupted!!");
      }
    } while (true);
    if (ih.badImage) {
      throw new VisADException("ImageJ3D: not an image");
    }
  }

  /**
   *  Set the relative position for this object.
   *
   *  @param position  how to place the image relative to (x, y);
   *         one of Image.TOP_LEFT (default), Image.TOP_RIGHT,
   *         Image.BOTTOM_RIGHT, Image.BOTTOM_LEFT, Image.CENTER
   */
  public void setPosition(int position)
  {
    this.position = position;
  }

  /**
   *  Set the amount to magnify the image.
   *
   *  @param scaleFactor  scale factor for image magnification; greater
   *         than 0.0.
   */
  public void setScaleFactor(double scaleFactor)
  {
    this.scaleFactor = scaleFactor;
  }

  /**
   *  Set coordinates for the ImageJ3D.
   *
   *  @param x  x screen coordinate of image location.
   *  @param y  y screen coordinate of image location.
   */
  public void setImageJ3Ds(int x, int y)
  {
    this.x = x;
    this.y = y;
  } 

  /**
   *  @param zValue  Virtual world value; larger z is in front.
   */
  public void setZValue(double zValue)
  {
    this.zValue = zValue;
  }

  /**
   *  @param display  the VisAD display for this Image.
   *
   *  @return the Image description as a Shape3D object.
   *
   *  @throws VisADException if there is a VisAD problem.
   */
  public Object toDrawable(DisplayImpl display)
        throws VisADException
  {
    return ScreenAnnotatorUtils.makeImageShape3D(
      (DisplayImplJ3D)display, image, position,
      x, y, width, height, zValue, scaleFactor);
  }
} // class ImageJ3D


 

Ads help maintain this website.