|  | VTK
    9.0.1
    | 
 
 
 
Go to the documentation of this file.
   65 #ifndef vtkFixedPointVolumeRayCastMapper_h 
   66 #define vtkFixedPointVolumeRayCastMapper_h 
   68 #include "vtkRenderingVolumeModule.h"  
   71 #define VTKKW_FP_SHIFT 15 
   72 #define VTKKW_FPMM_SHIFT 17 
   73 #define VTKKW_FP_MASK 0x7fff 
   74 #define VTKKW_FP_SCALE 32767.0 
  116   vtkSetMacro(SampleDistance, 
float);
 
  117   vtkGetMacro(SampleDistance, 
float);
 
  128   vtkSetMacro(InteractiveSampleDistance, 
float);
 
  129   vtkGetMacro(InteractiveSampleDistance, 
float);
 
  140   vtkSetClampMacro(ImageSampleDistance, 
float, 0.1f, 100.0f);
 
  141   vtkGetMacro(ImageSampleDistance, 
float);
 
  149   vtkSetClampMacro(MinimumImageSampleDistance, 
float, 0.1f, 100.0f);
 
  150   vtkGetMacro(MinimumImageSampleDistance, 
float);
 
  158   vtkSetClampMacro(MaximumImageSampleDistance, 
float, 0.1f, 100.0f);
 
  159   vtkGetMacro(MaximumImageSampleDistance, 
float);
 
  172   vtkSetClampMacro(AutoAdjustSampleDistances, 
vtkTypeBool, 0, 1);
 
  173   vtkGetMacro(AutoAdjustSampleDistances, 
vtkTypeBool);
 
  174   vtkBooleanMacro(AutoAdjustSampleDistances, 
vtkTypeBool);
 
  186   vtkSetClampMacro(LockSampleDistanceToInputSpacing, 
vtkTypeBool, 0, 1);
 
  187   vtkGetMacro(LockSampleDistanceToInputSpacing, 
vtkTypeBool);
 
  188   vtkBooleanMacro(LockSampleDistanceToInputSpacing, 
vtkTypeBool);
 
  197   void SetNumberOfThreads(
int num);
 
  198   int GetNumberOfThreads();
 
  206   vtkSetClampMacro(IntermixIntersectingGeometry, 
vtkTypeBool, 0, 1);
 
  207   vtkGetMacro(IntermixIntersectingGeometry, 
vtkTypeBool);
 
  208   vtkBooleanMacro(IntermixIntersectingGeometry, 
vtkTypeBool);
 
  219   float ComputeRequiredImageSampleDistance(
float desiredTime, 
vtkRenderer* ren);
 
  229   unsigned int ToFixedPointPosition(
float val);
 
  230   void ToFixedPointPosition(
float in[3], 
unsigned int out[3]);
 
  231   unsigned int ToFixedPointDirection(
float dir);
 
  232   void ToFixedPointDirection(
float in[3], 
unsigned int out[3]);
 
  233   void FixedPointIncrement(
unsigned int position[3], 
unsigned int increment[3]);
 
  234   void GetFloatTripleFromPointer(
float v[3], 
float* ptr);
 
  235   void GetUIntTripleFromPointer(
unsigned int v[3], 
unsigned int* ptr);
 
  236   void ShiftVectorDown(
unsigned int in[3], 
unsigned int out[3]);
 
  237   int CheckMinMaxVolumeFlag(
unsigned int pos[3], 
int c);
 
  238   int CheckMIPMinMaxVolumeFlag(
unsigned int pos[3], 
int c, 
unsigned short maxIdx, 
int flip);
 
  240   void LookupColorUC(
unsigned short* colorTable, 
unsigned short* scalarOpacityTable,
 
  241     unsigned short index, 
unsigned char color[4]);
 
  242   void LookupDependentColorUC(
unsigned short* colorTable, 
unsigned short* scalarOpacityTable,
 
  243     unsigned short index[4], 
int components, 
unsigned char color[4]);
 
  244   void LookupAndCombineIndependentColorsUC(
unsigned short* colorTable[4],
 
  245     unsigned short* scalarOpacityTable[4], 
unsigned short index[4], 
float weights[4],
 
  246     int components, 
unsigned char color[4]);
 
  247   int CheckIfCropped(
unsigned int pos[3]);
 
  255   vtkGetVectorMacro(TableShift, 
float, 4);
 
  256   vtkGetVectorMacro(TableScale, 
float, 4);
 
  257   vtkGetMacro(ShadingRequired, 
int);
 
  258   vtkGetMacro(GradientOpacityRequired, 
int);
 
  274     int x, 
