package edu.stanford.rsl.conrad.phantom.xcat; import java.util.Iterator; import edu.stanford.rsl.conrad.geometry.AbstractShape; import edu.stanford.rsl.conrad.geometry.AbstractSurface; import edu.stanford.rsl.conrad.geometry.shapes.compound.CompoundShape; import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND; import edu.stanford.rsl.conrad.geometry.splines.SurfaceBSpline; import edu.stanford.rsl.conrad.geometry.splines.TimeVariantSurfaceBSpline; import edu.stanford.rsl.conrad.parallel.ParallelThread; import edu.stanford.rsl.conrad.utils.TessellationUtil; /** * Thread to tessellate a SurfaceBSpline or TimeVariantSurfaceBSpline. * * @author akmaier * */ public class TessellationThread extends ParallelThread { private Object tessellationObject; private double time; private CompoundShape scene; /** * @return the mesh */ public CompoundShape getObjects() { return scene; } public TessellationThread (Object tessellationObject, double time){ this.tessellationObject = tessellationObject; this.time = time; } @SuppressWarnings("rawtypes") @Override public void execute(){ Object tObject = this; scene = new CompoundShape(); while (tObject != null){ if (((Iterator)this.tessellationObject).hasNext()){ tObject = ((Iterator)this.tessellationObject).next(); int elementCountU = (int)TessellationUtil.getSamplingU((AbstractSurface) tObject); int elementCountV = (int)TessellationUtil.getSamplingV((AbstractSurface) tObject); if (tObject instanceof SurfaceBSpline){ SurfaceBSpline spline = (SurfaceBSpline)tObject; scene.add(spline.tessellateMesh(elementCountU, elementCountV)); } if (tObject instanceof TimeVariantSurfaceBSpline){ TimeVariantSurfaceBSpline spline = (TimeVariantSurfaceBSpline)tObject; AbstractShape mesh = spline.tessellateMesh(elementCountU, elementCountV, time); scene.add(mesh); } } else { tObject = null; } } } @Override public String getProcessName() { return "Tessellation Thread"; } } /* * Copyright (C) 2010-2014 Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */