64 #ifndef __vtkFixedPointVolumeRayCastMapper_h
65 #define __vtkFixedPointVolumeRayCastMapper_h
69 #define VTKKW_FP_SHIFT 15
70 #define VTKKW_FPMM_SHIFT 17
71 #define VTKKW_FP_MASK 0x7fff
72 #define VTKKW_FP_SCALE 32767.0
114 vtkSetMacro( SampleDistance,
float );
115 vtkGetMacro( SampleDistance,
float );
125 vtkSetMacro( InteractiveSampleDistance,
float );
126 vtkGetMacro( InteractiveSampleDistance,
float );
135 vtkSetClampMacro( ImageSampleDistance,
float, 0.1f, 100.0f );
136 vtkGetMacro( ImageSampleDistance,
float );
142 vtkSetClampMacro( MinimumImageSampleDistance,
float, 0.1f, 100.0f );
143 vtkGetMacro( MinimumImageSampleDistance,
float );
149 vtkSetClampMacro( MaximumImageSampleDistance,
float, 0.1f, 100.0f );
150 vtkGetMacro( MaximumImageSampleDistance,
float );
161 vtkSetClampMacro( AutoAdjustSampleDistances,
int, 0, 1 );
162 vtkGetMacro( AutoAdjustSampleDistances,
int );
163 vtkBooleanMacro( AutoAdjustSampleDistances,
int );
174 vtkSetClampMacro( LockSampleDistanceToInputSpacing,
int, 0, 1 );
175 vtkGetMacro( LockSampleDistanceToInputSpacing,
int );
176 vtkBooleanMacro( LockSampleDistanceToInputSpacing,
int );
182 void SetNumberOfThreads(
int num );
183 int GetNumberOfThreads();
189 vtkSetClampMacro( IntermixIntersectingGeometry,
int, 0, 1 );
190 vtkGetMacro( IntermixIntersectingGeometry,
int );
191 vtkBooleanMacro( IntermixIntersectingGeometry,
int );
201 float ComputeRequiredImageSampleDistance(
float desiredTime,
203 float ComputeRequiredImageSampleDistance(
float desiredTime,
213 unsigned int ToFixedPointPosition(
float val );
214 void ToFixedPointPosition(
float in[3],
unsigned int out[3] );
215 unsigned int ToFixedPointDirection(
float dir );
216 void ToFixedPointDirection(
float in[3],
unsigned int out[3] );
217 void FixedPointIncrement(
unsigned int position[3],
unsigned int increment[3] );
218 void GetFloatTripleFromPointer(
float v[3],
float *ptr );
219 void GetUIntTripleFromPointer(
unsigned int v[3],
unsigned int *ptr );
220 void ShiftVectorDown(
unsigned int in[3],
unsigned int out[3] );
221 int CheckMinMaxVolumeFlag(
unsigned int pos[3],
int c );
222 int CheckMIPMinMaxVolumeFlag(
unsigned int pos[3],
int c,
unsigned short maxIdx,
int flip );
224 void LookupColorUC(
unsigned short *colorTable,
225 unsigned short *scalarOpacityTable,
226 unsigned short index,
227 unsigned char color[4] );
228 void LookupDependentColorUC(
unsigned short *colorTable,
229 unsigned short *scalarOpacityTable,
230 unsigned short index[4],
232 unsigned char color[4] );
233 void LookupAndCombineIndependentColorsUC(
234 unsigned short *colorTable[4],
235 unsigned short *scalarOpacityTable[4],
236 unsigned short index[4],
239 unsigned char color[4] );
240 int CheckIfCropped(
unsigned int pos[3] );
250 vtkGetVectorMacro( TableShift,
float, 4 );
251 vtkGetVectorMacro( TableScale,
float, 4 );
252 vtkGetMacro( ShadingRequired,
int );
253 vtkGetMacro( GradientOpacityRequired,
int );
269 void ComputeRayInfo(
int x,
int y,
272 unsigned int *numSteps );
274 void InitializeRayInfo(
vtkVolume *vol );
276 int ShouldUseNearestNeighborInterpolation(
vtkVolume *vol );
287 double *,
double *,
int * );
290 void RenderSubVolume();
294 void CreateCanonicalView(
vtkVolume *volume,
297 double viewDirection[3],
307 {
return this->RetrieveRenderTime( ren, vol ); }
309 {
return this->RetrieveRenderTime( ren ); }
320 vtkSetMacro( FinalColorWindow,
float );
321 vtkGetMacro( FinalColorWindow,
float );
322 vtkSetMacro( FinalColorLevel,
float );
323 vtkGetMacro( FinalColorLevel,
float );
330 vtkGetMacro( FlipMIPComparison,
int );
356 void ComputeMatrices(
double volumeOrigin[3],
357 double volumeSpacing[3],
363 int imageFlag,
int rowBoundsFlag,
364 int volumeExtent[6]);
410 int SavedColorChannels[4];
411 float SavedScalarOpacityDistance[4];
422 unsigned short ColorTable[4][32768*3];
423 unsigned short ScalarOpacityTable[4][32768];
424 unsigned short GradientOpacityTable[4][256];
429 float GradientMagnitudeScale[4];
430 float GradientMagnitudeShift[4];
445 unsigned short DiffuseShadingTable [4][65536*3];
446 unsigned short SpecularShadingTable[4][65536*3];
457 int ClipRayAgainstVolume(
float rayStart[3],
459 float rayDirection[3],
466 void UpdateCroppingRegions();
470 int ClipRayAgainstClippingPlanes(
float rayStart[3],
472 int numClippingPlanes,
473 float *clippingPlanes );
475 unsigned int FixedPointCroppingRegionPlanes[6];
476 unsigned int CroppingRegionMask[27];
481 float GetZBufferValue(
int x,
int y );
490 float ViewToVoxelsArray[16];
491 float WorldToVoxelsArray[16];
492 float VoxelsToWorldArray[16];
494 double CroppingBounds[6];
499 double SavedSpacing[3];
504 int MinMaxVolumeSize[4];
509 void UpdateMinMaxVolume(
vtkVolume *vol );
510 void FillInMaxGradientMagnitudes(
int fullDim[3],
518 void ApplyFinalColorWindowLevel();
542 (0x80000000+static_cast<unsigned int>(dir*
VTKKW_FP_SCALE + 0.5)));
547 out[0] = ((in[0]<0.0)?
551 out[1] = ((in[1]<0.0)?
555 out[2] = ((in[2]<0.0)?
563 if ( increment[0]&0x80000000 )
565 position[0] += (increment[0]&0x7fffffff);
569 position[0] -= increment[0];
571 if ( increment[1]&0x80000000 )
573 position[1] += (increment[1]&0x7fffffff);
577 position[1] -= increment[1];
579 if ( increment[2]&0x80000000 )
581 position[2] += (increment[2]&0x7fffffff);
585 position[2] -= increment[2];
605 unsigned int out[3] )
616 ( mmpos[2]*static_cast<unsigned int>(
618 mmpos[1]*
static_cast<unsigned int>(this->MinMaxVolumeSize[0]) +
619 mmpos[0] ) +
static_cast<unsigned int>(c);
625 unsigned short maxIdx,
int flip )
629 ( mmpos[2]*static_cast<unsigned int>(
631 mmpos[1]*
static_cast<unsigned int>(this->MinMaxVolumeSize[0]) +
632 mmpos[0] ) +
static_cast<unsigned int>(c);
642 return ( *(this->
MinMaxVolume + 3*offset + 1) > maxIdx );
652 unsigned short *scalarOpacityTable,
653 unsigned short index,
654 unsigned char color[4] )
656 unsigned short alpha = scalarOpacityTable[
index];
657 color[0] =
static_cast<unsigned char>
659 color[1] =
static_cast<unsigned char>
661 color[2] =
static_cast<unsigned char>
663 color[3] =
static_cast<unsigned char>(alpha>>(
VTKKW_FP_SHIFT - 8));
667 unsigned short *scalarOpacityTable,
668 unsigned short index[4],
670 unsigned char color[4] )
672 unsigned short alpha;
673 switch ( components )
676 alpha = scalarOpacityTable[index[1]];
677 color[0] =
static_cast<unsigned char>
678 ((colorTable[3*index[0] ]*alpha + 0x7fff)>>(2*
VTKKW_FP_SHIFT - 8));
679 color[1] =
static_cast<unsigned char>
680 ((colorTable[3*index[0]+1]*alpha + 0x7fff)>>(2*
VTKKW_FP_SHIFT - 8));
681 color[2] =
static_cast<unsigned char>
682 ((colorTable[3*index[0]+2]*alpha + 0x7fff)>>(2*
VTKKW_FP_SHIFT - 8));
683 color[3] =
static_cast<unsigned char>(alpha>>(
VTKKW_FP_SHIFT - 8));
686 alpha = scalarOpacityTable[index[3]];
687 color[0] =
static_cast<unsigned char>((index[0]*alpha + 0x7fff)>>
VTKKW_FP_SHIFT );
688 color[1] =
static_cast<unsigned char>((index[1]*alpha + 0x7fff)>>
VTKKW_FP_SHIFT );
689 color[2] =
static_cast<unsigned char>((index[2]*alpha + 0x7fff)>>
VTKKW_FP_SHIFT );
690 color[3] =
static_cast<unsigned char>(alpha>>(
VTKKW_FP_SHIFT - 8));
697 unsigned short *scalarOpacityTable[4],
698 unsigned short index[4],
701 unsigned char color[4] )
703 unsigned int tmp[4] = {0,0,0,0};
705 for (
int i = 0; i < components; i++ )
707 unsigned short alpha =
static_cast<unsigned short>(
static_cast<float>(scalarOpacityTable[i][index[i]])*weights[i]);
708 tmp[0] +=
static_cast<unsigned char>(((colorTable[i][3*index[i] ])*alpha + 0x7fff)>>(2*
VTKKW_FP_SHIFT - 8));
709 tmp[1] +=
static_cast<unsigned char>(((colorTable[i][3*index[i]+1])*alpha + 0x7fff)>>(2*
VTKKW_FP_SHIFT - 8));
710 tmp[2] +=
static_cast<unsigned char>(((colorTable[i][3*index[i]+2])*alpha + 0x7fff)>>(2*
VTKKW_FP_SHIFT - 8));
711 tmp[3] +=
static_cast<unsigned char>(alpha>>(
VTKKW_FP_SHIFT - 8));
714 color[0] =
static_cast<unsigned char>((tmp[0]>255)?(255):(tmp[0]));
715 color[1] =
static_cast<unsigned char>((tmp[1]>255)?(255):(tmp[1]));
716 color[2] =
static_cast<unsigned char>((tmp[2]>255)?(255):(tmp[2]));
717 color[3] =
static_cast<unsigned char>((tmp[3]>255)?(255):(tmp[3]));
unsigned short * GetDiffuseShadingTable(int c)
unsigned short ** GetGradientNormal()
vtkTransform * VoxelsTransform
vtkDataArray * CurrentScalars
float MinimumImageSampleDistance
void ShiftVectorDown(unsigned int in[3], unsigned int out[3])
vtkFixedPointVolumeRayCastMIPHelper * MIPHelper
vtkTimeStamp SavedGradientsMTime
represents a volume (data & properties) in a rendered scene
vtkFixedPointVolumeRayCastCompositeShadeHelper * CompositeShadeHelper
vtkVolumeRayCastSpaceLeapingImageFilter * SpaceLeapFilter
unsigned char ** GradientMagnitude
Abstract class for a volume mapper.
vtkMatrix4x4 * VoxelsToWorldMatrix
encode a direction into a one or two byte value
represent and manipulate 4x4 transformation matrices
A helper that generates composite images for the volume ray cast mapper.
unsigned int CroppingRegionMask[27]
void FixedPointIncrement(unsigned int position[3], unsigned int increment[3])
Use finite differences to estimate gradient.
Defines a 1D piecewise function.
void PrintSelf(ostream &os, vtkIndent indent)
vtkVolume ** RenderVolumeTable
VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void *arg)
A class for performing multithreaded execution.
record modification and/or execution time
maintain a list of planes
vtkMatrix4x4 * PerspectiveMatrix
unsigned char ** GetGradientMagnitude()
VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void *arg)
abstract specification for renderers
void GetUIntTripleFromPointer(unsigned int v[3], unsigned int *ptr)
unsigned short * MinMaxVolume
int IntermixIntersectingGeometry
unsigned short * ContiguousGradientNormal
vtkMatrix4x4 * ViewToVoxelsMatrix
unsigned short ** GradientNormal
A helper that generates MIP images for the volume ray cast mapper.
vtkDirectionEncoder * DirectionEncoder
vtkImageData * SavedGradientsInput
helper class that draws the image to the screen
float MinimumViewDistance
float InteractiveSampleDistance
float ImageSampleDistance
vtkEncodedGradientShader * GradientShader
unsigned short * GetScalarOpacityTable(int c)
vtkMatrix4x4 * ViewToWorldMatrix
Builds the space leaping data structure.
Timer support and logging.
int AutoAdjustSampleDistances
int CheckIfCropped(unsigned int pos[3])
vtkFixedPointVolumeRayCastCompositeGOHelper * CompositeGOHelper
vtkTransform * VoxelsToViewTransform
vtkFixedPointRayCastImage * RayCastImage
unsigned short * GetColorTable(int c)
vtkMatrix4x4 * VolumeMatrix
vtkDataArray * PreviousScalars
a simple class to control print indentation
int LockSampleDistanceToInputSpacing
vtkImageData * SavedMinMaxInput
float GetEstimatedRenderTime(vtkRenderer *ren, vtkVolume *vol)
vtkRenderer ** RenderRendererTable
topologically and geometrically regular array of data
void LookupDependentColorUC(unsigned short *colorTable, unsigned short *scalarOpacityTable, unsigned short index[4], int components, unsigned char color[4])
abstract superclass for arrays of numeric data
float SavedSampleDistance
vtkMatrix4x4 * WorldToVoxelsMatrix
Compute shading tables for encoded normals.
int GradientOpacityRequired
vtkMultiThreader * Threader
virtual void Render(vtkRenderer *ren, vtkVolume *vol)=0
int CheckMIPMinMaxVolumeFlag(unsigned int pos[3], int c, unsigned short maxIdx, int flip)
float * TransformedClippingPlanes
A helper that generates composite images for the volume ray cast mapper.
vtkImageData * SavedParametersInput
vtkTransform * PerspectiveTransform
unsigned int ToFixedPointDirection(float dir)
A helper that generates composite images for the volume ray cast mapper.
A fixed point mapper for volumes.
Defines a transfer function for mapping a property to an RGB color value.
create a window for renderers to draw into
vtkFixedPointVolumeRayCastCompositeHelper * CompositeHelper
A helper that generates composite images for the volume ray cast mapper.
vtkRenderWindow * RenderWindow
#define VTK_THREAD_RETURN_TYPE
unsigned int FixedPointCroppingRegionPlanes[6]
unsigned char * ContiguousGradientMagnitude
float MaximumImageSampleDistance
void LookupAndCombineIndependentColorsUC(unsigned short *colorTable[4], unsigned short *scalarOpacityTable[4], unsigned short index[4], float weights[4], int components, unsigned char color[4])
int CheckMinMaxVolumeFlag(unsigned int pos[3], int c)
vtkTimeStamp SavedParametersMTime
void LookupColorUC(unsigned short *colorTable, unsigned short *scalarOpacityTable, unsigned short index, unsigned char color[4])
unsigned short * GetSpecularShadingTable(int c)
unsigned short * GetGradientOpacityTable(int c)
vtkFixedPointVolumeRayCastCompositeGOShadeHelper * CompositeGOShadeHelper
float GetEstimatedRenderTime(vtkRenderer *ren)
int NumberOfGradientSlices
static vtkAlgorithm * New()
vtkRayCastImageDisplayHelper * ImageDisplayHelper
int NumTransformedClippingPlanes
vtkFiniteDifferenceGradientEstimator * GradientEstimator
unsigned int ToFixedPointPosition(float val)
vtkImageData * MinMaxVolumeCache
vtkMatrix4x4 * VoxelsToViewMatrix
float OldImageSampleDistance
void GetFloatTripleFromPointer(float v[3], float *ptr)
helper class for a ray cast image