int y, 
unsigned int pos[3], 
unsigned int dir[3], 
unsigned int* numSteps);
 
  278   int ShouldUseNearestNeighborInterpolation(
vtkVolume* vol);
 
  293   void RenderSubVolume();
 
  298     double viewDirection[3], 
double viewUp[3]);
 
  308     return this->RetrieveRenderTime(ren, vol);
 
  326   vtkSetMacro(FinalColorWindow, 
float);
 
  327   vtkGetMacro(FinalColorWindow, 
float);
 
  328   vtkSetMacro(FinalColorLevel, 
float);
 
  329   vtkGetMacro(FinalColorLevel, 
float);
 
  335   vtkGetMacro(FlipMIPComparison, 
int);
 
  369   void ComputeMatrices(
double volumeOrigin[3], 
double volumeSpacing[3], 
int volumeExtent[6],
 
  372   int ComputeRowBounds(
vtkRenderer* ren, 
int imageFlag, 
int rowBoundsFlag, 
int volumeExtent[6]);
 
  418   int SavedColorChannels[4];
 
  419   float SavedScalarOpacityDistance[4];
 
  429   unsigned short ColorTable[4][32768 * 3];
 
  430   unsigned short ScalarOpacityTable[4][32768];
 
  431   unsigned short GradientOpacityTable[4][256];
 
  436   float GradientMagnitudeScale[4];
 
  437   float GradientMagnitudeShift[4];
 
  452   unsigned short DiffuseShadingTable[4][65536 * 3];
 
  453   unsigned short SpecularShadingTable[4][65536 * 3];
 
  464   int ClipRayAgainstVolume(
 
  465     float rayStart[3], 
float rayEnd[3], 
float rayDirection[3], 
double bounds[6]);
 
  470   void UpdateCroppingRegions();
 
  474   int ClipRayAgainstClippingPlanes(
 
  475     float rayStart[3], 
float rayEnd[3], 
int numClippingPlanes, 
float* clippingPlanes);
 
  477   unsigned int FixedPointCroppingRegionPlanes[6];
 
  478   unsigned int CroppingRegionMask[27];
 
  483   float GetZBufferValue(
int x, 
int y);
 
  492   float ViewToVoxelsArray[16];
 
  493   float WorldToVoxelsArray[16];
 
  494   float VoxelsToWorldArray[16];
 
  496   double CroppingBounds[6];
 
  501   double SavedSpacing[3];
 
  505   int MinMaxVolumeSize[4];
 
  511   void FillInMaxGradientMagnitudes(
int fullDim[3], 
int smallDim[3]);
 
  518   void ApplyFinalColorWindowLevel();
 
  546   float in[3], 
unsigned int out[3])
 
  548   out[0] = ((in[0] < 0.0) ? (
static_cast<unsigned int>(-in[0] * 
VTKKW_FP_SCALE + 0.5))
 
  549                           : (0x80000000 + 
static_cast<unsigned int>(in[0] * 
VTKKW_FP_SCALE + 0.5)));
 
  550   out[1] = ((in[1] < 0.0) ? (
static_cast<unsigned int>(-in[1] * 
VTKKW_FP_SCALE + 0.5))
 
  551                           : (0x80000000 + 
static_cast<unsigned int>(in[1] * 
VTKKW_FP_SCALE + 0.5)));
 
  552   out[2] = ((in[2] < 0.0) ? (
static_cast<unsigned int>(-in[2] * 
VTKKW_FP_SCALE + 0.5))
 
  553                           : (0x80000000 + 
static_cast<unsigned int>(in[2] * 
VTKKW_FP_SCALE + 0.5)));
 
  557   unsigned int position[3], 
