content: package edu.stanford.rsl.conrad.reconstruction.voi;
  
  import java.io.Serializable;
  
  import edu.stanford.rsl.conrad.io.ConfigFileParser;
  
  /**
   * An abstract description of an arbitrary volume-of-interest (VOI).
   * @author akmaier
   *
   */
  public abstract class VolumeOfInterest implements ConfigFileParser, Serializable {
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = -9014453765525455074L;
  	boolean debug = false;
  
  	/**
  	 * Tests whether a given coordinate in world coordinates is within the VOI.
  	 * @param x world coordinate x
  	 * @param y world coordinate y
  	 * @param z world coordinate z
  	 * @return true, if the coordinate is insider the VOI.
  	 */
  	public abstract boolean contains (double x, double y, double z);
  
  	/**
  	 * Reports a list of all known implementations of VolumeOfInterest.
  	 * @return the list of implementations.
  	 */
  	public static VolumeOfInterest [] getVolumes(){
  		VolumeOfInterest [] volumes = {new PolygonBasedVolumeOfInterest(), new CylinderBasedVolumeOfInterest()};
  		return volumes;
  	}
  
  	/**
  	 * Constructor from filename
  	 * @param filename the filename
  	 * @return the volume of interest.
  	 */
  	public static VolumeOfInterest openAsVolume(String filename) {
  		VolumeOfInterest [] volumes = getVolumes();
  		VolumeOfInterest revan = null;
  		for (int i = 0; i < volumes.length; i++){
  			revan = volumes[i];
  			try {
  				revan.readConfigFile(filename);
  				break;
  			} catch (Exception e) {
  				System.out.println(e.getLocalizedMessage());
  				revan = null;
  				//e.printStackTrace();
  			}
  		}
  		return revan;
  	}
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */