content: package edu.stanford.rsl.conrad.phantom;
  
  import edu.stanford.rsl.conrad.geometry.shapes.simple.Box;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.Cone;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.Cylinder;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.Ellipsoid;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.SimpleSurface;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.Sphere;
  import edu.stanford.rsl.conrad.geometry.transforms.Translation;
  import edu.stanford.rsl.conrad.physics.PhysicalObject;
  import edu.stanford.rsl.conrad.physics.materials.database.MaterialsDB;
  import edu.stanford.rsl.conrad.utils.CONRAD;
  
  /**
   * Phantom to test the projection and rendering of simple shapes
   * 
   * @author Martin Berger
   *
   */
  public class SimpleShapeTestPhantom extends AnalyticPhantom {
  
  
  
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = 2974017903994365873L;
  
  	public SimpleShapeTestPhantom() {
  	}
  	
  	public SimpleShapeTestPhantom(SimpleShapeTestPhantom phant){
  		buildPhantom();
  		setConfigured(true);
  	}
  
  	@Override
  	public String getBibtexCitation() {
  		return CONRAD.CONRADBibtex;
  	}
  
  	@Override
  	public String getMedlineCitation() {
  		return CONRAD.CONRADMedline;
  	}
  
  	@Override
  	public String getName() {
  		return "Simple Shape Test Phantom";
  	}
  
  	@Override
  	public void configure() {
  		try {
  			buildPhantom();
  		} catch (Exception e) {
  			// TODO Auto-generated catch block
  			e.printStackTrace();
  		}
  	}
  
  	protected void buildPhantom(){
  		PhysicalObject po=null;
  
  		Cylinder s = new Cylinder(20, 20, 40);
  		Translation tr = new Translation(-40, 0, 40);
  		s.applyTransform(tr);
  		s.setName("Water Cylinder");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Water")); // D = 1.95
  		po.setShape(s);
  		add(po);
  		
  		// Body of the phantom.
  		PointND center = new PointND(0,0,0);
  
  		// water sphere
  		SimpleSurface sp = new Sphere(20, center);
  		tr = new Translation(40, 0, 40);
  		sp.applyTransform(tr);
  		sp.setName("Water Sphere");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Water")); // D = 1.95
  		po.setShape(sp);
  		add(po);
  
  		// water box
  		Box b = new Box(30,30,30);
  		tr = new Translation(25, -15, -55); 
  		b.applyTransform(tr);
  		b.setName("Water Box");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Water")); // D = 1.95
  		po.setShape(b);
  		add(po);
  
  		// water cone
  		Cone co = new Cone(20,20,40);
  		tr = new Translation(-40, 0, -20); 
  		co.applyTransform(tr);
  		co.setName("Water Cone");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Water")); // D = 1.95
  		po.setShape(co);
  		add(po);
  
  		// water ellipsoid
  		Ellipsoid e = new Ellipsoid(10, 15, 20);
  		e.setName("Water Ellipsoid");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Water")); // D = 1.95
  		po.setShape(e);
  		add(po);
  	}
  
  }
  /*
   * Copyright (C) 2010-2014 Martin Berger
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */