VTK  9.6.2
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
98
99#ifndef vtkFixedPointVolumeRayCastMapper_h
100#define vtkFixedPointVolumeRayCastMapper_h
101
102#include "vtkRenderingVolumeModule.h" // For export macro
103#include "vtkThreads.h" // for VTK_THREAD_RETURN_TYPE
104#include "vtkVolumeMapper.h"
105#include "vtkWrappingHints.h"
106
107#define VTKKW_FP_SHIFT 15
108#define VTKKW_FPMM_SHIFT 17
109#define VTKKW_FP_MASK 0x7fff
110#define VTKKW_FP_SCALE 32767.0
111
112VTK_ABI_NAMESPACE_BEGIN
113class vtkMatrix4x4;
114class vtkMultiThreader;
116class vtkRenderer;
117class vtkTimerLog;
118class vtkVolume;
119class vtkTransform;
120class vtkRenderWindow;
134class vtkDataArray;
135
136// Forward declaration needed for use by friend declaration below.
137VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void* arg);
138VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void* arg);
139
141 : public vtkVolumeMapper
142{
143public:
146 void PrintSelf(ostream& os, vtkIndent indent) override;
147
149
154 vtkSetMacro(SampleDistance, float);
155 vtkGetMacro(SampleDistance, float);
157
159
166 vtkSetMacro(InteractiveSampleDistance, float);
167 vtkGetMacro(InteractiveSampleDistance, float);
169
171
178 vtkSetClampMacro(ImageSampleDistance, float, 0.1f, 100.0f);
179 vtkGetMacro(ImageSampleDistance, float);
181
183
187 vtkSetClampMacro(MinimumImageSampleDistance, float, 0.1f, 100.0f);
188 vtkGetMacro(MinimumImageSampleDistance, float);
190
192
196 vtkSetClampMacro(MaximumImageSampleDistance, float, 0.1f, 100.0f);
197 vtkGetMacro(MaximumImageSampleDistance, float);
199
201
210 vtkSetClampMacro(AutoAdjustSampleDistances, vtkTypeBool, 0, 1);
214
216
228
230
235 void SetNumberOfThreads(int num);
238
240
248
250
257 float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer* ren);
258 float ComputeRequiredImageSampleDistance(float desiredTime, vtkRenderer* ren, vtkVolume* vol);
260
265 void Render(vtkRenderer*, vtkVolume*) override;
266
267 unsigned int ToFixedPointPosition(float val);
268 void ToFixedPointPosition(float in[3], unsigned int out[3]);
269 unsigned int ToFixedPointDirection(float dir);
270 void ToFixedPointDirection(float in[3], unsigned int out[3]);
271 void FixedPointIncrement(unsigned int position[3], unsigned int increment[3]);
272 void GetFloatTripleFromPointer(float v[3], float* ptr);
273 void GetUIntTripleFromPointer(unsigned int v[3], unsigned int* ptr);
274 void ShiftVectorDown(unsigned int in[3], unsigned int out[3]);
275 int CheckMinMaxVolumeFlag(unsigned int pos[3], int c);
276 int CheckMIPMinMaxVolumeFlag(unsigned int pos[3], int c, unsigned short maxIdx, int flip);
277
278 void LookupColorUC(unsigned short* colorTable, unsigned short* scalarOpacityTable,
279 unsigned short index, unsigned char color[4]);
280 void LookupDependentColorUC(unsigned short* colorTable, unsigned short* scalarOpacityTable,
281 unsigned short index[4], int components, unsigned char color[4]);
282 void LookupAndCombineIndependentColorsUC(unsigned short* colorTable[4],
283 unsigned short* scalarOpacityTable[4], unsigned short index[4], float weights[4],
284 int components, unsigned char color[4]);
285 int CheckIfCropped(unsigned int pos[3]);
286
287 vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
293 vtkGetVectorMacro(TableShift, float, 4);
294 vtkGetVectorMacro(TableScale, float, 4);
295 vtkGetMacro(ShadingRequired, int);
296 vtkGetMacro(GradientOpacityRequired, int);
297
298 vtkGetObjectMacro(CurrentScalars, vtkDataArray);
299 vtkGetObjectMacro(PreviousScalars, vtkDataArray);
300
301 int* GetRowBounds() { return this->RowBounds; }
302 unsigned short* GetColorTable(int c) { return this->ColorTable[c]; }
303 unsigned short* GetScalarOpacityTable(int c) { return this->ScalarOpacityTable[c]; }
304 unsigned short* GetGradientOpacityTable(int c) { return this->GradientOpacityTable[c]; }
305 vtkVolume* GetVolume() { return this->Volume; }
306 unsigned short** GetGradientNormal() { return this->GradientNormal; }
307 unsigned char** GetGradientMagnitude() { return this->GradientMagnitude; }
308 unsigned short* GetDiffuseShadingTable(int c) { return this->DiffuseShadingTable[c]; }
309 unsigned short* GetSpecularShadingTable(int c) { return this->SpecularShadingTable[c]; }
310
312 int x, int y, unsigned int pos[3], unsigned int dir[3], unsigned int* numSteps);
313
315
317
319
329
330 int PerImageInitialization(vtkRenderer*, vtkVolume*, int, double*, double*, int*);
336
337 void CreateCanonicalView(vtkVolume* volume, vtkImageData* image, int blend_mode,
338 double viewDirection[3], double viewUp[3]);
339
347 {
348 return this->RetrieveRenderTime(ren, vol);
349 }
350 float GetEstimatedRenderTime(vtkRenderer* ren) { return this->RetrieveRenderTime(ren); }
351
353
366 vtkSetMacro(FinalColorWindow, float);
367 vtkGetMacro(FinalColorWindow, float);
368 vtkSetMacro(FinalColorLevel, float);
369 vtkGetMacro(FinalColorLevel, float);
371
372 // Here to be used by the mapper to tell the helper
373 // to flip the MIP comparison in order to support
374 // minimum intensity blending
375 vtkGetMacro(FlipMIPComparison, int);
376
384
385protected:
388
389 // The helper class that displays the image
391
392 // The distance between sample points along the ray
395
396 // The distance between rays in the image
402
403 // Saved values used to restore
406
407 // Internal method for computing matrices needed during
408 // ray casting
409 void ComputeMatrices(double inputOrigin[3], double inputSpacing[3], int inputExtent[6],
410 vtkRenderer* ren, vtkVolume* vol);
411
412 int ComputeRowBounds(vtkRenderer* ren, int imageFlag, int rowBoundsFlag, int inputExtent[6]);
413
415
416 friend VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void* arg);
417 friend VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void* arg);
418
420
427
429
433
434 // This object encapsulated the image and all related information
436
439
445
446 void StoreRenderTime(vtkRenderer* ren, vtkVolume* vol, float t);
449
451
453
463
466
468
469 unsigned short ColorTable[4][32768 * 3];
470 unsigned short ScalarOpacityTable[4][32768];
471 unsigned short GradientOpacityTable[4][256];
472 int TableSize[4];
473 float TableScale[4];
474 float TableShift[4];
475
478
479 unsigned short** GradientNormal;
480 unsigned char** GradientMagnitude;
483
485
487
489
491
492 unsigned short DiffuseShadingTable[4][65536 * 3];
493 unsigned short SpecularShadingTable[4][65536 * 3];
494
497
500
503
505 double rayStart[3], double rayEnd[3], float rayDirection[3], double bounds[6]);
506
511
513
515 double rayStart[3], double rayEnd[3], int numClippingPlanes, float* clippingPlanes);
516
518 unsigned int CroppingRegionMask[27];
519
520 // Get the ZBuffer value corresponding to location (x,y) where (x,y)
521 // are indexing into the ImageInUse image. This must be converted to
522 // the zbuffer image coordinates. Nearest neighbor value is returned.
523 float GetZBufferValue(int x, int y);
524
530
531 // Some variables used for ray computation
535
536 double CroppingBounds[6];
537
540
541 double SavedSpacing[3];
542
543 // Min Max structure used to do space leaping
544 unsigned short* MinMaxVolume;
549
551 void FillInMaxGradientMagnitudes(int fullDim[3], int smallDim[3]);
552
555
557
559
560private:
562 void operator=(const vtkFixedPointVolumeRayCastMapper&) = delete;
563
564 bool ThreadWarning;
565};
566
568{
569 return static_cast<unsigned int>(val * VTKKW_FP_SCALE + 0.5);
570}
571
572inline void vtkFixedPointVolumeRayCastMapper::ToFixedPointPosition(float in[3], unsigned int out[3])
573{
574 out[0] = static_cast<unsigned int>(in[0] * VTKKW_FP_SCALE + 0.5);
575 out[1] = static_cast<unsigned int>(in[1] * VTKKW_FP_SCALE + 0.5);
576 out[2] = static_cast<unsigned int>(in[2] * VTKKW_FP_SCALE + 0.5);
577}
578
580{
581 return ((dir < 0.0) ? (static_cast<unsigned int>(-dir * VTKKW_FP_SCALE + 0.5))
582 : (0x80000000 + static_cast<unsigned int>(dir * VTKKW_FP_SCALE + 0.5)));
583}
584
586 float in[3], unsigned int out[3])
587{
588 out[0] = ((in[0] < 0.0) ? (static_cast<unsigned int>(-in[0] * VTKKW_FP_SCALE + 0.5))
589 : (0x80000000 + static_cast<unsigned int>(in[0] * VTKKW_FP_SCALE + 0.5)));
590 out[1] = ((in[1] < 0.0) ? (static_cast<unsigned int>(-in[1] * VTKKW_FP_SCALE + 0.5))
591 : (0x80000000 + static_cast<unsigned int>(in[1] * VTKKW_FP_SCALE + 0.5)));
592 out[2] = ((in[2] < 0.0) ? (static_cast<unsigned int>(-in[2] * VTKKW_FP_SCALE + 0.5))
593 : (0x80000000 + static_cast<unsigned int>(in[2] * VTKKW_FP_SCALE + 0.5)));
594}
595
597 unsigned int position[3], unsigned int increment[3])
598{
599 if (increment[0] & 0x80000000)
600 {
601 position[0] += (increment[0] & 0x7fffffff);
602 }
603 else
604 {
605 position[0] -= increment[0];
606 }
607 if (increment[1] & 0x80000000)
608 {
609 position[1] += (increment[1] & 0x7fffffff);
610 }
611 else
612 {
613 position[1] -= increment[1];
614 }
615 if (increment[2] & 0x80000000)
616 {
617 position[2] += (increment[2] & 0x7fffffff);
618 }
619 else
620 {
621 position[2] -= increment[2];
622 }
623}
624
626{
627 v[0] = *(ptr);
628 v[1] = *(ptr + 1);
629 v[2] = *(ptr + 2);
630}
631
633 unsigned int v[3], unsigned int* ptr)
634{
635 v[0] = *(ptr);
636 v[1] = *(ptr + 1);
637 v[2] = *(ptr + 2);
638}
639
641 unsigned int in[3], unsigned int out[3])
642{
643 out[0] = in[0] >> VTKKW_FP_SHIFT;
644 out[1] = in[1] >> VTKKW_FP_SHIFT;
645 out[2] = in[2] >> VTKKW_FP_SHIFT;
646}
647
648inline int vtkFixedPointVolumeRayCastMapper::CheckMinMaxVolumeFlag(unsigned int mmpos[3], int c)
649{
650 vtkIdType offset = static_cast<vtkIdType>(this->MinMaxVolumeSize[3]) *
651 (mmpos[2] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0] * this->MinMaxVolumeSize[1]) +
652 mmpos[1] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
653 static_cast<vtkIdType>(c);
654
655 return ((*(this->MinMaxVolume + 3 * offset + 2)) & 0x00ff);
656}
657
659 unsigned int mmpos[3], int c, unsigned short maxIdx, int flip)
660{
661 vtkIdType offset = static_cast<vtkIdType>(this->MinMaxVolumeSize[3]) *
662 (mmpos[2] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0] * this->MinMaxVolumeSize[1]) +
663 mmpos[1] * static_cast<vtkIdType>(this->MinMaxVolumeSize[0]) + mmpos[0]) +
664 static_cast<vtkIdType>(c);
665
666 if ((*(this->MinMaxVolume + 3 * offset + 2) & 0x00ff))
667 {
668 if (flip)
669 {
670 return (*(this->MinMaxVolume + 3 * offset) < maxIdx);
671 }
672 else
673 {
674 return (*(this->MinMaxVolume + 3 * offset + 1) > maxIdx);
675 }
676 }
677 else
678 {
679 return 0;
680 }
681}
682
683inline void vtkFixedPointVolumeRayCastMapper::LookupColorUC(unsigned short* colorTable,
684 unsigned short* scalarOpacityTable, unsigned short index, unsigned char color[4])
685{
686 unsigned short alpha = scalarOpacityTable[index];
687 color[0] = static_cast<unsigned char>(
688 (colorTable[3 * index] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
689 color[1] = static_cast<unsigned char>(
690 (colorTable[3 * index + 1] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
691 color[2] = static_cast<unsigned char>(
692 (colorTable[3 * index + 2] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
693 color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
694}
695
696inline void vtkFixedPointVolumeRayCastMapper::LookupDependentColorUC(unsigned short* colorTable,
697 unsigned short* scalarOpacityTable, unsigned short index[4], int components,
698 unsigned char color[4])
699{
700 unsigned short alpha;
701 switch (components)
702 {
703 case 2:
704 alpha = scalarOpacityTable[index[1]];
705 color[0] = static_cast<unsigned char>(
706 (colorTable[3 * index[0]] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
707 color[1] = static_cast<unsigned char>(
708 (colorTable[3 * index[0] + 1] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
709 color[2] = static_cast<unsigned char>(
710 (colorTable[3 * index[0] + 2] * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
711 color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
712 break;
713 case 4:
714 alpha = scalarOpacityTable[index[3]];
715 color[0] = static_cast<unsigned char>((index[0] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
716 color[1] = static_cast<unsigned char>((index[1] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
717 color[2] = static_cast<unsigned char>((index[2] * alpha + 0x7fff) >> VTKKW_FP_SHIFT);
718 color[3] = static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
719 break;
720 }
721}
722
724 unsigned short* colorTable[4], unsigned short* scalarOpacityTable[4], unsigned short index[4],
725 float weights[4], int components, unsigned char color[4])
726{
727 unsigned int tmp[4] = { 0, 0, 0, 0 };
728
729 for (int i = 0; i < components; i++)
730 {
731 unsigned short alpha =
732 static_cast<unsigned short>(static_cast<float>(scalarOpacityTable[i][index[i]]) * weights[i]);
733 tmp[0] += static_cast<unsigned char>(
734 ((colorTable[i][3 * index[i]]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
735 tmp[1] += static_cast<unsigned char>(
736 ((colorTable[i][3 * index[i] + 1]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
737 tmp[2] += static_cast<unsigned char>(
738 ((colorTable[i][3 * index[i] + 2]) * alpha + 0x7fff) >> (2 * VTKKW_FP_SHIFT - 8));
739 tmp[3] += static_cast<unsigned char>(alpha >> (VTKKW_FP_SHIFT - 8));
740 }
741
742 color[0] = static_cast<unsigned char>((tmp[0] > 255) ? (255) : (tmp[0]));
743 color[1] = static_cast<unsigned char>((tmp[1] > 255) ? (255) : (tmp[1]));
744 color[2] = static_cast<unsigned char>((tmp[2] > 255) ? (255) : (tmp[2]));
745 color[3] = static_cast<unsigned char>((tmp[3] > 255) ? (255) : (tmp[3]));
746}
747
749{
750 int idx;
751
752 if (pos[2] < this->FixedPointCroppingRegionPlanes[4])
753 {
754 idx = 0;
755 }
756 else if (pos[2] > this->FixedPointCroppingRegionPlanes[5])
757 {
758 idx = 18;
759 }
760 else
761 {
762 idx = 9;
763 }
764
765 if (pos[1] >= this->FixedPointCroppingRegionPlanes[2])
766 {
767 if (pos[1] > this->FixedPointCroppingRegionPlanes[3])
768 {
769 idx += 6;
770 }
771 else
772 {
773 idx += 3;
774 }
775 }
776
777 if (pos[0] >= this->FixedPointCroppingRegionPlanes[0])
778 {
779 if (pos[0] > this->FixedPointCroppingRegionPlanes[1])
780 {
781 idx += 2;
782 }
783 else
784 {
785 idx += 1;
786 }
787 }
788
789 return !(static_cast<unsigned int>(this->CroppingRegionFlags) & this->CroppingRegionMask[idx]);
790}
791
792VTK_ABI_NAMESPACE_END
793#endif
Defines a transfer function for mapping a property to an RGB color value.
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?
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?
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:108
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
record modification and/or execution time
Timer support and logging.
describes linear transformations via a 4x4 matrix
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:130
window superclass for vtkRenderWindow
Definition vtkWindow.h:45
int vtkTypeBool
Definition vtkABI.h:64
#define vtkDataArray
VTK_THREAD_RETURN_TYPE vtkFPVRCMSwitchOnDataType(void *arg)
VTK_THREAD_RETURN_TYPE FixedPointVolumeRayCastMapper_CastRays(void *arg)
int vtkIdType
Definition vtkType.h:368
#define VTK_MARSHAL_EXCLUDE_REASON_IS_INTERNAL
#define VTK_MARSHALAUTO
#define VTK_MARSHALEXCLUDE(reason)