VTK  9.3.0
vtkFixedPointVolumeRayCastMapper.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
59#ifndef vtkFixedPointVolumeRayCastMapper_h
60#define vtkFixedPointVolumeRayCastMapper_h
61
62#include "vtkRenderingVolumeModule.h" // For export macro
63#include "vtkThreads.h" // for VTK_THREAD_RETURN_TYPE
64#include "vtkVolumeMapper.h"
65
66#define VTKKW_FP_SHIFT 15
67#define VTKKW_FPMM_SHIFT 17
68#define VTKKW_FP_MASK 0x7fff
69#define VTKKW_FP_SCALE 32767.0
70
71VTK_ABI_NAMESPACE_BEGIN
72class vtkMatrix4x4;
75class vtkRenderer;
76class vtkTimerLog;
77class vtkVolume;
78class vtkTransform;
79class vtkRenderWindow;
93class vtkDataArray;
94
95// Forward declaration needed for use by friend declaration below.
96VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void* arg);
97VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void* arg);
98
99class VTKRENDERINGVOLUME_EXPORT vtkFixedPointVolumeRayCastMapper : public vtkVolumeMapper
100{
101public:
104 void PrintSelf(ostream& os, vtkIndent indent) override;
105
107
112 vtkSetMacro(SampleDistance, float);
113 vtkGetMacro(SampleDistance, float);
115
117
124 vtkSetMacro(InteractiveSampleDistance, float);
125 vtkGetMacro(InteractiveSampleDistance, float);
127
129
136 vtkSetClampMacro(ImageSampleDistance, float, 0.1f, 100.0f);
137 vtkGetMacro(ImageSampleDistance, float);
139
141
145 vtkSetClampMacro(MinimumImageSampleDistance, float, 0.1f, 100.0f);
146 vtkGetMacro(MinimumImageSampleDistance, float);
148
150
154 vtkSetClampMacro(MaximumImageSampleDistance, float, 0.1f, 100.0f);
155 vtkGetMacro(MaximumImageSampleDistance, float);
157
159
168 vtkSetClampMacro(AutoAdjustSampleDistances, vtkTypeBool, 0, 1);
169 vtkGetMacro(AutoAdjustSampleDistances, vtkTypeBool);
170 vtkBooleanMacro(AutoAdjustSampleDistances, vtkTypeBool);
172
174
182 vtkSetClampMacro(LockSampleDistanceToInputSpacing, vtkTypeBool, 0, 1);
183 vtkGetMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
184 vtkBooleanMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
186
188
193 void SetNumberOfThreads(int num);
196
198
202 vtkSetClampMacro(IntermixIntersectingGeometry, vtkTypeBool, 0, 1);
203 vtkGetMacro(IntermixIntersectingGeometry, vtkTypeBool);
204 vtkBooleanMacro(IntermixIntersectingGeometry, vtkTypeBool);
206
208
215 float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer* ren);
216 float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer* ren, vtkVolume* vol);
218
223 void Render(vtkRenderer*, vtkVolume*) override;
224
225 unsigned int ToFixedPointPosition(float val);
226 void ToFixedPointPosition(float in[3], unsigned int out[3]);
227 unsigned int ToFixedPointDirection(float dir);
228 void ToFixedPointDirection(float in[3], unsigned int out[3]);
229 void FixedPointIncrement(unsigned int position[3], unsigned int increment[3]);
230 void GetFloatTripleFromPointer(float v[3], float* ptr);
231 void GetUIntTripleFromPointer(unsigned int v[3], unsigned int* ptr);
232 void ShiftVectorDown(unsigned int in[3], unsigned int out[3]);
233 int CheckMinMaxVolumeFlag(unsigned int pos[3], int c);
234 int CheckMIPMinMaxVolumeFlag(unsigned int pos[3], int c, unsigned short maxIdx, int flip);
235
236 void LookupColorUC(unsigned short* colorTable, unsigned short* scalarOpacityTable,
237 unsigned short index, unsigned char color[4]);
238 void LookupDependentColorUC(unsigned short* colorTable, unsigned short* scalarOpacityTable,
239 unsigned short index[4], int components, unsigned char color[4]);
240 void LookupAndCombineIndependentColorsUC(unsigned short* colorTable[4],
241 unsigned short* scalarOpacityTable[4], unsigned short index[4], float weights[4],
242 int components, unsigned char color[4]);
243 int CheckIfCropped(unsigned int pos[3]);
244
245 vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
246 vtkGetObjectMacro(MIPHelper, vtkFixedPointVolumeRayCastMIPHelper);
247 vtkGetObjectMacro(CompositeHelper, vtkFixedPointVolumeRayCastCompositeHelper);
248 vtkGetObjectMacro(CompositeGOHelper, vtkFixedPointVolumeRayCastCompositeGOHelper);
249 vtkGetObjectMacro(CompositeGOShadeHelper, vtkFixedPointVolumeRayCastCompositeGOShadeHelper);
250 vtkGetObjectMacro(CompositeShadeHelper, vtkFixedPointVolumeRayCastCompositeShadeHelper);
251 vtkGetVectorMacro(TableShift, float, 4);
252 vtkGetVectorMacro(TableScale, float, 4);
253 vtkGetMacro(ShadingRequired, int);
254 vtkGetMacro(GradientOpacityRequired, int);
255
256 vtkGetObjectMacro(CurrentScalars, vtkDataArray);
257 vtkGetObjectMacro(PreviousScalars, vtkDataArray);
258
259 int* GetRowBounds() { return this->RowBounds; }
260 unsigned short* GetColorTable(int c) { return this->ColorTable[c]; }
261 unsigned short* GetScalarOpacityTable(int c) { return this->ScalarOpacityTable[c]; }
262 unsigned short* GetGradientOpacityTable(int c) { return this->GradientOpacityTable[c]; }
263 vtkVolume* GetVolume() { return this->Volume; }
264 unsigned short** GetGradientNormal() { return this->GradientNormal; }
265 unsigned char** GetGradientMagnitude() { return this->GradientMagnitude; }
266 unsigned short* GetDiffuseShadingTable(int c) { return this->DiffuseShadingTable[c]; }
267 unsigned short* GetSpecularShadingTable(int c) { return this->SpecularShadingTable[c]; }
268
270 int x, int y, unsigned int pos[3], unsigned int dir[3], unsigned int* numSteps);
271
273
275
277
283 vtkGetObjectMacro(RayCastImage, vtkFixedPointRayCastImage);
285
286 int PerImageInitialization(vtkRenderer*, vtkVolume*, int, double*, double*, int*);
292
293 void CreateCanonicalView(vtkVolume* volume, vtkImageData* image, int blend_mode,
294 double viewDirection[3], double viewUp[3]);
295
303 {
304 return this->RetrieveRenderTime(ren, vol);
305 }
306 float GetEstimatedRenderTime(vtkRenderer* ren) { return this->RetrieveRenderTime(ren); }
307
309
322 vtkSetMacro(FinalColorWindow, float);
323 vtkGetMacro(FinalColorWindow, float);
324 vtkSetMacro(FinalColorLevel, float);
325 vtkGetMacro(FinalColorLevel, float);
327
328 // Here to be used by the mapper to tell the helper
329 // to flip the MIP comparison in order to support
330 // minimum intensity blending
331 vtkGetMacro(FlipMIPComparison, int);
332
340
341protected:
344
345 // The helper class that displays the image
347
348 // The distance between sample points along the ray
351
352 // The distance between rays in the image
358
359 // Saved values used to restore
362
363 // Internal method for computing matrices needed during
364 // ray casting
365 void ComputeMatrices(double inputOrigin[3], double inputSpacing[3], int inputExtent[6],
366 vtkRenderer* ren, vtkVolume* vol);
367
368 int ComputeRowBounds(vtkRenderer* ren, int imageFlag, int rowBoundsFlag, int inputExtent[6]);
369
371
372 friend VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void* arg);
373 friend VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void* arg);
374
376
383
385
389
390 // This object encapsulated the image and all related information
392
395
401
402 void StoreRenderTime(vtkRenderer* ren, vtkVolume* vol, float t);
405
407
409
410 vtkColorTransferFunction* SavedRGBFunction[4];
411 vtkPiecewiseFunction* SavedGrayFunction[4];
412 vtkPiecewiseFunction* SavedScalarOpacityFunction[4];
413 vtkPiecewiseFunction* SavedGradientOpacityFunction[4];
414 int SavedColorChannels[4];
415 float SavedScalarOpacityDistance[4];
419
422
424
425 unsigned short ColorTable[4][32768 * 3];
426 unsigned short ScalarOpacityTable[4][32768];
427 unsigned short GradientOpacityTable[4][256];
428 int TableSize[4];
429 float TableScale[4];
430 float TableShift[4];
431
432 float GradientMagnitudeScale[4];
433 float GradientMagnitudeShift[4];
434
435 unsigned short** GradientNormal;
436 unsigned char** GradientMagnitude;
439
441
443
445
447
448 unsigned short DiffuseShadingTable[4][65536 * 3];
449 unsigned short SpecularShadingTable[4][65536 * 3];
450
453
456
459
461 double rayStart[3], double rayEnd[3], float rayDirection[3], double bounds[6]);
462
467
469
471 double rayStart[3], double rayEnd[3], int numClippingPlanes, float* clippingPlanes);
472
473 unsigned int FixedPointCroppingRegionPlanes[6];
474 unsigned int CroppingRegionMask[27];
475
476 // Get the ZBuffer value corresponding to location (x,y) where (x,y)
477 // are indexing into the ImageInUse image. This must be converted to
478 // the zbuffer image coordinates. Nearest neighbor value is returned.
479 float GetZBufferValue(int x, int y);
480
486
487 // Some variables used for ray computation
488 float ViewToVoxelsArray[16];
489 float WorldToVoxelsArray[16];
490 float VoxelsToWorldArray[16];
491
492 double CroppingBounds[6];
493
496
497 double SavedSpacing[3];
498
499 // Min Max structure used to do space leaping
500 unsigned short* MinMaxVolume;
501 int MinMaxVolumeSize[4];
505
507 void FillInMaxGradientMagnitudes(int fullDim[3], int smallDim[3]);
508
511
513
515
516private:
518 void operator=(const vtkFixedPointVolumeRayCastMapper&) = delete;
519
520 bool ThreadWarning;
521};
522
524{
525 return static_cast<unsigned int>(val * VTKKW_FP_SCALE + 0.5);
526}
527
528inline void vtkFixedPointVolumeRayCastMapper::ToFixedPointPosition(float in[3], unsigned int out[3])
529{
530 out[0] = static_cast<unsigned int>(in[0] * VTKKW_FP_SCALE + 0.5);
531 out[1] = static_cast<unsigned int>(in[1] * VTKKW_FP_SCALE + 0.5);
532 out[2] = static_cast<unsigned int>(in[2] * VTKKW_FP_SCALE + 0.5);
533}
534
536{
537 return ((dir < 0.0) ? (static_cast<unsigned int>(-dir * VTKKW_FP_SCALE + 0.5))
538 : (0x80000000 + static_cast<unsigned int>(dir * VTKKW_FP_SCALE + 0.5)));
539}
540
542 float in[3], unsigned int out[3])
543{
544 out[0] = ((in[0] < 0.0) ? (static_cast<unsigned int>(-in[0] * VTKKW_FP_SCALE + 0.5))
545 : (0x80000000 + static_cast<unsigned int>(in[0] * VTKKW_FP_SCALE + 0.5)));
546 out[1] = ((in[1] < 0.0) ? (static_cast<unsigned int>(-in[1] * VTKKW_FP_SCALE + 0.5))
547 : (0x80000000 + static_cast<unsigned int>(in[1] * VTKKW_FP_SCALE + 0.5)));
548 out[2] = ((in[2] < 0.0) ? (static_cast<unsigned int>(-in[2] * VTKKW_FP_SCALE + 0.5))
549 : (0x80000000 + static_cast<unsigned int>(in[2] * VTKKW_FP_SCALE + 0.5)));
550}
551
553 unsigned int position[3], unsigned int increment[3])
554{
555 if (increment[0] & 0x80000000)
556 {
557 position[0] += (increment[0] & 0x7fffffff);
558 }
559 else
560 {
561 position[0] -= increment[0];
562 }
563 if (increment[1] & 0x80000000)
564 {
565 position[1] += (increment[1] & 0x7fffffff);
566 }
567 else
568 {
569 position[1] -= increment[1];
570 }
571 if (increment[2] & 0x80000000)
572 {
573 position[2] += (increment[2] & 0x7fffffff);
574 }
575 else
576 {
577 position[2] -= increment[2];
578 }
579}
580
582{
583 v[0] = *(ptr);
584 v[1] = *(ptr + 1);
585 v[2] = *(ptr + 2);
586}
587
589 unsigned int v[3], unsigned int* ptr)
590{
591 v[0] = *(ptr);
592 v[1] = *(ptr + 1);
593 v[2] = *(ptr + 2);
594}
595
597 unsigned int in[3], unsigned int out[3])
598{
599 out[0] = in[0] >> VTKKW_FP_SHIFT;
600 out[1] = in[1] >> VTKKW_FP_SHIFT;
601 out[2] = in[2] >> VTKKW_FP_SHIFT;
602}
603
604inline int vtkFixedPointVolumeRayCastMapper::CheckMinMaxVolumeFlag(unsigned int mmpos[3], int c)
605{
606 vtkIdType offset = static_cast<vtkIdType>(this->MinMaxVolumeSize[3]) *
607 (mmpos[2] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0] * this->MinMaxVolumeSize[1]) +
608 mmpos[1] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
609 static_cast<vtkIdType>(c);
610
611 return ((*(this->MinMaxVolume + 3 * offset + 2)) & 0x00ff);
612}
613
615 unsigned int mmpos[3], int c, unsigned short maxIdx, int flip)
616{
617 vtkIdType offset = static_cast<vtkIdType>(this->MinMaxVolumeSize[3]) *
618 (mmpos[2] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0] * this->MinMaxVolumeSize[1]) +
619 mmpos[1] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
620 static_cast<vtkIdType>(c);
621
622 if ((*(this->MinMaxVolume + 3 * offset + 2) & 0x00ff))
623 {
624 if (flip)
625 {
626 return (*(this->MinMaxVolume + 3 * offset) < maxIdx);
627 }
628 else
629 {
630 return (*(this->MinMaxVolume + 3 * offset + 1) > maxIdx);
631 }
632 }
633 else
634 {
635 return 0;
636 }
637}
638
639inline void vtkFixedPointVolumeRayCastMapper::LookupColorUC(unsigned short* colorTable,
640 unsigned short* scalarOpacityTable, unsigned short index, unsigned char color[4])
641{
642 unsigned short alpha = scalarOpacityTable[index];
643 color[0] = static_cast<unsigned char>(
644 (colorTable[3 * index] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
645 color[1] = static_cast<unsigned char>(
646 (colorTable[3 * index + 1] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
647 color[2] = static_cast<unsigned char>(
648 (colorTable[3 * index + 2] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
649 color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
650}
651
652inline void vtkFixedPointVolumeRayCastMapper::LookupDependentColorUC(unsigned short* colorTable,
653 unsigned short* scalarOpacityTable, unsigned short index[4], int components,
654 unsigned char color[4])
655{
656 unsigned short alpha;
657 switch (components)
658 {
659 case 2:
660 alpha = scalarOpacityTable[index[1]];
661 color[0] = static_cast<unsigned char>(
662 (colorTable[3 * index[0]] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
663 color[1] = static_cast<unsigned char>(
664 (colorTable[3 * index[0] + 1] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
665 color[2] = static_cast<unsigned char>(
666 (colorTable[3 * index[0] + 2] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
667 color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
668 break;
669 case 4:
670 alpha = scalarOpacityTable[index[3]];
671 color[0] = static_cast<unsigned char>((index[0] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
672 color[1] = static_cast<unsigned char>((index[1] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
673 color[2] = static_cast<unsigned char>((index[2] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
674 color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
675 break;
676 }
677}
678
680 unsigned short* colorTable[4], unsigned short* scalarOpacityTable[4], unsigned short index[4],
681 float weights[4], int components, unsigned char color[4])
682{
683 unsigned int tmp[4] = { 0, 0, 0, 0 };
684
685 for (int i = 0; i < components; i++)
686 {
687 unsigned short alpha =
688 static_cast<unsigned short>(static_cast<float>(scalarOpacityTable[i][index[i]]) * weights[i]);
689 tmp[0] += static_cast<unsigned char>(
690 ((colorTable[i][3 * index[i]]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
691 tmp[1] += static_cast<unsigned char>(
692 ((colorTable[i][3 * index[i] + 1]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
693 tmp[2] += static_cast<unsigned char>(
694 ((colorTable[i][3 * index[i] + 2]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
695 tmp[3] += static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
696 }
697
698 color[0] = static_cast<unsigned char>((tmp[0] > 255) ? (255) : (tmp[0]));
699 color[1] = static_cast<unsigned char>((tmp[1] > 255) ? (255) : (tmp[1]));
700 color[2] = static_cast<unsigned char>((tmp[2] > 255) ? (255) : (tmp[2]));
701 color[3] = static_cast<unsigned char>((tmp[3] > 255) ? (255) : (tmp[3]));
702}
703
705{
706 int idx;
707
708 if (pos[2] < this->FixedPointCroppingRegionPlanes[4])
709 {
710 idx = 0;
711 }
712 else if (pos[2] > this->FixedPointCroppingRegionPlanes[5])
713 {
714 idx = 18;
715 }
716 else
717 {
718 idx = 9;
719 }
720
721 if (pos[1] >= this->FixedPointCroppingRegionPlanes[2])
722 {
723 if (pos[1] > this->FixedPointCroppingRegionPlanes[3])
724 {
725 idx += 6;
726 }
727 else
728 {
729 idx += 3;
730 }
731 }
732
733 if (pos[0] >= this->FixedPointCroppingRegionPlanes[0])
734 {
735 if (pos[0] > this->FixedPointCroppingRegionPlanes[1])
736 {
737 idx += 2;
738 }
739 else
740 {
741 idx += 1;
742 }
743 }
744
745 return !(static_cast<unsigned int>(this->CroppingRegionFlags) & this->CroppingRegionMask[idx]);
746}
747
748VTK_ABI_NAMESPACE_END
749#endif
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.
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...
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 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 *)
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
a simple class to control print indentation
Definition vtkIndent.h:38
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
Definition vtkRenderer.h:68
record modification and/or execution time
Timer support and logging.
Definition vtkTimerLog.h:94
describes linear transformations via a 4x4 matrix
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:49
window superclass for vtkRenderWindow
Definition vtkWindow.h:34
int vtkTypeBool
Definition vtkABI.h:64
VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void *arg)
VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void *arg)
int vtkIdType
Definition vtkType.h:315