unsigned int increment[3])
 
  559   if (increment[0] & 0x80000000)
 
  561     position[0] += (increment[0] & 0x7fffffff);
 
  567   if (increment[1] & 0x80000000)
 
  569     position[1] += (increment[1] & 0x7fffffff);
 
  575   if (increment[2] & 0x80000000)
 
  577     position[2] += (increment[2] & 0x7fffffff);
 
  593   unsigned int v[3], 
unsigned int* ptr)
 
  601   unsigned int in[3], 
unsigned int out[3])
 
  612         mmpos[1] * 
static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
 
  615   return ((*(this->
MinMaxVolume + 3 * offset + 2)) & 0x00ff);
 
  619   unsigned int mmpos[3], 
int c, 
unsigned short maxIdx, 
int flip)
 
  623         mmpos[1] * 
static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
 
  634       return (*(this->
MinMaxVolume + 3 * offset + 1) > maxIdx);
 
  644   unsigned short* scalarOpacityTable, 
unsigned short index, 
unsigned char color[4])
 
  646   unsigned short alpha = scalarOpacityTable[
index];
 
  647   color[0] = 
static_cast<unsigned char>(
 
  649   color[1] = 
static_cast<unsigned char>(
 
  651   color[2] = 
static_cast<unsigned char>(
 
  657   unsigned short* scalarOpacityTable, 
unsigned short index[4], 
int components,
 
  658   unsigned char color[4])
 
  660   unsigned short alpha;
 
  665       color[0] = 
static_cast<unsigned char>(
 
  667       color[1] = 
static_cast<unsigned char>(
 
  669       color[2] = 
static_cast<unsigned char>(
 
  684   unsigned short* colorTable[4], 
unsigned short* scalarOpacityTable[4], 
unsigned short index[4],
 
  685   float weights[4], 
int components, 
unsigned char color[4])
 
  687   unsigned int tmp[4] = { 0, 0, 0, 0 };
 
  689   for (
int i = 0; i < components; i++)
 
  691     unsigned short alpha =
 
  692       static_cast<unsigned short>(
static_cast<float>(scalarOpacityTable[i][
index[i]]) * weights[i]);
 
  693     tmp[0] += 
static_cast<unsigned char>(
 
  695     tmp[1] += 
static_cast<unsigned char>(
 
  697     tmp[2] += 
static_cast<unsigned char>(
 
  702   color[0] = 
static_cast<unsigned char>((tmp[0] > 255) ? (255) : (tmp[0]));
 
  703   color[1] = 
static_cast<unsigned char>((tmp[1] > 255) ? (255) : (tmp[1]));
 
  704   color[2] = 
static_cast<unsigned char>((tmp[2] > 255) ? (255) : (tmp[2]));
 
  705   color[3] = 
static_cast<unsigned char>((tmp[3] > 255) ? (255) : (tmp[3]));
 
  
unsigned short * GetSpecularShadingTable(int c)
unsigned short * ContiguousGradientNormal
vtkRenderer ** RenderRendererTable
unsigned char ** GetGradientMagnitude()
Abstract class for a volume mapper.
unsigned short ** GetGradientNormal()
vtkMultiThreader * Threader
represents a volume (data & properties) in a rendered scene
vtkImageData * SavedMinMaxInput
helper class for a ray cast image
helper class that draws the image to the screen
vtkFixedPointVolumeRayCastMIPHelper * MIPHelper
vtkTypeBool AutoAdjustSampleDistances
A fixed point mapper for volumes.
unsigned short * GetGradientOpacityTable(int c)
VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void *arg)
record modification and/or execution time
int GradientOpacityRequired
vtkVolume ** RenderVolumeTable
vtkFixedPointRayCastImage * RayCastImage
unsigned short * GetDiffuseShadingTable(int c)
void ShiftVectorDown(unsigned int in[3], unsigned int out[3])
A helper that generates MIP images for the volume ray cast mapper.
void LookupAndCombineIndependentColorsUC(unsigned short *colorTable[4], unsigned short *scalarOpacityTable[4], unsigned short index[4], float weights[4], int components, unsigned char color[4])
unsigned int FixedPointCroppingRegionPlanes[6]
vtkFixedPointVolumeRayCastCompositeShadeHelper * CompositeShadeHelper
float MinimumImageSampleDistance
void FixedPointIncrement(unsigned int position[3], unsigned int increment[3])
Use finite differences to estimate gradient.
float ImageSampleDistance
abstract superclass for arrays of numeric data
vtkMatrix4x4 * ViewToWorldMatrix
float * TransformedClippingPlanes
Defines a transfer function for mapping a property to an RGB color value.
vtkImageData * SavedGradientsInput
A helper that generates composite images for the volume ray cast mapper.
float OldImageSampleDistance
vtkDirectionEncoder * DirectionEncoder
float MaximumImageSampleDistance
window superclass for vtkRenderWindow
int NumberOfGradientSlices
vtkMatrix4x4 * VoxelsToViewMatrix
vtkMatrix4x4 * PerspectiveMatrix
vtkImageData * SavedParametersInput
int NumTransformedClippingPlanes
void GetFloatTripleFromPointer(float v[3], float *ptr)
vtkMatrix4x4 * VoxelsToWorldMatrix
A class for performing multithreaded execution.
vtkMatrix4x4 * ViewToVoxelsMatrix
unsigned int CroppingRegionMask[27]
Compute shading tables for encoded normals.
float InteractiveSampleDistance
void Render(vtkRenderer *ren, vtkVolume *vol) override=0
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
unsigned int ToFixedPointDirection(float dir)
vtkImageData * MinMaxVolumeCache
vtkMatrix4x4 * WorldToVoxelsMatrix
int CheckMIPMinMaxVolumeFlag(unsigned int pos[3], int c, unsigned short maxIdx, int flip)
vtkTypeBool IntermixIntersectingGeometry
topologically and geometrically regular array of data
a simple class to control print indentation
represent and manipulate 4x4 transformation matrices
Builds the space leaping data structure.
int CheckMinMaxVolumeFlag(unsigned int pos[3], int c)
vtkTransform * VoxelsTransform
vtkTimeStamp SavedGradientsMTime
vtkEncodedGradientShader * GradientShader
vtkRenderWindow * RenderWindow
unsigned char * ContiguousGradientMagnitude
vtkTransform * VoxelsToViewTransform
vtkFixedPointVolumeRayCastCompositeGOHelper * CompositeGOHelper
unsigned short * GetScalarOpacityTable(int c)
void LookupColorUC(unsigned short *colorTable, unsigned short *scalarOpacityTable, unsigned short index, unsigned char color[4])
void LookupDependentColorUC(unsigned short *colorTable, unsigned short *scalarOpacityTable, unsigned short index[4], int components, unsigned char color[4])
VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void *arg)
vtkTransform * PerspectiveTransform
#define VTK_THREAD_RETURN_TYPE
int CheckIfCropped(unsigned int pos[3])
Defines a 1D piecewise function.
vtkDataArray * CurrentScalars
void ReleaseGraphicsResources(vtkWindow *) override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
void GetUIntTripleFromPointer(unsigned int v[3], unsigned int *ptr)
static vtkAlgorithm * New()
Timer support and logging.
float MinimumViewDistance
vtkRayCastImageDisplayHelper * ImageDisplayHelper
vtkVolumeRayCastSpaceLeapingImageFilter * SpaceLeapFilter
float GetEstimatedRenderTime(vtkRenderer *ren, vtkVolume *vol)
Get an estimate of the rendering time for a given volume / renderer.
unsigned short * GetColorTable(int c)
abstract specification for renderers
encode a direction into a one or two byte value
vtkDataArray * PreviousScalars
vtkFiniteDifferenceGradientEstimator * GradientEstimator
unsigned short ** GradientNormal
A helper that generates composite images for the volume ray cast mapper.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkTypeBool LockSampleDistanceToInputSpacing
maintain a list of planes
create a window for renderers to draw into
A helper that generates composite images for the volume ray cast mapper.
vtkMatrix4x4 * VolumeMatrix
unsigned int ToFixedPointPosition(float val)
A helper that generates composite images for the volume ray cast mapper.
vtkFixedPointVolumeRayCastCompositeGOShadeHelper * CompositeGOShadeHelper
vtkFixedPointVolumeRayCastCompositeHelper * CompositeHelper
float GetEstimatedRenderTime(vtkRenderer *ren)
unsigned short * MinMaxVolume
float SavedSampleDistance
unsigned char ** GradientMagnitude
vtkTimeStamp SavedParametersMTime