package edu.stanford.rsl.conrad.phantom.renderer; import ij.gui.GenericDialog; import edu.stanford.rsl.conrad.data.numeric.Grid2D; import edu.stanford.rsl.conrad.geometry.trajectories.Trajectory; import edu.stanford.rsl.conrad.utils.Configuration; import edu.stanford.rsl.conrad.utils.ImageGridBuffer; public abstract class StreamingPhantomRenderer extends PhantomRenderer { protected int dimx = 256; protected int dimy = 256; protected int dimz = 256; protected double originIndexX = 128; protected double originIndexY = 128; protected double originIndexZ = 128; protected ImageGridBuffer buffer; @Override public void configure() throws Exception { projectionNumber = -1; buffer = new ImageGridBuffer(); readDimensionsFromGlobalConfig(); configured = true; } /** * Reads the required dimensions from the global configuration. */ protected void readDimensionsFromGlobalConfig(){ Configuration config = Configuration.getGlobalConfiguration(); dimx = config.getGeometry().getReconDimensionX(); dimy = (int) config.getGeometry().getReconDimensionY(); dimz = (int) config.getGeometry().getReconDimensionZ(); originIndexX = (int) Configuration.getGlobalConfiguration().getGeometry().getOriginInPixelsX(); originIndexY = (int) Configuration.getGlobalConfiguration().getGeometry().getOriginInPixelsY(); originIndexZ = (int) Configuration.getGlobalConfiguration().getGeometry().getOriginInPixelsZ(); } /** * Creates a GenericDialog with fields for the phantom dimensions. * @return the dialog. */ protected GenericDialog createDimensionDialog (){ Configuration config = Configuration.getGlobalConfiguration(); GenericDialog gd = new GenericDialog("Phantom Configuration"); gd.addNumericField("Phantom X Dimension:", config.getGeometry().getReconDimensionX(), 5); gd.addNumericField("Phantom Y Dimension: ", config.getGeometry().getReconDimensionY(), 5); gd.addNumericField("Phantom Z Dimension: ", config.getGeometry().getReconDimensionZ(), 5); originIndexX = (int) Configuration.getGlobalConfiguration().getGeometry().getOriginInPixelsX(); originIndexY = (int) Configuration.getGlobalConfiguration().getGeometry().getOriginInPixelsY(); originIndexZ = (int) Configuration.getGlobalConfiguration().getGeometry().getOriginInPixelsZ(); gd.addNumericField("Index of Origin X:", originIndexX, 5); gd.addNumericField("Index of Origin Y: ", originIndexY, 5); gd.addNumericField("Index of Origin Z: ", originIndexZ, 5); return gd; } /** * Reads the dimensions from the GenericDialog * @param gd the GenericDialog * * @see #createDimensionDialog() */ protected void readDimensions(GenericDialog gd){ // read dialog window dimx = (int) gd.getNextNumber(); dimy = (int) gd.getNextNumber(); dimz = (int) gd.getNextNumber(); originIndexX = (int) gd.getNextNumber(); originIndexY = (int) gd.getNextNumber(); originIndexZ = (int) gd.getNextNumber(); Trajectory traj = Configuration.getGlobalConfiguration().getGeometry(); traj.setOriginInPixelsX(originIndexX); traj.setOriginInPixelsY(originIndexY); traj.setOriginInPixelsZ(originIndexZ); } @Override public Grid2D getNextProjection() { init(); Grid2D proc = null; if (projectionNumber < dimz -1) { projectionNumber ++; while (proc == null){ proc = buffer.get(projectionNumber); } buffer.remove(projectionNumber); } return proc; } } /* * Copyright (C) 2010-2014 Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */