56 #ifndef vtkFixedPointVolumeRayCastMapper_h
57 #define vtkFixedPointVolumeRayCastMapper_h
59 #include "vtkRenderingVolumeModule.h"
62 #define VTKKW_FP_SHIFT 15
63 #define VTKKW_FPMM_SHIFT 17
64 #define VTKKW_FP_MASK 0x7fff
65 #define VTKKW_FP_SCALE 32767.0
107 vtkSetMacro( SampleDistance,
float );
108 vtkGetMacro( SampleDistance,
float );
119 vtkSetMacro( InteractiveSampleDistance,
float );
120 vtkGetMacro( InteractiveSampleDistance,
float );
131 vtkSetClampMacro( ImageSampleDistance,
float, 0.1f, 100.0f );
132 vtkGetMacro( ImageSampleDistance,
float );
140 vtkSetClampMacro( MinimumImageSampleDistance,
float, 0.1f, 100.0f );
141 vtkGetMacro( MinimumImageSampleDistance,
float );
149 vtkSetClampMacro( MaximumImageSampleDistance,
float, 0.1f, 100.0f );
150 vtkGetMacro( MaximumImageSampleDistance,
float );
163 vtkSetClampMacro( AutoAdjustSampleDistances,
vtkTypeBool, 0, 1 );
164 vtkGetMacro( AutoAdjustSampleDistances,
vtkTypeBool );
165 vtkBooleanMacro( AutoAdjustSampleDistances,
vtkTypeBool );
177 vtkSetClampMacro( LockSampleDistanceToInputSpacing,
vtkTypeBool, 0, 1 );
178 vtkGetMacro( LockSampleDistanceToInputSpacing,
vtkTypeBool );
179 vtkBooleanMacro( LockSampleDistanceToInputSpacing,
vtkTypeBool );
188 void SetNumberOfThreads(
int num );
189 int GetNumberOfThreads();
197 vtkSetClampMacro( IntermixIntersectingGeometry,
vtkTypeBool, 0, 1 );
198 vtkGetMacro( IntermixIntersectingGeometry,
vtkTypeBool );
199 vtkBooleanMacro( IntermixIntersectingGeometry,
vtkTypeBool );
210 float ComputeRequiredImageSampleDistance(
float desiredTime,
212 float ComputeRequiredImageSampleDistance(
float desiredTime,
223 unsigned int ToFixedPointPosition(
float val );
224 void ToFixedPointPosition(
float in[3],
unsigned int out[3] );
225 unsigned int ToFixedPointDirection(
float dir );
226 void ToFixedPointDirection(
float in[3],
unsigned int out[3] );
227 void FixedPointIncrement(
unsigned int position[3],
unsigned int increment[3] );
228 void GetFloatTripleFromPointer(
float v[3],
float *ptr );
229 void GetUIntTripleFromPointer(
unsigned int v[3],
unsigned int *ptr );
230 void ShiftVectorDown(
unsigned int in[3],
unsigned int out[3] );
231 int CheckMinMaxVolumeFlag(
unsigned int pos[3],
int c );
232 int CheckMIPMinMaxVolumeFlag(
unsigned int pos[3],
int c,
unsigned short maxIdx,
int flip );
234 void LookupColorUC(
unsigned short *colorTable,
235 unsigned short *scalarOpacityTable,
236 unsigned short index,
237 unsigned char color[4] );
238 void LookupDependentColorUC(
unsigned short *colorTable,
239 unsigned short *scalarOpacityTable,
240 unsigned short index[4],
242 unsigned char color[4] );
243 void LookupAndCombineIndependentColorsUC(
244 unsigned short *colorTable[4],
245 unsigned short *scalarOpacityTable[4],
246 unsigned short index[4],
249 unsigned char color[4] );
250 int CheckIfCropped(
unsigned int pos[3] );
258 vtkGetVectorMacro( TableShift,
float, 4 );
259 vtkGetVectorMacro( TableScale,
float, 4 );
260 vtkGetMacro( ShadingRequired,
int );
261 vtkGetMacro( GradientOpacityRequired,
int );
277 void ComputeRayInfo(
int x,
int y,
280 unsigned int *numSteps );
282 void InitializeRayInfo(
vtkVolume *vol );
284 int ShouldUseNearestNeighborInterpolation(
vtkVolume *vol );
297 double *,
double *,
int * );
300 void RenderSubVolume();
304 void CreateCanonicalView(
vtkVolume *volume,
307 double viewDirection[3],
318 {
return this->RetrieveRenderTime( ren, vol ); }
320 {
return this->RetrieveRenderTime( ren ); }
337 vtkSetMacro( FinalColorWindow,
float );
338 vtkGetMacro( FinalColorWindow,
float );
339 vtkSetMacro( FinalColorLevel,
float );
340 vtkGetMacro( FinalColorLevel,
float );
347 vtkGetMacro( FlipMIPComparison,
int );
381 void ComputeMatrices(
double volumeOrigin[3],
382 double volumeSpacing[3],
388 int imageFlag,
int rowBoundsFlag,
389 int volumeExtent[6]);
435 int SavedColorChannels[4];
436 float SavedScalarOpacityDistance[4];
447 unsigned short ColorTable[4][32768*3];
448 unsigned short ScalarOpacityTable[4][32768];
449 unsigned short GradientOpacityTable[4][256];
454 float GradientMagnitudeScale[4];
455 float GradientMagnitudeShift[4];
470 unsigned short DiffuseShadingTable [4][65536*3];
471 unsigned short SpecularShadingTable[4][65536*3];
482 int ClipRayAgainstVolume(
float rayStart[3],
484 float rayDirection[3],
491 void UpdateCroppingRegions();
495 int ClipRayAgainstClippingPlanes(
float rayStart[3],
497 int numClippingPlanes,
498 float *clippingPlanes );
500 unsigned int FixedPointCroppingRegionPlanes[6];
501 unsigned int CroppingRegionMask[27];
506 float GetZBufferValue(
int x,
int y );
515 float ViewToVoxelsArray[16];
516 float WorldToVoxelsArray[16];
517 float VoxelsToWorldArray[16];
519 double CroppingBounds[6];
524 double SavedSpacing[3];
529 int MinMaxVolumeSize[4];
534 void UpdateMinMaxVolume(
vtkVolume *vol );
535 void FillInMaxGradientMagnitudes(
int fullDim[3],
543 void ApplyFinalColorWindowLevel();
574 out[0] = ((in[0]<0.0)?
578 out[1] = ((in[1]<0.0)?
582 out[2] = ((in[2]<0.0)?
590 if ( increment[0]&0x80000000 )
592 position[0] += (increment[0]&0x7fffffff);
598 if ( increment[1]&0x80000000 )
600 position[1] += (increment[1]&0x7fffffff);
606 if ( increment[2]&0x80000000 )
608 position[2] += (increment[2]&0x7fffffff);
632 unsigned int out[3] )
643 ( mmpos[2]*static_cast<vtkIdType>(
645 mmpos[1]*static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) +
646 mmpos[0] ) + static_cast<vtkIdType>(c);
652 unsigned short maxIdx,
int flip )
656 ( mmpos[2]*static_cast<vtkIdType>(
658 mmpos[1]*static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) +
659 mmpos[0] ) + static_cast<vtkIdType>(c);
669 return ( *(this->
MinMaxVolume + 3*offset + 1) > maxIdx );
679 unsigned short *scalarOpacityTable,
680 unsigned short index,
681 unsigned char color[4] )
683 unsigned short alpha = scalarOpacityTable[
index];
684 color[0] = static_cast<unsigned char>
686 color[1] = static_cast<unsigned char>
688 color[2] = static_cast<unsigned char>
694 unsigned short *scalarOpacityTable,
695 unsigned short index[4],
697 unsigned char color[4] )
699 unsigned short alpha;
700 switch ( components )
704 color[0] = static_cast<unsigned char>
706 color[1] = static_cast<unsigned char>
708 color[2] = static_cast<unsigned char>
724 unsigned short *scalarOpacityTable[4],
725 unsigned short index[4],
728 unsigned char color[4] )
730 unsigned int tmp[4] = {0,0,0,0};
732 for (
int i = 0; i < components; i++ )
734 unsigned short alpha = static_cast<unsigned short>(static_cast<float>(scalarOpacityTable[i][
index[i]])*weights[i]);
741 color[0] = static_cast<unsigned char>((tmp[0]>255)?(255):(tmp[0]));
742 color[1] = static_cast<unsigned char>((tmp[1]>255)?(255):(tmp[1]));
743 color[2] = static_cast<unsigned char>((tmp[2]>255)?(255):(tmp[2]));
744 color[3] = static_cast<unsigned char>((tmp[3]>255)?(255):(tmp[3]));