VTK  9.0.1
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 =========================================================================*/
59 #ifndef vtkFixedPointVolumeRayCastMapper_h
60 #define vtkFixedPointVolumeRayCastMapper_h
61 
62 #include "vtkRenderingVolumeModule.h" // For export macro
63 #include "vtkVolumeMapper.h"
64 
65 #define VTKKW_FP_SHIFT 15
66 #define VTKKW_FPMM_SHIFT 17
67 #define VTKKW_FP_MASK 0x7fff
68 #define VTKKW_FP_SCALE 32767.0
69 
70 class vtkMatrix4x4;
71 class vtkMultiThreader;
72 class vtkPlaneCollection;
73 class vtkRenderer;
74 class vtkTimerLog;
75 class vtkVolume;
76 class vtkTransform;
77 class vtkRenderWindow;
91 class vtkDataArray;
92 
93 // Forward declaration needed for use by friend declaration below.
96 
97 class VTKRENDERINGVOLUME_EXPORT vtkFixedPointVolumeRayCastMapper : public vtkVolumeMapper
98 {
99 public:
102  void PrintSelf(ostream& os, vtkIndent indent) override;
103 
105 
110  vtkSetMacro(SampleDistance, float);
111  vtkGetMacro(SampleDistance, float);
113 
115 
122  vtkSetMacro(InteractiveSampleDistance, float);
123  vtkGetMacro(InteractiveSampleDistance, float);
125 
127 
134  vtkSetClampMacro(ImageSampleDistance, float, 0.1f, 100.0f);
135  vtkGetMacro(ImageSampleDistance, float);
137 
139 
143  vtkSetClampMacro(MinimumImageSampleDistance, float, 0.1f, 100.0f);
144  vtkGetMacro(MinimumImageSampleDistance, float);
146 
148 
152  vtkSetClampMacro(MaximumImageSampleDistance, float, 0.1f, 100.0f);
153  vtkGetMacro(MaximumImageSampleDistance, float);
155 
157 
166  vtkSetClampMacro(AutoAdjustSampleDistances, vtkTypeBool, 0, 1);
167  vtkGetMacro(AutoAdjustSampleDistances, vtkTypeBool);
168  vtkBooleanMacro(AutoAdjustSampleDistances, vtkTypeBool);
170 
172 
180  vtkSetClampMacro(LockSampleDistanceToInputSpacing, vtkTypeBool, 0, 1);
181  vtkGetMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
182  vtkBooleanMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
184 
186 
191  void SetNumberOfThreads(int num);
192  int GetNumberOfThreads();
194 
196 
200  vtkSetClampMacro(IntermixIntersectingGeometry, vtkTypeBool, 0, 1);
201  vtkGetMacro(IntermixIntersectingGeometry, vtkTypeBool);
202  vtkBooleanMacro(IntermixIntersectingGeometry, vtkTypeBool);
204 
206 
213  float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer* ren);
214  float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer* ren, vtkVolume* vol);
216 
221  void Render(vtkRenderer*, vtkVolume*) override;
222 
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);
233 
234  void LookupColorUC(unsigned short* colorTable, unsigned short* scalarOpacityTable,
235  unsigned short index, unsigned char color[4]);
236  void LookupDependentColorUC(unsigned short* colorTable, unsigned short* scalarOpacityTable,
237  unsigned short index[4], int components, unsigned char color[4]);
238  void LookupAndCombineIndependentColorsUC(unsigned short* colorTable[4],
239  unsigned short* scalarOpacityTable[4], unsigned short index[4], float weights[4],
240  int components, unsigned char color[4]);
241  int CheckIfCropped(unsigned int pos[3]);
242 
243  vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
244  vtkGetObjectMacro(MIPHelper, vtkFixedPointVolumeRayCastMIPHelper);
245  vtkGetObjectMacro(CompositeHelper, vtkFixedPointVolumeRayCastCompositeHelper);
246  vtkGetObjectMacro(CompositeGOHelper, vtkFixedPointVolumeRayCastCompositeGOHelper);
247  vtkGetObjectMacro(CompositeGOShadeHelper, vtkFixedPointVolumeRayCastCompositeGOShadeHelper);
248  vtkGetObjectMacro(CompositeShadeHelper, vtkFixedPointVolumeRayCastCompositeShadeHelper);
249  vtkGetVectorMacro(TableShift, float, 4);
250  vtkGetVectorMacro(TableScale, float, 4);
251  vtkGetMacro(ShadingRequired, int);
252  vtkGetMacro(GradientOpacityRequired, int);
253 
254  vtkGetObjectMacro(CurrentScalars, vtkDataArray);
255  vtkGetObjectMacro(PreviousScalars, vtkDataArray);
256 
257  int* GetRowBounds() { return this->RowBounds; }
258  unsigned short* GetColorTable(int c) { return this->ColorTable[c]; }
259  unsigned short* GetScalarOpacityTable(int c) { return this->ScalarOpacityTable[c]; }
260  unsigned short* GetGradientOpacityTable(int c) { return this->GradientOpacityTable[c]; }
261  vtkVolume* GetVolume() { return this->Volume; }
262  unsigned short** GetGradientNormal() { return this->GradientNormal; }
263  unsigned char** GetGradientMagnitude() { return this->GradientMagnitude; }
264  unsigned short* GetDiffuseShadingTable(int c) { return this->DiffuseShadingTable[c]; }
265  unsigned short* GetSpecularShadingTable(int c) { return this->SpecularShadingTable[c]; }
266 
267  void ComputeRayInfo(
268  int x, int y, unsigned int pos[3], unsigned int dir[3], unsigned int* numSteps);
269 
270  void InitializeRayInfo(vtkVolume* vol);
271 
272  int ShouldUseNearestNeighborInterpolation(vtkVolume* vol);
273 
275 
280  void SetRayCastImage(vtkFixedPointRayCastImage*);
281  vtkGetObjectMacro(RayCastImage, vtkFixedPointRayCastImage);
283 
284  int PerImageInitialization(vtkRenderer*, vtkVolume*, int, double*, double*, int*);
285  void PerVolumeInitialization(vtkRenderer*, vtkVolume*);
286  void PerSubVolumeInitialization(vtkRenderer*, vtkVolume*, int);
287  void RenderSubVolume();
288  void DisplayRenderedImage(vtkRenderer*, vtkVolume*);
289  void AbortRender();
290 
291  void CreateCanonicalView(vtkVolume* volume, vtkImageData* image, int blend_mode,
292  double viewDirection[3], double viewUp[3]);
293 
301  {
302  return this->RetrieveRenderTime(ren, vol);
303  }
304  float GetEstimatedRenderTime(vtkRenderer* ren) { return this->RetrieveRenderTime(ren); }
305 
307 
320  vtkSetMacro(FinalColorWindow, float);
321  vtkGetMacro(FinalColorWindow, float);
322  vtkSetMacro(FinalColorLevel, float);
323  vtkGetMacro(FinalColorLevel, float);
325 
326  // Here to be used by the mapper to tell the helper
327  // to flip the MIP comparison in order to support
328  // minimum intensity blending
329  vtkGetMacro(FlipMIPComparison, int);
330 
337  void ReleaseGraphicsResources(vtkWindow*) override;
338 
339 protected:
342 
343  // The helper class that displays the image
345 
346  // The distance between sample points along the ray
349 
350  // The distance between rays in the image
356 
357  // Saved values used to restore
360 
361  // Internal method for computing matrices needed during
362  // ray casting
363  void ComputeMatrices(double volumeOrigin[3], double volumeSpacing[3], int volumeExtent[6],
364  vtkRenderer* ren, vtkVolume* vol);
365 
366  int ComputeRowBounds(vtkRenderer* ren, int imageFlag, int rowBoundsFlag, int volumeExtent[6]);
367 
368  void CaptureZBuffer(vtkRenderer* ren);
369 
372 
374 
381 
383 
387 
388  // This object encapsulated the image and all related information
390 
391  int* RowBounds;
393 
399 
400  void StoreRenderTime(vtkRenderer* ren, vtkVolume* vol, float t);
401  float RetrieveRenderTime(vtkRenderer* ren, vtkVolume* vol);
402  float RetrieveRenderTime(vtkRenderer* ren);
403 
405 
407 
408  vtkColorTransferFunction* SavedRGBFunction[4];
409  vtkPiecewiseFunction* SavedGrayFunction[4];
410  vtkPiecewiseFunction* SavedScalarOpacityFunction[4];
411  vtkPiecewiseFunction* SavedGradientOpacityFunction[4];
412  int SavedColorChannels[4];
413  float SavedScalarOpacityDistance[4];
417 
420 
422 
423  unsigned short ColorTable[4][32768 * 3];
424  unsigned short ScalarOpacityTable[4][32768];
425  unsigned short GradientOpacityTable[4][256];
426  int TableSize[4];
427  float TableScale[4];
428  float TableShift[4];
429 
430  float GradientMagnitudeScale[4];
431  float GradientMagnitudeShift[4];
432 
433  unsigned short** GradientNormal;
434  unsigned char** GradientMagnitude;
435  unsigned short* ContiguousGradientNormal;
437 
439 
441 
443 
445 
446  unsigned short DiffuseShadingTable[4][65536 * 3];
447  unsigned short SpecularShadingTable[4][65536 * 3];
448 
451 
454 
457 
458  int ClipRayAgainstVolume(
459  float rayStart[3], float rayEnd[3], float rayDirection[3], double bounds[6]);
460 
461  int UpdateColorTable(vtkVolume* vol);
462  int UpdateGradients(vtkVolume* vol);
463  int UpdateShadingTable(vtkRenderer* ren, vtkVolume* vol);
464  void UpdateCroppingRegions();
465 
466  void ComputeGradients(vtkVolume* vol);
467 
468  int ClipRayAgainstClippingPlanes(
469  float rayStart[3], float rayEnd[3], int numClippingPlanes, float* clippingPlanes);
470 
471  unsigned int FixedPointCroppingRegionPlanes[6];
472  unsigned int CroppingRegionMask[27];
473 
474  // Get the ZBuffer value corresponding to location (x,y) where (x,y)
475  // are indexing into the ImageInUse image. This must be converted to
476  // the zbuffer image coordinates. Nearest neighbor value is returned.
477  float GetZBufferValue(int x, int y);
478 
484 
485  // Some variables used for ray computation
486  float ViewToVoxelsArray[16];
487  float WorldToVoxelsArray[16];
488  float VoxelsToWorldArray[16];
489 
490  double CroppingBounds[6];
491 
494 
495  double SavedSpacing[3];
496 
497  // Min Max structure used to do space leaping
498  unsigned short* MinMaxVolume;
499  int MinMaxVolumeSize[4];
503 
504  void UpdateMinMaxVolume(vtkVolume* vol);
505  void FillInMaxGradientMagnitudes(int fullDim[3], int smallDim[3]);
506 
509 
511 
512  void ApplyFinalColorWindowLevel();
513 
514 private:
516  void operator=(const vtkFixedPointVolumeRayCastMapper&) = delete;
517 
518  bool ThreadWarning;
519 };
520 
522 {
523  return static_cast<unsigned int>(val * VTKKW_FP_SCALE + 0.5);
524 }
525 
526 inline void vtkFixedPointVolumeRayCastMapper::ToFixedPointPosition(float in[3], unsigned int out[3])
527 {
528  out[0] = static_cast<unsigned int>(in[0] * VTKKW_FP_SCALE + 0.5);
529  out[1] = static_cast<unsigned int>(in[1] * VTKKW_FP_SCALE + 0.5);
530  out[2] = static_cast<unsigned int>(in[2] * VTKKW_FP_SCALE + 0.5);
531 }
532 
534 {
535  return ((dir < 0.0) ? (static_cast<unsigned int>(-dir * VTKKW_FP_SCALE + 0.5))
536  : (0x80000000 + static_cast<unsigned int>(dir * VTKKW_FP_SCALE + 0.5)));
537 }
538 
540  float in[3], unsigned int out[3])
541 {
542  out[0] = ((in[0] < 0.0) ? (static_cast<unsigned int>(-in[0] * VTKKW_FP_SCALE + 0.5))
543  : (0x80000000 + static_cast<unsigned int>(in[0] * VTKKW_FP_SCALE + 0.5)));
544  out[1] = ((in[1] < 0.0) ? (static_cast<unsigned int>(-in[1] * VTKKW_FP_SCALE + 0.5))
545  : (0x80000000 + static_cast<unsigned int>(in[1] * VTKKW_FP_SCALE + 0.5)));
546  out[2] = ((in[2] < 0.0) ? (static_cast<unsigned int>(-in[2] * VTKKW_FP_SCALE + 0.5))
547  : (0x80000000 + static_cast<unsigned int>(in[2] * VTKKW_FP_SCALE + 0.5)));
548 }
549 
551  unsigned int position[3], unsigned int increment[3])
552 {
553  if (increment[0] & 0x80000000)
554  {
555  position[0] += (increment[0] & 0x7fffffff);
556  }
557  else
558  {
559  position[0] -= increment[0];
560  }
561  if (increment[1] & 0x80000000)
562  {
563  position[1] += (increment[1] & 0x7fffffff);
564  }
565  else
566  {
567  position[1] -= increment[1];
568  }
569  if (increment[2] & 0x80000000)
570  {
571  position[2] += (increment[2] & 0x7fffffff);
572  }
573  else
574  {
575  position[2] -= increment[2];
576  }
577 }
578 
580 {
581  v[0] = *(ptr);
582  v[1] = *(ptr + 1);
583  v[2] = *(ptr + 2);
584 }
585 
587  unsigned int v[3], unsigned int* ptr)
588 {
589  v[0] = *(ptr);
590  v[1] = *(ptr + 1);
591  v[2] = *(ptr + 2);
592 }
593 
595  unsigned int in[3], unsigned int out[3])
596 {
597  out[0] = in[0] >> VTKKW_FP_SHIFT;
598  out[1] = in[1] >> VTKKW_FP_SHIFT;
599  out[2] = in[2] >> VTKKW_FP_SHIFT;
600 }
601 
602 inline int vtkFixedPointVolumeRayCastMapper::CheckMinMaxVolumeFlag(unsigned int mmpos[3], int c)
603 {
604  vtkIdType offset = static_cast<vtkIdType>(this->MinMaxVolumeSize[3]) *
605  (mmpos[2] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0] * this->MinMaxVolumeSize[1]) +
606  mmpos[1] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
607  static_cast<vtkIdType>(c);
608 
609  return ((*(this->MinMaxVolume + 3 * offset + 2)) & 0x00ff);
610 }
611 
613  unsigned int mmpos[3], int c, unsigned short maxIdx, int flip)
614 {
615  vtkIdType offset = static_cast<vtkIdType>(this->MinMaxVolumeSize[3]) *
616  (mmpos[2] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0] * this->MinMaxVolumeSize[1]) +
617  mmpos[1] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
618  static_cast<vtkIdType>(c);
619 
620  if ((*(this->MinMaxVolume + 3 * offset + 2) & 0x00ff))
621  {
622  if (flip)
623  {
624  return (*(this->MinMaxVolume + 3 * offset) < maxIdx);
625  }
626  else
627  {
628  return (*(this->MinMaxVolume + 3 * offset + 1) > maxIdx);
629  }
630  }
631  else
632  {
633  return 0;
634  }
635 }
636 
637 inline void vtkFixedPointVolumeRayCastMapper::LookupColorUC(unsigned short* colorTable,
638  unsigned short* scalarOpacityTable, unsigned short index, unsigned char color[4])
639 {
640  unsigned short alpha = scalarOpacityTable[index];
641  color[0] = static_cast<unsigned char>(
642  (colorTable[3 * index] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
643  color[1] = static_cast<unsigned char>(
644  (colorTable[3 * index + 1] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
645  color[2] = static_cast<unsigned char>(
646  (colorTable[3 * index + 2] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
647  color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
648 }
649 
650 inline void vtkFixedPointVolumeRayCastMapper::LookupDependentColorUC(unsigned short* colorTable,
651  unsigned short* scalarOpacityTable, unsigned short index[4], int components,
652  unsigned char color[4])
653 {
654  unsigned short alpha;
655  switch (components)
656  {
657  case 2:
658  alpha = scalarOpacityTable[index[1]];
659  color[0] = static_cast<unsigned char>(
660  (colorTable[3 * index[0]] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
661  color[1] = static_cast<unsigned char>(
662  (colorTable[3 * index[0] + 1] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
663  color[2] = static_cast<unsigned char>(
664  (colorTable[3 * index[0] + 2] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
665  color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
666  break;
667  case 4:
668  alpha = scalarOpacityTable[index[3]];
669  color[0] = static_cast<unsigned char>((index[0] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
670  color[1] = static_cast<unsigned char>((index[1] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
671  color[2] = static_cast<unsigned char>((index[2] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
672  color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
673  break;
674  }
675 }
676 
678  unsigned short* colorTable[4], unsigned short* scalarOpacityTable[4], unsigned short index[4],
679  float weights[4], int components, unsigned char color[4])
680 {
681  unsigned int tmp[4] = { 0, 0, 0, 0 };
682 
683  for (int i = 0; i < components; i++)
684  {
685  unsigned short alpha =
686  static_cast<unsigned short>(static_cast<float>(scalarOpacityTable[i][index[i]]) * weights[i]);
687  tmp[0] += static_cast<unsigned char>(
688  ((colorTable[i][3 * index[i]]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
689  tmp[1] += static_cast<unsigned char>(
690  ((colorTable[i][3 * index[i] + 1]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
691  tmp[2] += static_cast<unsigned char>(
692  ((colorTable[i][3 * index[i] + 2]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
693  tmp[3] += static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
694  }
695 
696  color[0] = static_cast<unsigned char>((tmp[0] > 255) ? (255) : (tmp[0]));
697  color[1] = static_cast<unsigned char>((tmp[1] > 255) ? (255) : (tmp[1]));
698  color[2] = static_cast<unsigned char>((tmp[2] > 255) ? (255) : (tmp[2]));
699  color[3] = static_cast<unsigned char>((tmp[3] > 255) ? (255) : (tmp[3]));
700 }
701 
703 {
704  int idx;
705 
706  if (pos[2] < this->FixedPointCroppingRegionPlanes[4])
707  {
708  idx = 0;
709  }
710  else if (pos[2] > this->FixedPointCroppingRegionPlanes[5])
711  {
712  idx = 18;
713  }
714  else
715  {
716  idx = 9;
717  }
718 
719  if (pos[1] >= this->FixedPointCroppingRegionPlanes[2])
720  {
721  if (pos[1] > this->FixedPointCroppingRegionPlanes[3])
722  {
723  idx += 6;
724  }
725  else
726  {
727  idx += 3;
728  }
729  }
730 
731  if (pos[0] >= this->FixedPointCroppingRegionPlanes[0])
732  {
733  if (pos[0] > this->FixedPointCroppingRegionPlanes[1])
734  {
735  idx += 2;
736  }
737  else
738  {
739  idx += 1;
740  }
741  }
742 
743  return !(static_cast<unsigned int>(this->CroppingRegionFlags) & this->CroppingRegionMask[idx]);
744 }
745 
746 #endif
int CroppingRegionFlags
Cropping variables, and a method for converting the world coordinate cropping region planes to voxel ...
void ShiftVectorDown(unsigned int in[3], unsigned int out[3])
vtkFixedPointVolumeRayCastMIPHelper * MIPHelper
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:44
vtkFixedPointVolumeRayCastCompositeShadeHelper * CompositeShadeHelper
vtkVolumeRayCastSpaceLeapingImageFilter * SpaceLeapFilter
Abstract class for a volume mapper.
encode a direction into a one or two byte value
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:35
A helper that generates composite images for the volume ray cast mapper.
void FixedPointIncrement(unsigned int position[3], unsigned int increment[3])
Use finite differences to estimate gradient.
Defines a 1D piecewise function.
VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void *arg)
A class for performing multithreaded execution.
record modification and/or execution time
Definition: vtkTimeStamp.h:32
maintain a list of planes
VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void *arg)
abstract specification for renderers
Definition: vtkRenderer.h:61
void GetUIntTripleFromPointer(unsigned int v[3], unsigned int *ptr)
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
int vtkIdType
Definition: vtkType.h:338
A helper that generates MIP images for the volume ray cast mapper.
helper class that draws the image to the screen
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...
#define VTKKW_FP_SCALE
int vtkTypeBool
Definition: vtkABI.h:69
Timer support and logging.
Definition: vtkTimerLog.h:90
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
vtkFixedPointVolumeRayCastCompositeGOHelper * CompositeGOHelper
a simple class to control print indentation
Definition: vtkIndent.h:33
float GetEstimatedRenderTime(vtkRenderer *ren, vtkVolume *vol)
Get an estimate of the rendering time for a given volume / renderer.
topologically and geometrically regular array of data
Definition: vtkImageData.h:41
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
Definition: vtkDataArray.h:49
Compute shading tables for encoded normals.
int CheckMIPMinMaxVolumeFlag(unsigned int pos[3], int c, unsigned short maxIdx, int flip)
A helper that generates composite images for the volume ray cast mapper.
void ReleaseGraphicsResources(vtkWindow *) override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
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.
#define VTK_THREAD_RETURN_TYPE
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)
void LookupColorUC(unsigned short *colorTable, unsigned short *scalarOpacityTable, unsigned short index, unsigned char color[4])
vtkFixedPointVolumeRayCastCompositeGOShadeHelper * CompositeGOShadeHelper
static vtkAlgorithm * New()
vtkRayCastImageDisplayHelper * ImageDisplayHelper
#define VTKKW_FP_SHIFT
vtkFiniteDifferenceGradientEstimator * GradientEstimator
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void GetFloatTripleFromPointer(float v[3], float *ptr)
helper class for a ray cast image