67#ifndef vtkFixedPointVolumeRayCastMapper_h
68#define vtkFixedPointVolumeRayCastMapper_h
70#include "vtkRenderingVolumeModule.h"
73#define VTKKW_FP_SHIFT 15
74#define VTKKW_FPMM_SHIFT 17
75#define VTKKW_FP_MASK 0x7fff
76#define VTKKW_FP_SCALE 32767.0
119 vtkGetMacro( SampleDistance,
float );
131 vtkGetMacro( InteractiveSampleDistance,
float );
142 vtkSetClampMacro( ImageSampleDistance,
float, 0.1f, 100.0f );
143 vtkGetMacro( ImageSampleDistance,
float );
151 vtkSetClampMacro( MinimumImageSampleDistance,
float, 0.1f, 100.0f );
152 vtkGetMacro( MinimumImageSampleDistance,
float );
160 vtkSetClampMacro( MaximumImageSampleDistance,
float, 0.1f, 100.0f );
161 vtkGetMacro( MaximumImageSampleDistance,
float );
174 vtkSetClampMacro( AutoAdjustSampleDistances,
int, 0, 1 );
175 vtkGetMacro( AutoAdjustSampleDistances,
int );
188 vtkSetClampMacro( LockSampleDistanceToInputSpacing,
int, 0, 1 );
189 vtkGetMacro( LockSampleDistanceToInputSpacing,
int );
208 vtkSetClampMacro( IntermixIntersectingGeometry,
int, 0, 1 );
209 vtkGetMacro( IntermixIntersectingGeometry,
int );
234 unsigned int ToFixedPointPosition(
float val );
235 void ToFixedPointPosition(
float in[3],
unsigned int out[3] );
236 unsigned int ToFixedPointDirection(
float dir );
237 void ToFixedPointDirection(
float in[3],
unsigned int out[3] );
238 void FixedPointIncrement(
unsigned int position[3],
unsigned int increment[3] );
239 void GetFloatTripleFromPointer(
float v[3],
float *ptr );
240 void GetUIntTripleFromPointer(
unsigned int v[3],
unsigned int *ptr );
241 void ShiftVectorDown(
unsigned int in[3],
unsigned int out[3] );
242 int CheckMinMaxVolumeFlag(
unsigned int pos[3],
int c );
243 int CheckMIPMinMaxVolumeFlag(
unsigned int pos[3],
int c,
unsigned short maxIdx,
int flip );
245 void LookupColorUC(
unsigned short *colorTable,
246 unsigned short *scalarOpacityTable,
247 unsigned short index,
248 unsigned char color[4] );
249 void LookupDependentColorUC(
unsigned short *colorTable,
250 unsigned short *scalarOpacityTable,
251 unsigned short index[4],
253 unsigned char color[4] );
254 void LookupAndCombineIndependentColorsUC(
255 unsigned short *colorTable[4],
256 unsigned short *scalarOpacityTable[4],
257 unsigned short index[4],
260 unsigned char color[4] );
261 int CheckIfCropped(
unsigned int pos[3] );
269 vtkGetVectorMacro( TableShift,
float, 4 );
270 vtkGetVectorMacro( TableScale,
float, 4 );
271 vtkGetMacro( ShadingRequired,
int );
272 vtkGetMacro( GradientOpacityRequired,
int );
291 unsigned int *numSteps );
308 double *,
double *,
int * );
318 double viewDirection[3],
329 {
return this->RetrieveRenderTime( ren, vol ); }
331 {
return this->RetrieveRenderTime( ren ); }
349 vtkGetMacro( FinalColorWindow,
float );
351 vtkGetMacro( FinalColorLevel,
float );
358 vtkGetMacro( FlipMIPComparison,
int );
393 double volumeSpacing[3],
399 int imageFlag,
int rowBoundsFlag,
400 int volumeExtent[6]);
446 int SavedColorChannels[4];
447 float SavedScalarOpacityDistance[4];
458 unsigned short ColorTable[4][32768*3];
459 unsigned short ScalarOpacityTable[4][32768];
460 unsigned short GradientOpacityTable[4][256];
465 float GradientMagnitudeScale[4];
466 float GradientMagnitudeShift[4];
481 unsigned short DiffuseShadingTable [4][65536*3];
482 unsigned short SpecularShadingTable[4][65536*3];
495 float rayDirection[3],
508 int numClippingPlanes,
509 float *clippingPlanes );
511 unsigned int FixedPointCroppingRegionPlanes[6];
512 unsigned int CroppingRegionMask[27];
526 float ViewToVoxelsArray[16];
527 float WorldToVoxelsArray[16];
528 float VoxelsToWorldArray[16];
530 double CroppingBounds[6];
535 double SavedSpacing[3];
540 int MinMaxVolumeSize[4];
585 out[0] = ((in[0]<0.0)?
589 out[1] = ((in[1]<0.0)?
593 out[2] = ((in[2]<0.0)?
601 if ( increment[0]&0x80000000 )
603 position[0] += (increment[0]&0x7fffffff);
609 if ( increment[1]&0x80000000 )
611 position[1] += (increment[1]&0x7fffffff);
617 if ( increment[2]&0x80000000 )
619 position[2] += (increment[2]&0x7fffffff);
643 unsigned int out[3] )
656 mmpos[1]*
static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) +
663 unsigned short maxIdx,
int flip )
669 mmpos[1]*
static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) +
680 return ( *(this->
MinMaxVolume + 3*offset + 1) > maxIdx );
690 unsigned short *scalarOpacityTable,
691 unsigned short index,
692 unsigned char color[4] )
694 unsigned short alpha = scalarOpacityTable[
index];
695 color[0] =
static_cast<unsigned char>
697 color[1] =
static_cast<unsigned char>
699 color[2] =
static_cast<unsigned char>
705 unsigned short *scalarOpacityTable,
706 unsigned short index[4],
708 unsigned char color[4] )
710 unsigned short alpha;
711 switch ( components )
715 color[0] =
static_cast<unsigned char>
717 color[1] =
static_cast<unsigned char>
719 color[2] =
static_cast<unsigned char>
735 unsigned short *scalarOpacityTable[4],
736 unsigned short index[4],
739 unsigned char color[4] )
741 unsigned int tmp[4] = {0,0,0,0};
743 for (
int i = 0; i < components; i++ )
745 unsigned short alpha =
static_cast<unsigned short>(
static_cast<float>(scalarOpacityTable[i][
index[i]])*weights[i]);
752 color[0] =
static_cast<unsigned char>((tmp[0]>255)?(255):(tmp[0]));
753 color[1] =
static_cast<unsigned char>((tmp[1]>255)?(255):(tmp[1]));
754 color[2] =
static_cast<unsigned char>((tmp[2]>255)?(255):(tmp[2]));
755 color[3] =
static_cast<unsigned char>((tmp[3]>255)?(255):(tmp[3]));
Defines a transfer function for mapping a property to an RGB color value.
abstract superclass for arrays of numeric data
encode a direction into a one or two byte value
Compute shading tables for encoded normals.
Use finite differences to estimate gradient.
helper class for a ray cast image
A helper that generates composite images for the volume ray cast mapper.
A helper that generates composite images for the volume ray cast mapper.
A helper that generates composite images for the volume ray cast mapper.
A helper that generates composite images for the volume ray cast mapper.
A helper that generates MIP images for the volume ray cast mapper.
A fixed point mapper for volumes.
void SetRayCastImage(vtkFixedPointRayCastImage *)
Set / Get the underlying image object.
vtkRayCastImageDisplayHelper * ImageDisplayHelper
vtkMatrix4x4 * ViewToWorldMatrix
int ClipRayAgainstVolume(float rayStart[3], float rayEnd[3], float rayDirection[3], double bounds[6])
vtkMatrix4x4 * ViewToVoxelsMatrix
vtkEncodedGradientShader * GradientShader
vtkFixedPointVolumeRayCastMIPHelper * MIPHelper
vtkFixedPointVolumeRayCastCompositeGOHelper * CompositeGOHelper
float OldImageSampleDistance
int ShouldUseNearestNeighborInterpolation(vtkVolume *vol)
vtkMultiThreader * Threader
float RetrieveRenderTime(vtkRenderer *ren)
float MaximumImageSampleDistance
unsigned short * GetColorTable(int c)
unsigned short * GetSpecularShadingTable(int c)
float ImageSampleDistance
vtkTransform * VoxelsTransform
unsigned short * ContiguousGradientNormal
float MinimumImageSampleDistance
vtkFixedPointVolumeRayCastMapper()
vtkImageData * SavedMinMaxInput
int ClipRayAgainstClippingPlanes(float rayStart[3], float rayEnd[3], int numClippingPlanes, float *clippingPlanes)
void UpdateCroppingRegions()
void GetFloatTripleFromPointer(float v[3], float *ptr)
void Render(vtkRenderer *, vtkVolume *)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Initialize rendering for this volume.
unsigned short * MinMaxVolume
unsigned char ** GradientMagnitude
int LockSampleDistanceToInputSpacing
void CaptureZBuffer(vtkRenderer *ren)
void ApplyFinalColorWindowLevel()
float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer *ren)
What is the image sample distance required to achieve the desired time? A version of this method is p...
void ComputeRayInfo(int x, int y, unsigned int pos[3], unsigned int dir[3], unsigned int *numSteps)
vtkFixedPointVolumeRayCastCompositeShadeHelper * CompositeShadeHelper
unsigned short * GetScalarOpacityTable(int c)
vtkMatrix4x4 * VoxelsToWorldMatrix
vtkTimeStamp SavedGradientsMTime
unsigned short * GetGradientOpacityTable(int c)
vtkRenderWindow * RenderWindow
virtual void ReleaseGraphicsResources(vtkWindow *)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
float MinimumViewDistance
void StoreRenderTime(vtkRenderer *ren, vtkVolume *vol, float t)
vtkFiniteDifferenceGradientEstimator * GradientEstimator
vtkFixedPointVolumeRayCastCompositeGOShadeHelper * CompositeGOShadeHelper
vtkImageData * MinMaxVolumeCache
float GetZBufferValue(int x, int y)
void DisplayRenderedImage(vtkRenderer *, vtkVolume *)
void FillInMaxGradientMagnitudes(int fullDim[3], int smallDim[3])
unsigned int ToFixedPointDirection(float dir)
vtkMatrix4x4 * VolumeMatrix
void InitializeRayInfo(vtkVolume *vol)
void SetNumberOfThreads(int num)
Set/Get the number of threads to use.
vtkImageData * SavedParametersInput
void ComputeGradients(vtkVolume *vol)
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
int UpdateShadingTable(vtkRenderer *ren, vtkVolume *vol)
void GetUIntTripleFromPointer(unsigned int v[3], unsigned int *ptr)
float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer *ren, vtkVolume *vol)
float SavedSampleDistance
static vtkFixedPointVolumeRayCastMapper * New()
float GetEstimatedRenderTime(vtkRenderer *ren, vtkVolume *vol)
Get an estimate of the rendering time for a given volume / renderer.
float RetrieveRenderTime(vtkRenderer *ren, vtkVolume *vol)
int GradientOpacityRequired
int IntermixIntersectingGeometry
int CheckMinMaxVolumeFlag(unsigned int pos[3], int c)
vtkFixedPointVolumeRayCastCompositeHelper * CompositeHelper
vtkTransform * PerspectiveTransform
unsigned int ToFixedPointPosition(float val)
int CheckMIPMinMaxVolumeFlag(unsigned int pos[3], int c, unsigned short maxIdx, int flip)
float GetEstimatedRenderTime(vtkRenderer *ren)
unsigned short * GetDiffuseShadingTable(int c)
vtkDirectionEncoder * DirectionEncoder
vtkMatrix4x4 * PerspectiveMatrix
unsigned char ** GetGradientMagnitude()
float InteractiveSampleDistance
friend VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void *arg)
void PerSubVolumeInitialization(vtkRenderer *, vtkVolume *, int)
vtkImageData * SavedGradientsInput
vtkTimeStamp SavedParametersMTime
unsigned short ** GradientNormal
void LookupColorUC(unsigned short *colorTable, unsigned short *scalarOpacityTable, unsigned short index, unsigned char color[4])
vtkTransform * VoxelsToViewTransform
int ComputeRowBounds(vtkRenderer *ren, int imageFlag, int rowBoundsFlag, int volumeExtent[6])
void FixedPointIncrement(unsigned int position[3], unsigned int increment[3])
void LookupAndCombineIndependentColorsUC(unsigned short *colorTable[4], unsigned short *scalarOpacityTable[4], unsigned short index[4], float weights[4], int components, unsigned char color[4])
vtkMatrix4x4 * WorldToVoxelsMatrix
vtkVolumeRayCastSpaceLeapingImageFilter * SpaceLeapFilter
void PerVolumeInitialization(vtkRenderer *, vtkVolume *)
void CreateCanonicalView(vtkVolume *volume, vtkImageData *image, int blend_mode, double viewDirection[3], double viewUp[3])
int PerImageInitialization(vtkRenderer *, vtkVolume *, int, double *, double *, int *)
unsigned int FixedPointCroppingRegionPlanes[6]
vtkFixedPointRayCastImage * RayCastImage
float * TransformedClippingPlanes
vtkVolume ** RenderVolumeTable
void UpdateMinMaxVolume(vtkVolume *vol)
friend VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void *arg)
vtkDataArray * PreviousScalars
void ComputeMatrices(double volumeOrigin[3], double volumeSpacing[3], int volumeExtent[6], vtkRenderer *ren, vtkVolume *vol)
vtkRenderer ** RenderRendererTable
void ShiftVectorDown(unsigned int in[3], unsigned int out[3])
int UpdateColorTable(vtkVolume *vol)
int NumTransformedClippingPlanes
unsigned char * ContiguousGradientMagnitude
int AutoAdjustSampleDistances
int UpdateGradients(vtkVolume *vol)
vtkDataArray * CurrentScalars
~vtkFixedPointVolumeRayCastMapper()
unsigned int CroppingRegionMask[27]
unsigned short ** GetGradientNormal()
void LookupDependentColorUC(unsigned short *colorTable, unsigned short *scalarOpacityTable, unsigned short index[4], int components, unsigned char color[4])
int CheckIfCropped(unsigned int pos[3])
int NumberOfGradientSlices
vtkMatrix4x4 * VoxelsToViewMatrix
topologically and geometrically regular array of data
a simple class to control print indentation
represent and manipulate 4x4 transformation matrices
A class for performing multithreaded execution.
Defines a 1D piecewise function.
maintain a list of planes
helper class that draws the image to the screen
create a window for renderers to draw into
abstract specification for renderers
record modification and/or execution time
Timer support and logging.
Abstract class for a volume mapper.
Builds the space leaping data structure.
represents a volume (data & properties) in a rendered scene
window superclass for vtkRenderWindow
VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void *arg)
VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void *arg)
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkBooleanMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
#define VTK_THREAD_RETURN_TYPE