VTK
vtkUnstructuredGridVolumeZSweepMapper.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkUnstructuredGridVolumeZSweepMapper.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
38 #ifndef vtkUnstructuredGridVolumeZSweepMapper_h
39 #define vtkUnstructuredGridVolumeZSweepMapper_h
40 
41 #include "vtkRenderingVolumeModule.h" // For export macro
43 
44 class vtkRenderer;
45 class vtkVolume;
47 class vtkCell;
48 class vtkGenericCell;
49 class vtkIdList;
50 class vtkPriorityQueue;
51 class vtkTransform;
52 class vtkMatrix4x4;
53 class vtkVolumeProperty;
54 class vtkDoubleArray;
56 class vtkRenderWindow;
57 
58 // Internal classes
60 {
61  class vtkScreenEdge;
62  class vtkSpan;
63  class vtkPixelListFrame;
64  class vtkUseSet;
65  class vtkVertices;
66  class vtkSimpleScreenEdge;
67  class vtkDoubleScreenEdge;
68  class vtkVertexEntry;
69  class vtkPixelListEntryMemory;
70 };
71 
73 {
74 public:
76  void PrintSelf( ostream& os, vtkIndent indent );
77 
82 
84 
89  vtkSetClampMacro( ImageSampleDistance, float, 0.1f, 100.0f );
90  vtkGetMacro( ImageSampleDistance, float );
92 
94 
98  vtkSetClampMacro( MinimumImageSampleDistance, float, 0.1f, 100.0f );
99  vtkGetMacro( MinimumImageSampleDistance, float );
101 
103 
107  vtkSetClampMacro( MaximumImageSampleDistance, float, 0.1f, 100.0f );
108  vtkGetMacro( MaximumImageSampleDistance, float );
110 
112 
118  vtkSetClampMacro( AutoAdjustSampleDistances, int, 0, 1 );
119  vtkGetMacro( AutoAdjustSampleDistances, int );
120  vtkBooleanMacro( AutoAdjustSampleDistances, int );
122 
124 
128  vtkSetClampMacro( IntermixIntersectingGeometry, int, 0, 1 );
129  vtkGetMacro( IntermixIntersectingGeometry, int );
130  vtkBooleanMacro( IntermixIntersectingGeometry, int );
132 
140 
147 
149 
154  vtkGetObjectMacro(RayIntegrator, vtkUnstructuredGridVolumeRayIntegrator);
156 
162  void Render(vtkRenderer *ren,
163  vtkVolume *vol);
164 
165  vtkGetVectorMacro( ImageInUseSize, int, 2 );
166  vtkGetVectorMacro( ImageOrigin, int, 2 );
167  vtkGetVectorMacro( ImageViewportSize, int , 2 );
168 
169 protected:
172 
176  void BuildUseSets();
177 
183  vtkIdType w[3]);
184 
191  vtkVolume *vol);
192 
197 
202  void MainLoop(vtkRenderWindow *renWin);
203 
208  void CompositeFunction(double zTarget);
209 
213  unsigned char ColorComponentRealToByte(float color);
214 
218  void RasterizeFace(vtkIdType faceIds[3], int externalSide);
219 
227  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *ve0,
228  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *ve1,
229  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *ve2,
230  bool exitFace);
231 
238  void RasterizeSpan(int y,
239  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkScreenEdge *left,
240  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkScreenEdge *right,
241  bool exitFace);
242 
250  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *v0,
251  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *v1,
252  bool exitFace);
253 
255  vtkVolume *vol,
256  float t);
257 
259  vtkVolume *vol);
260 
264  double GetZBufferValue(int x,
265  int y);
266 
268  vtkVolume *vol);
269 
275 
281 
286 
288 
293 
295 
296  // This is how big the image would be if it covered the entire viewport
297  int ImageViewportSize[2];
298 
299  // This is how big the allocated memory for image is. This may be bigger
300  // or smaller than ImageFullSize - it will be bigger if necessary to
301  // ensure a power of 2, it will be smaller if the volume only covers a
302  // small region of the viewport
303  int ImageMemorySize[2];
304 
305  // This is the size of subregion in ImageSize image that we are using for
306  // the current image. Since ImageSize is a power of 2, there is likely
307  // wasted space in it. This number will be used for things such as clearing
308  // the image if necessary.
309  int ImageInUseSize[2];
310 
311  // This is the location in ImageFullSize image where our ImageSize image
312  // is located.
313  int ImageOrigin[2];
314 
315  // This is the allocated image
316  unsigned char *Image;
317 
318  // This is the accumulating double RGBA image
320 
326 
328 
329  float *ZBuffer;
330  int ZBufferSize[2];
331  int ZBufferOrigin[2];
332 
335 
336  // if use CellScalars, we need to keep track of the
337  // values on each side of the face and figure out
338  // if the face is used by two cells (twosided) or one cell.
339  double FaceScalars[2];
340  int FaceSide;
341 
342  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkSpan *Span;
343  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkPixelListFrame *PixelListFrame;
344 
345  // Used by BuildUseSets().
347 
348  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkUseSet *UseSet;
349 
351  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertices *Vertices;
352 
355 
356  // Used by the main loop
358  int XBounds[2];
359  int YBounds[2];
360 
361  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkSimpleScreenEdge *SimpleEdge;
362  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkDoubleScreenEdge *DoubleEdge;
363 
366 
368 
369  // Used during compositing
373 
374  // Benchmark
376 
377 
378  vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkPixelListEntryMemory *MemoryManager;
379 
380 private:
382  void operator=(const vtkUnstructuredGridVolumeZSweepMapper&) VTK_DELETE_FUNCTION;
383 };
384 
385 #endif
abstract class to specify cell behavior
Definition: vtkCell.h:60
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:55
dynamic, self-adjusting array of double
provides thread-safe access to cells
list of point or cell ids
Definition: vtkIdList.h:37
a simple class to control print indentation
Definition: vtkIndent.h:40
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:42
a list of ids arranged in priority order
helper class that draws the image to the screen
create a window for renderers to draw into
abstract specification for renderers
Definition: vtkRenderer.h:64
record modification and/or execution time
Definition: vtkTimeStamp.h:36
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:61
Abstract class for a unstructured grid volume mapper.
a superclass for volume ray integration functions
Unstructured grid volume mapper based the ZSweep Algorithm.
void AllocateUseSet(vtkIdType size)
Allocate an array of usesets of size ‘size’ only if the current one is not large enough.
void RasterizeTriangle(vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *ve0, vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *ve1, vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *ve2, bool exitFace)
Perform scan conversion of a triangle defined by its vertices.
vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkSimpleScreenEdge * SimpleEdge
int ReorderTriangle(vtkIdType v[3], vtkIdType w[3])
Reorder vertices ‘v’ in increasing order in ‘w’.
vtkUnstructuredGridVolumeRayIntegrator * RealRayIntegrator
vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkPixelListFrame * PixelListFrame
float RetrieveRenderTime(vtkRenderer *ren, vtkVolume *vol)
virtual void SetRayIntegrator(vtkUnstructuredGridVolumeRayIntegrator *ri)
Set/Get the helper class for integrating rays.
void RasterizeLine(vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *v0, vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertexEntry *v1, bool exitFace)
Scan conversion of a straight line defined by endpoints v0 and v1.
void MainLoop(vtkRenderWindow *renWin)
MainLoop of the Zsweep algorithm.
unsigned char ColorComponentRealToByte(float color)
Convert and clamp a float color component into a unsigned char.
vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkSpan * Span
void CreateAndCleanPixelList()
Create an empty "pixel list" for each pixel of the screen.
void Render(vtkRenderer *ren, vtkVolume *vol)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
void CompositeFunction(double zTarget)
Do delayed compositing from back to front, stopping at zTarget for each pixel inside the bounding box...
void RasterizeFace(vtkIdType faceIds[3], int externalSide)
Perform scan conversion of a triangle face.
double GetZBufferValue(int x, int y)
Return the value of the z-buffer at screen coordinates (x,y).
void RasterizeSpan(int y, vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkScreenEdge *left, vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkScreenEdge *right, bool exitFace)
Perform scan conversion of an horizontal span from left ro right at line y.
vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkPixelListEntryMemory * MemoryManager
vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkUseSet * UseSet
void AllocateVertices(vtkIdType size)
Allocate a vertex array of size ‘size’ only if the current one is not large enough.
static vtkUnstructuredGridVolumeZSweepMapper * New()
Set MaxPixelListSize to 32.
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
double GetMinimumBoundsDepth(vtkRenderer *ren, vtkVolume *vol)
void SetMaxPixelListSize(int size)
Change the maximum size allowed for a pixel list.
void ProjectAndSortVertices(vtkRenderer *ren, vtkVolume *vol)
Project and sort the vertices by z-coordinates in view space in the "event list" (an heap).
void StoreRenderTime(vtkRenderer *ren, vtkVolume *vol, float t)
void BuildUseSets()
For each vertex, find the list of incident faces.
vtkUnstructuredGridVolumeRayIntegrator * RayIntegrator
vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkVertices * Vertices
void SavePixelListFrame()
For debugging purpose, save the pixel list frame as a dataset.
int GetMaxPixelListSize()
Maximum size allowed for a pixel list.
vtkUnstructuredGridVolumeZSweepMapperNamespace::vtkDoubleScreenEdge * DoubleEdge
represents the common properties for rendering a volume.
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:51
@ color
Definition: vtkX3D.h:221
@ size
Definition: vtkX3D.h:253
vtkBooleanMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
int vtkIdType
Definition: vtkType.h:287