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
44class vtkRenderer;
45class vtkVolume;
47class vtkCell;
48class vtkGenericCell;
49class vtkIdList;
51class vtkTransform;
52class vtkMatrix4x4;
54class vtkDoubleArray;
56class 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{
74public:
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
163 vtkVolume *vol);
164
165 vtkGetVectorMacro( ImageInUseSize, int, 2 );
166 vtkGetVectorMacro( ImageOrigin, int, 2 );
167 vtkGetVectorMacro( ImageViewportSize, int , 2 );
168
169protected:
172
177
183 vtkIdType w[3]);
184
191 vtkVolume *vol);
192
197
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];
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
380private:
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.
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
static vtkUnstructuredGridVolumeZSweepMapper * New()
Set MaxPixelListSize to 32.
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