package edu.stanford.rsl.conrad.phantom.electrondensity; import edu.stanford.rsl.conrad.geometry.bounds.HalfSpaceBoundingCondition; import edu.stanford.rsl.conrad.geometry.shapes.simple.Cylinder; import edu.stanford.rsl.conrad.geometry.shapes.simple.Plane3D; import edu.stanford.rsl.conrad.geometry.shapes.simple.QuadricSurface; import edu.stanford.rsl.conrad.numerics.SimpleVector; import edu.stanford.rsl.conrad.physics.PhysicalObject; import edu.stanford.rsl.conrad.physics.materials.Material; import edu.stanford.rsl.conrad.physics.materials.database.MaterialsDB; import edu.stanford.rsl.conrad.rendering.PrioritizableScene; /** * <p>Class to model the outter disk of CRIS Electron Density Phantom (Model 062)<br/> * Default material is plastic water. * @author Rotimi X Ojo */ public class EDOuterDisk extends PrioritizableScene{ private static final long serialVersionUID = -6136623274828882139L; private QuadricDisk disk; private double ext_dx = 330/2, ext_dy =140,int_dx = 90, int_dy = 90, dz = 50/2; private double insertsDistanceFromOrigin = 115.3; private double insert6DistanceFromOrigin = 110; public EDOuterDisk(){ init(); } public EDOuterDisk(double ext_dx,double ext_dy,double int_dx, double int_dy, double dz){ this.ext_dx = ext_dx; this.ext_dy = ext_dy; this.int_dx = int_dx; this.int_dy = int_dy; this.dz = dz; init(); } private void init(){ disk = new QuadricDisk(ext_dx, ext_dy,dz); disk.setMaterial(MaterialsDB.getMaterial("H2O")); HalfSpaceBoundingCondition cond = new HalfSpaceBoundingCondition(new Plane3D(new SimpleVector(0,1,0), -ext_dy+10)); disk.addBoundingCondition(cond); add(disk,getLowestPriority()); add(getBackgroundDisk(new Cylinder(int_dx, int_dy, dz)),getLowestPriority() + 1); } /** * Set disk material. Default material is plastic water. * @param material */ public void setMaterial(Material material){ disk.setMaterial(material); } private PhysicalObject getBackgroundDisk(QuadricSurface cyl){ PhysicalObject airDisk = new PhysicalObject(); airDisk.setShape(cyl); airDisk.setMaterial(getBackgroundMaterial()); return airDisk; } public void addInsert(Insert ins, int index){ if(index == 6){ ins.setLocation(index, insert6DistanceFromOrigin); }else{ ins.setLocation(index, insertsDistanceFromOrigin); } addAll(ins); } } /* * Copyright (C) 2010-2014 Rotimi X Ojo * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */