content: package edu.stanford.rsl.conrad.phantom.renderer;
  
  import edu.stanford.rsl.conrad.data.numeric.Grid2D;
  import edu.stanford.rsl.conrad.phantom.AnalyticPhantom;
  import edu.stanford.rsl.conrad.utils.CONRAD;
  import edu.stanford.rsl.conrad.utils.Configuration;
  import edu.stanford.rsl.conrad.utils.ImageGridBuffer;
  
  
  /**
   * will implement a version which streams projections as they are projected.
   * To be implemented at some point in the future....
   * @author akmaier
   *
   */
  public class AnalyticPhantomProjector extends PhantomRenderer {
  
  	AnalyticPhantom phantom;
  	protected int stackSize;
  	ImageGridBuffer buffer;
  	
  	protected void init(){
  		if (!init) {
  			stackSize = Configuration.getGlobalConfiguration().getGeometry().getProjectionStackSize();
  			super.init();
  		}
  	}
  
  	@Override
  	public Grid2D getNextProjection() {
  		init();
  		Grid2D proc  = null;
  		while (true) {
  			if (buffer.get(projectionNumber) != null) {
  				proc = buffer.get(projectionNumber);
  				projectionNumber ++;
  				buffer.remove(projectionNumber);
  				break;
  			} else {
  				if (projectionNumber >= stackSize){
  					break;
  				}
  				try {
  					Thread.sleep(CONRAD.INVERSE_SPEEDUP);
  				} catch (InterruptedException e) {
  					// TODO Auto-generated catch block
  					e.printStackTrace();
  				}
  			}
  		}
  		return proc;
  	}
  
  	@Override
  	public void createPhantom() {
  	}
  
  	@Override
  	public String toString() {
  		// TODO Auto-generated method stub
  		return null;
  	}
  
  	@Override
  	public String getBibtexCitation() {
  		return CONRAD.CONRADBibtex;
  	}
  
  	@Override
  	public String getMedlineCitation() {
  		return CONRAD.CONRADMedline;
  	}
  
  	@Override
  	public void configure() throws Exception {
  		projectionNumber = -1;
  		buffer = new ImageGridBuffer();
  		super.configured = true;
  	}
  
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */