VTK  9.1.0
vtkFixedPointVolumeRayCastMapper.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkFixedPointVolumeRayCastMapper.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 =========================================================================*/
105 #ifndef vtkFixedPointVolumeRayCastMapper_h
106 #define vtkFixedPointVolumeRayCastMapper_h
107 
108 #include "vtkRenderingVolumeModule.h" // For export macro
109 #include "vtkThreads.h" // for VTK_THREAD_RETURN_TYPE
110 #include "vtkVolumeMapper.h"
111 
112 #define VTKKW_FP_SHIFT 15
113 #define VTKKW_FPMM_SHIFT 17
114 #define VTKKW_FP_MASK 0x7fff
115 #define VTKKW_FP_SCALE 32767.0
116 
117 class vtkMatrix4x4;
118 class vtkMultiThreader;
119 class vtkPlaneCollection;
120 class vtkRenderer;
121 class vtkTimerLog;
122 class vtkVolume;
123 class vtkTransform;
124 class vtkRenderWindow;
133 class vtkDirectionEncoder;
138 class vtkDataArray;
139 
140 // Forward declaration needed for use by friend declaration below.
141 VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void* arg);
142 VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void* arg);
143 
144 class VTKRENDERINGVOLUME_EXPORT vtkFixedPointVolumeRayCastMapper : public vtkVolumeMapper
145 {
146 public:
149  void PrintSelf(ostream& os, vtkIndent indent) override;
150 
152 
157  vtkSetMacro(SampleDistance, float);
158  vtkGetMacro(SampleDistance, float);
160 
162 
169  vtkSetMacro(InteractiveSampleDistance, float);
170  vtkGetMacro(InteractiveSampleDistance, float);
172 
174 
181  vtkSetClampMacro(ImageSampleDistance, float, 0.1f, 100.0f);
182  vtkGetMacro(ImageSampleDistance, float);
184 
186 
190  vtkSetClampMacro(MinimumImageSampleDistance, float, 0.1f, 100.0f);
191  vtkGetMacro(MinimumImageSampleDistance, float);
193 
195 
199  vtkSetClampMacro(MaximumImageSampleDistance, float, 0.1f, 100.0f);
200  vtkGetMacro(MaximumImageSampleDistance, float);
202 
204 
213  vtkSetClampMacro(AutoAdjustSampleDistances, vtkTypeBool, 0, 1);
214  vtkGetMacro(AutoAdjustSampleDistances, vtkTypeBool);
215  vtkBooleanMacro(AutoAdjustSampleDistances, vtkTypeBool);
217 
219 
227  vtkSetClampMacro(LockSampleDistanceToInputSpacing, vtkTypeBool, 0, 1);
228  vtkGetMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
229  vtkBooleanMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
231 
233 
238  void SetNumberOfThreads(int num);
241 
243 
247  vtkSetClampMacro(IntermixIntersectingGeometry, vtkTypeBool, 0, 1);
248  vtkGetMacro(IntermixIntersectingGeometry, vtkTypeBool);
249  vtkBooleanMacro(IntermixIntersectingGeometry, vtkTypeBool);
251 
253 
260  float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer* ren);
261  float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer* ren, vtkVolume* vol);
263 
268  void Render(vtkRenderer*, vtkVolume*) override;
269 
270  unsigned int ToFixedPointPosition(float val);
271  void ToFixedPointPosition(float in[3], unsigned int out[3]);
272  unsigned int ToFixedPointDirection(float dir);
273  void ToFixedPointDirection(float in[3], unsigned int out[3]);
274  void FixedPointIncrement(unsigned int position[3], unsigned int increment[3]);
275  void GetFloatTripleFromPointer(float v[3], float* ptr);
276  void GetUIntTripleFromPointer(unsigned int v[3], unsigned int* ptr);
277  void ShiftVectorDown(unsigned int in[3], unsigned int out[3]);
278  int CheckMinMaxVolumeFlag(unsigned int pos[3], int c);
279  int CheckMIPMinMaxVolumeFlag(unsigned int pos[3], int c, unsigned short maxIdx, int flip);
280 
281  void LookupColorUC(unsigned short* colorTable, unsigned short* scalarOpacityTable,
282  unsigned short index, unsigned char color[4]);
283  void LookupDependentColorUC(unsigned short* colorTable, unsigned short* scalarOpacityTable,
284  unsigned short index[4], int components, unsigned char color[4]);
285  void LookupAndCombineIndependentColorsUC(unsigned short* colorTable[4],
286  unsigned short* scalarOpacityTable[4], unsigned short index[4], float weights[4],
287  int components, unsigned char color[4]);
288  int CheckIfCropped(unsigned int pos[3]);
289 
290  vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
291  vtkGetObjectMacro(MIPHelper, vtkFixedPointVolumeRayCastMIPHelper);
292  vtkGetObjectMacro(CompositeHelper, vtkFixedPointVolumeRayCastCompositeHelper);
293  vtkGetObjectMacro(CompositeGOHelper, vtkFixedPointVolumeRayCastCompositeGOHelper);
294  vtkGetObjectMacro(CompositeGOShadeHelper, vtkFixedPointVolumeRayCastCompositeGOShadeHelper);
295  vtkGetObjectMacro(CompositeShadeHelper, vtkFixedPointVolumeRayCastCompositeShadeHelper);
296  vtkGetVectorMacro(TableShift, float, 4);
297  vtkGetVectorMacro(TableScale, float, 4);
298  vtkGetMacro(ShadingRequired, int);
299  vtkGetMacro(GradientOpacityRequired, int);
300 
301  vtkGetObjectMacro(CurrentScalars, vtkDataArray);
302  vtkGetObjectMacro(PreviousScalars, vtkDataArray);
303 
304  int* GetRowBounds() { return this->RowBounds; }
305  unsigned short* GetColorTable(int c) { return this->ColorTable[c]; }
306  unsigned short* GetScalarOpacityTable(int c) { return this->ScalarOpacityTable[c]; }
307  unsigned short* GetGradientOpacityTable(int c) { return this->GradientOpacityTable[c]; }
308  vtkVolume* GetVolume() { return this->Volume; }
309  unsigned short** GetGradientNormal() { return this->GradientNormal; }
310  unsigned char** GetGradientMagnitude() { return this->GradientMagnitude; }
311  unsigned short* GetDiffuseShadingTable(int c) { return this->DiffuseShadingTable[c]; }
312  unsigned short* GetSpecularShadingTable(int c) { return this->SpecularShadingTable[c]; }
313 
315  int x, int y, unsigned int pos[3], unsigned int dir[3], unsigned int* numSteps);
316 
318 
320 
322 
328  vtkGetObjectMacro(RayCastImage, vtkFixedPointRayCastImage);
330 
331  int PerImageInitialization(vtkRenderer*, vtkVolume*, int, double*, double*, int*);
336  void AbortRender();
337 
338  void CreateCanonicalView(vtkVolume* volume, vtkImageData* image, int blend_mode,
339  double viewDirection[3], double viewUp[3]);
340 
348  {
349  return this->RetrieveRenderTime(ren, vol);
350  }
351  float GetEstimatedRenderTime(vtkRenderer* ren) { return this->RetrieveRenderTime(ren); }
352 
354 
367  vtkSetMacro(FinalColorWindow, float);
368  vtkGetMacro(FinalColorWindow, float);
369  vtkSetMacro(FinalColorLevel, float);
370  vtkGetMacro(FinalColorLevel, float);
372 
373  // Here to be used by the mapper to tell the helper
374  // to flip the MIP comparison in order to support
375  // minimum intensity blending
376  vtkGetMacro(FlipMIPComparison, int);
377 
385 
386 protected:
389 
390  // The helper class that displays the image
392 
393  // The distance between sample points along the ray
396 
397  // The distance between rays in the image
403 
404  // Saved values used to restore
407 
408  // Internal method for computing matrices needed during
409  // ray casting
410  void ComputeMatrices(double inputOrigin[3], double inputSpacing[3], int inputExtent[6],
411  vtkRenderer* ren, vtkVolume* vol);
412 
413  int ComputeRowBounds(vtkRenderer* ren, int imageFlag, int rowBoundsFlag, int inputExtent[6]);
414 
416 
417  friend VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void* arg);
418  friend VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void* arg);
419 
421 
428 
430 
434 
435  // This object encapsulated the image and all related information
437 
438  int* RowBounds;
440 
446 
447  void StoreRenderTime(vtkRenderer* ren, vtkVolume* vol, float t);
450 
452 
454 
455  vtkColorTransferFunction* SavedRGBFunction[4];
456  vtkPiecewiseFunction* SavedGrayFunction[4];
457  vtkPiecewiseFunction* SavedScalarOpacityFunction[4];
458  vtkPiecewiseFunction* SavedGradientOpacityFunction[4];
459  int SavedColorChannels[4];
460  float SavedScalarOpacityDistance[4];
464 
467 
469 
470  unsigned short ColorTable[4][32768 * 3];
471  unsigned short ScalarOpacityTable[4][32768];
472  unsigned short GradientOpacityTable[4][256];
473  int TableSize[4];
474  float TableScale[4];
475  float TableShift[4];
476 
477  float GradientMagnitudeScale[4];
478  float GradientMagnitudeShift[4];
479 
480  unsigned short** GradientNormal;
481  unsigned char** GradientMagnitude;
482  unsigned short* ContiguousGradientNormal;
484 
486 
488 
490 
492 
493  unsigned short DiffuseShadingTable[4][65536 * 3];
494  unsigned short SpecularShadingTable[4][65536 * 3];
495 
498 
501 
504 
506  double rayStart[3], double rayEnd[3], float rayDirection[3], double bounds[6]);
507 
512 
514 
516  double rayStart[3], double rayEnd[3], int numClippingPlanes, float* clippingPlanes);
517 
518  unsigned int FixedPointCroppingRegionPlanes[6];
519  unsigned int CroppingRegionMask[27];
520 
521  // Get the ZBuffer value corresponding to location (x,y) where (x,y)
522  // are indexing into the ImageInUse image. This must be converted to
523  // the zbuffer image coordinates. Nearest neighbor value is returned.
524  float GetZBufferValue(int x, int y);
525 
531 
532  // Some variables used for ray computation
533  float ViewToVoxelsArray[16];
534  float WorldToVoxelsArray[16];
535  float VoxelsToWorldArray[16];
536 
537  double CroppingBounds[6];
538 
541 
542  double SavedSpacing[3];
543 
544  // Min Max structure used to do space leaping
545  unsigned short* MinMaxVolume;
546  int MinMaxVolumeSize[4];
550 
552  void FillInMaxGradientMagnitudes(int fullDim[3], int smallDim[3]);
553 
556 
558 
560 
561 private:
563  void operator=(const vtkFixedPointVolumeRayCastMapper&) = delete;
564 
565  bool ThreadWarning;
566 };
567 
569 {
570  return static_cast<unsigned int>(val * VTKKW_FP_SCALE + 0.5);
571 }
572 
573 inline void vtkFixedPointVolumeRayCastMapper::ToFixedPointPosition(float in[3], unsigned int out[3])
574 {
575  out[0] = static_cast<unsigned int>(in[0] * VTKKW_FP_SCALE + 0.5);
576  out[1] = static_cast<unsigned int>(in[1] * VTKKW_FP_SCALE + 0.5);
577  out[2] = static_cast<unsigned int>(in[2] * VTKKW_FP_SCALE + 0.5);
578 }
579 
581 {
582  return ((dir < 0.0) ? (static_cast<unsigned int>(-dir * VTKKW_FP_SCALE + 0.5))
583  : (0x80000000 + static_cast<unsigned int>(dir * VTKKW_FP_SCALE + 0.5)));
584 }
585 
587  float in[3], unsigned int out[3])
588 {
589  out[0] = ((in[0] < 0.0) ? (static_cast<unsigned int>(-in[0] * VTKKW_FP_SCALE + 0.5))
590  : (0x80000000 + static_cast<unsigned int>(in[0] * VTKKW_FP_SCALE + 0.5)));
591  out[1] = ((in[1] < 0.0) ? (static_cast<unsigned int>(-in[1] * VTKKW_FP_SCALE + 0.5))
592  : (0x80000000 + static_cast<unsigned int>(in[1] * VTKKW_FP_SCALE + 0.5)));
593  out[2] = ((in[2] < 0.0) ? (static_cast<unsigned int>(-in[2] * VTKKW_FP_SCALE + 0.5))
594  : (0x80000000 + static_cast<unsigned int>(in[2] * VTKKW_FP_SCALE + 0.5)));
595 }
596 
598  unsigned int position[3], unsigned int increment[3])
599 {
600  if (increment[0] & 0x80000000)
601  {
602  position[0] += (increment[0] & 0x7fffffff);
603  }
604  else
605  {
606  position[0] -= increment[0];
607  }
608  if (increment[1] & 0x80000000)
609  {
610  position[1] += (increment[1] & 0x7fffffff);
611  }
612  else
613  {
614  position[1] -= increment[1];
615  }
616  if (increment[2] & 0x80000000)
617  {
618  position[2] += (increment[2] & 0x7fffffff);
619  }
620  else
621  {
622  position[2] -= increment[2];
623  }
624 }
625 
627 {
628  v[0] = *(ptr);
629  v[1] = *(ptr + 1);
630  v[2] = *(ptr + 2);
631 }
632 
634  unsigned int v[3], unsigned int* ptr)
635 {
636  v[0] = *(ptr);
637  v[1] = *(ptr + 1);
638  v[2] = *(ptr + 2);
639 }
640 
642  unsigned int in[3], unsigned int out[3])
643 {
644  out[0] = in[0] >> VTKKW_FP_SHIFT;
645  out[1] = in[1] >> VTKKW_FP_SHIFT;
646  out[2] = in[2] >> VTKKW_FP_SHIFT;
647 }
648 
649 inline int vtkFixedPointVolumeRayCastMapper::CheckMinMaxVolumeFlag(unsigned int mmpos[3], int c)
650 {
651  vtkIdType offset = static_cast<vtkIdType>(this->MinMaxVolumeSize[3]) *
652  (mmpos[2] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0] * this->MinMaxVolumeSize[1]) +
653  mmpos[1] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
654  static_cast<vtkIdType>(c);
655 
656  return ((*(this->MinMaxVolume + 3 * offset + 2)) & 0x00ff);
657 }
658 
660  unsigned int mmpos[3], int c, unsigned short maxIdx, int flip)
661 {
662  vtkIdType offset = static_cast<vtkIdType>(this->MinMaxVolumeSize[3]) *
663  (mmpos[2] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0] * this->MinMaxVolumeSize[1]) +
664  mmpos[1] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
665  static_cast<vtkIdType>(c);
666 
667  if ((*(this->MinMaxVolume + 3 * offset + 2) & 0x00ff))
668  {
669  if (flip)
670  {
671  return (*(this->MinMaxVolume + 3 * offset) < maxIdx);
672  }
673  else
674  {
675  return (*(this->MinMaxVolume + 3 * offset + 1) > maxIdx);
676  }
677  }
678  else
679  {
680  return 0;
681  }
682 }
683 
684 inline void vtkFixedPointVolumeRayCastMapper::LookupColorUC(unsigned short* colorTable,
685  unsigned short* scalarOpacityTable, unsigned short index, unsigned char color[4])
686 {
687  unsigned short alpha = scalarOpacityTable[index];
688  color[0] = static_cast<unsigned char>(
689  (colorTable[3 * index] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
690  color[1] = static_cast<unsigned char>(
691  (colorTable[3 * index + 1] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
692  color[2] = static_cast<unsigned char>(
693  (colorTable[3 * index + 2] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
694  color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
695 }
696 
697 inline void vtkFixedPointVolumeRayCastMapper::LookupDependentColorUC(unsigned short* colorTable,
698  unsigned short* scalarOpacityTable, unsigned short index[4], int components,
699  unsigned char color[4])
700 {
701  unsigned short alpha;
702  switch (components)
703  {
704  case 2:
705  alpha = scalarOpacityTable[index[1]];
706  color[0] = static_cast<unsigned char>(
707  (colorTable[3 * index[0]] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
708  color[1] = static_cast<unsigned char>(
709  (colorTable[3 * index[0] + 1] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
710  color[2] = static_cast<unsigned char>(
711  (colorTable[3 * index[0] + 2] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
712  color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
713  break;
714  case 4:
715  alpha = scalarOpacityTable[index[3]];
716  color[0] = static_cast<unsigned char>((index[0] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
717  color[1] = static_cast<unsigned char>((index[1] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
718  color[2] = static_cast<unsigned char>((index[2] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
719  color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
720  break;
721  }
722 }
723 
725  unsigned short* colorTable[4], unsigned short* scalarOpacityTable[4], unsigned short index[4],
726  float weights[4], int components, unsigned char color[4])
727 {
728  unsigned int tmp[4] = { 0, 0, 0, 0 };
729 
730  for (int i = 0; i < components; i++)
731  {
732  unsigned short alpha =
733  static_cast<unsigned short>(static_cast<float>(scalarOpacityTable[i][index[i]]) * weights[i]);
734  tmp[0] += static_cast<unsigned char>(
735  ((colorTable[i][3 * index[i]]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
736  tmp[1] += static_cast<unsigned char>(
737  ((colorTable[i][3 * index[i] + 1]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
738  tmp[2] += static_cast<unsigned char>(
739  ((colorTable[i][3 * index[i] + 2]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
740  tmp[3] += static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
741  }
742 
743  color[0] = static_cast<unsigned char>((tmp[0] > 255) ? (255) : (tmp[0]));
744  color[1] = static_cast<unsigned char>((tmp[1] > 255) ? (255) : (tmp[1]));
745  color[2] = static_cast<unsigned char>((tmp[2] > 255) ? (255) : (tmp[2]));
746  color[3] = static_cast<unsigned char>((tmp[3] > 255) ? (255) : (tmp[3]));
747 }
748 
750 {
751  int idx;
752 
753  if (pos[2] < this->FixedPointCroppingRegionPlanes[4])
754  {
755  idx = 0;
756  }
757  else if (pos[2] > this->FixedPointCroppingRegionPlanes[5])
758  {
759  idx = 18;
760  }
761  else
762  {
763  idx = 9;
764  }
765 
766  if (pos[1] >= this->FixedPointCroppingRegionPlanes[2])
767  {
768  if (pos[1] > this->FixedPointCroppingRegionPlanes[3])
769  {
770  idx += 6;
771  }
772  else
773  {
774  idx += 3;
775  }
776  }
777 
778  if (pos[0] >= this->FixedPointCroppingRegionPlanes[0])
779  {
780  if (pos[0] > this->FixedPointCroppingRegionPlanes[1])
781  {
782  idx += 2;
783  }
784  else
785  {
786  idx += 1;
787  }
788  }
789 
790  return !(static_cast<unsigned int>(this->CroppingRegionFlags) & this->CroppingRegionMask[idx]);
791 }
792 
793 #endif
Defines a transfer function for mapping a property to an RGB color value.
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:159
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.
void SetRayCastImage(vtkFixedPointRayCastImage *)
Set / Get the underlying image object.
vtkRayCastImageDisplayHelper * ImageDisplayHelper
vtkFixedPointVolumeRayCastMIPHelper * MIPHelper
vtkFixedPointVolumeRayCastCompositeGOHelper * CompositeGOHelper
int ShouldUseNearestNeighborInterpolation(vtkVolume *vol)
void ReleaseGraphicsResources(vtkWindow *) override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
float RetrieveRenderTime(vtkRenderer *ren)
void GetFloatTripleFromPointer(float v[3], float *ptr)
void CaptureZBuffer(vtkRenderer *ren)
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
void StoreRenderTime(vtkRenderer *ren, vtkVolume *vol, float t)
vtkFiniteDifferenceGradientEstimator * GradientEstimator
vtkFixedPointVolumeRayCastCompositeGOShadeHelper * CompositeGOShadeHelper
int ComputeRowBounds(vtkRenderer *ren, int imageFlag, int rowBoundsFlag, int inputExtent[6])
float GetZBufferValue(int x, int y)
void DisplayRenderedImage(vtkRenderer *, vtkVolume *)
void FillInMaxGradientMagnitudes(int fullDim[3], int smallDim[3])
void InitializeRayInfo(vtkVolume *vol)
void SetNumberOfThreads(int num)
Set/Get the number of threads to use.
void Render(vtkRenderer *, vtkVolume *) override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Initialize rendering for this volume.
void ComputeGradients(vtkVolume *vol)
int UpdateShadingTable(vtkRenderer *ren, vtkVolume *vol)
void GetUIntTripleFromPointer(unsigned int v[3], unsigned int *ptr)
float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer *ren, vtkVolume *vol)
What is the image sample distance required to achieve the desired time? A version of this method is p...
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 CheckMinMaxVolumeFlag(unsigned int pos[3], int c)
vtkFixedPointVolumeRayCastCompositeHelper * CompositeHelper
int CheckMIPMinMaxVolumeFlag(unsigned int pos[3], int c, unsigned short maxIdx, int flip)
friend VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void *arg)
void PerSubVolumeInitialization(vtkRenderer *, vtkVolume *, int)
void ComputeMatrices(double inputOrigin[3], double inputSpacing[3], int inputExtent[6], vtkRenderer *ren, vtkVolume *vol)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void LookupColorUC(unsigned short *colorTable, unsigned short *scalarOpacityTable, unsigned short index, unsigned char color[4])
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])
vtkVolumeRayCastSpaceLeapingImageFilter * SpaceLeapFilter
void PerVolumeInitialization(vtkRenderer *, vtkVolume *)
static vtkFixedPointVolumeRayCastMapper * New()
int ClipRayAgainstVolume(double rayStart[3], double rayEnd[3], float rayDirection[3], double bounds[6])
void CreateCanonicalView(vtkVolume *volume, vtkImageData *image, int blend_mode, double viewDirection[3], double viewUp[3])
int PerImageInitialization(vtkRenderer *, vtkVolume *, int, double *, double *, int *)
void UpdateMinMaxVolume(vtkVolume *vol)
friend VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void *arg)
void ShiftVectorDown(unsigned int in[3], unsigned int out[3])
int UpdateColorTable(vtkVolume *vol)
int ClipRayAgainstClippingPlanes(double rayStart[3], double rayEnd[3], int numClippingPlanes, float *clippingPlanes)
int GetNumberOfThreads()
Set/Get the number of threads to use.
int UpdateGradients(vtkVolume *vol)
void LookupDependentColorUC(unsigned short *colorTable, unsigned short *scalarOpacityTable, unsigned short index[4], int components, unsigned char color[4])
topologically and geometrically regular array of data
Definition: vtkImageData.h:157
a simple class to control print indentation
Definition: vtkIndent.h:113
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:145
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
Definition: vtkRenderer.h:173
record modification and/or execution time
Definition: vtkTimeStamp.h:52
Timer support and logging.
Definition: vtkTimerLog.h:199
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
Abstract class for a volume mapper.
int CroppingRegionFlags
Cropping variables, and a method for converting the world coordinate cropping region planes to voxel ...
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:134
window superclass for vtkRenderWindow
Definition: vtkWindow.h:36
@ dir
Definition: vtkX3D.h:330
@ alpha
Definition: vtkX3D.h:256
@ color
Definition: vtkX3D.h:227
@ image
Definition: vtkX3D.h:380
@ position
Definition: vtkX3D.h:267
@ index
Definition: vtkX3D.h:252
@ offset
Definition: vtkX3D.h:444
int vtkTypeBool
Definition: vtkABI.h:69
VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void *arg)
VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void *arg)
int vtkIdType
Definition: vtkType.h:332