VTK  9.7.0
vtkRenderWindow.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
37
38#ifndef vtkRenderWindow_h
39#define vtkRenderWindow_h
40
41#include "vtkEventData.h" // for enums
42#include "vtkNew.h" // For vtkNew
43#include "vtkRenderingCoreModule.h" // For export macro
44#include "vtkSmartPointer.h" // For vtkSmartPointer
45#include "vtkWindow.h"
46#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
47
48VTK_ABI_NAMESPACE_BEGIN
49class vtkCollection;
50class vtkFloatArray;
52class vtkMatrix4x4;
53class vtkProp;
56class vtkRenderer;
60
61// lets define the different types of stereo
62#define VTK_STEREO_CRYSTAL_EYES 1
63#define VTK_STEREO_RED_BLUE 2
64#define VTK_STEREO_INTERLACED 3
65#define VTK_STEREO_LEFT 4
66#define VTK_STEREO_RIGHT 5
67#define VTK_STEREO_DRESDEN 6
68#define VTK_STEREO_ANAGLYPH 7
69#define VTK_STEREO_CHECKERBOARD 8
70#define VTK_STEREO_SPLITVIEWPORT_HORIZONTAL 9
71#define VTK_STEREO_FAKE 10
72#define VTK_STEREO_EMULATE 11
73#define VTK_STEREO_ZSPACE_INSPIRE 12
74
75class VTKRENDERINGCORE_EXPORT VTK_MARSHALAUTO vtkRenderWindow : public vtkWindow
76{
77public:
78 vtkTypeMacro(vtkRenderWindow, vtkWindow);
79 void PrintSelf(ostream& os, vtkIndent indent) override;
80
87
91 virtual void AddRenderer(vtkRenderer*);
92
97
102
106 static const char* GetRenderLibrary();
107
111 virtual const char* GetRenderingBackend();
112
118
123
132
134
137 vtkGetMacro(CapturingGL2PSSpecialProps, int);
139
144 void Render() override;
145
149 virtual void Start() {}
150
154 virtual void End() {}
155
161 virtual void Initialize() {}
162
164
167 vtkGetMacro(Initialized, bool);
169
173 virtual void Finalize() {}
174
179 virtual void Frame() {}
180
185 virtual void WaitForCompletion() {}
186
191 virtual void CopyResultFrame();
192
199
201
204 virtual void SetFullScreen(vtkTypeBool) {}
205 vtkGetMacro(FullScreen, vtkTypeBool);
206 vtkBooleanMacro(FullScreen, vtkTypeBool);
208
210
214 vtkGetMacro(Coverable, vtkTypeBool);
215 vtkBooleanMacro(Coverable, vtkTypeBool);
216 virtual void SetCoverable(vtkTypeBool coverable);
218
220
226 virtual void SetStereoCapableWindow(vtkTypeBool capable);
228
230
251 vtkGetMacro(StereoType, int);
252 void SetStereoType(int);
262 {
264 }
268
270
274 static const char* GetStereoTypeAsString(int type);
276
278
283 vtkBooleanMacro(StereoRender, vtkTypeBool);
285
287
292 vtkBooleanMacro(AlphaBitPlanes, vtkTypeBool);
294
296
302 vtkBooleanMacro(PointSmoothing, vtkTypeBool);
304
306
312 vtkBooleanMacro(LineSmoothing, vtkTypeBool);
314
316
322 vtkBooleanMacro(PolygonSmoothing, vtkTypeBool);
324
329 virtual void StereoUpdate();
330
335 virtual void StereoMidpoint();
336
341 virtual void StereoRenderComplete();
342
344
351 vtkSetClampMacro(AnaglyphColorSaturation, float, 0.0f, 1.0f);
352 vtkGetMacro(AnaglyphColorSaturation, float);
354
356
370 vtkSetVector2Macro(AnaglyphColorMask, int);
371 vtkGetVectorMacro(AnaglyphColorMask, int, 2);
373
379 virtual void WindowRemap() {}
380
382
387 vtkBooleanMacro(SwapBuffers, vtkTypeBool);
389
391
403 virtual int SetPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, unsigned char* /*data*/,
404 int /*front*/, int /*right*/ = 0)
405 {
406 return 0;
407 }
408 virtual int SetPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/,
409 vtkUnsignedCharArray* /*data*/, int /*front*/, int /*right*/ = 0)
410 {
411 return 0;
412 }
414
416
423 virtual float* GetRGBAPixelData(
424 int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, int /*front*/, int /*right*/ = 0)
425 {
426 return nullptr;
427 }
428 virtual int GetRGBAPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, int /*front*/,
429 vtkFloatArray* /*data*/, int /*right*/ = 0)
430 {
431 return 0;
432 }
433 virtual int SetRGBAPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, float*, int /*front*/,
434 int /*blend*/ = 0, int /*right*/ = 0)
435 {
436 return 0;
437 }
438 virtual int SetRGBAPixelData(
439 int, int, int, int, vtkFloatArray*, int, int /*blend*/ = 0, int /*right*/ = 0)
440 {
441 return 0;
442 }
443 virtual void ReleaseRGBAPixelData(float* /*data*/) {}
444 virtual unsigned char* GetRGBACharPixelData(
445 int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, int /*front*/, int /*right*/ = 0)
446 {
447 return nullptr;
448 }
449 virtual int GetRGBACharPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, int /*front*/,
450 vtkUnsignedCharArray* /*data*/, int /*right*/ = 0)
451 {
452 return 0;
453 }
454 virtual int SetRGBACharPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/,
455 unsigned char* /*data*/, int /*front*/, int /*blend*/ = 0, int /*right*/ = 0)
456 {
457 return 0;
458 }
459 virtual int SetRGBACharPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/,
460 vtkUnsignedCharArray* /*data*/, int /*front*/, int /*blend*/ = 0, int /*right*/ = 0)
461 {
462 return 0;
463 }
465
467
472 virtual float* GetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/) { return nullptr; }
473 virtual int GetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, float* /*z*/)
474 {
475 return 0;
476 }
477 virtual int GetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, vtkFloatArray* /*z*/)
478 {
479 return 0;
480 }
481 virtual int SetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, float* /*z*/)
482 {
483 return 0;
484 }
485 virtual int SetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, vtkFloatArray* /*z*/)
486 {
487 return 0;
488 }
489 float GetZbufferDataAtPoint(int x, int y)
490 {
491 float value = 1.0f;
492 this->GetZbufferData(x, y, x, y, &value);
493 return value;
494 }
496
498
501 vtkGetMacro(NeverRendered, int);
503
505
509 vtkGetMacro(AbortRender, int);
510 vtkSetMacro(AbortRender, int);
511 vtkGetMacro(InAbortCheck, int);
512 vtkSetMacro(InAbortCheck, int);
513 virtual int CheckAbortStatus();
515
522 virtual vtkTypeBool GetEventPending() { return 0; }
523
527 virtual int CheckInRenderStatus() { return this->InRender; }
528
532 virtual void ClearInRenderStatus() { this->InRender = 0; }
533
535
543 virtual void SetDesiredUpdateRate(double);
544 vtkGetMacro(DesiredUpdateRate, double);
546
548
554 vtkGetMacro(NumberOfLayers, int);
555 vtkSetClampMacro(NumberOfLayers, int, 1, VTK_INT_MAX);
557
559
564
569
574 void UnRegister(vtkObjectBase* o) override;
575
577
580 void SetDisplayId(void*) override {}
581 void SetWindowId(void*) override {}
582 virtual void SetNextWindowId(void*) {}
583 void SetParentId(void*) override {}
584 void* GetGenericDisplayId() override { return nullptr; }
585 void* GetGenericWindowId() override { return nullptr; }
586 void* GetGenericParentId() override { return nullptr; }
587 void* GetGenericContext() override { return nullptr; }
588 void* GetGenericDrawable() override { return nullptr; }
589 void SetWindowInfo(const char*) override {}
590 virtual void SetNextWindowInfo(const char*) {}
591 void SetParentInfo(const char*) override {}
593
598 virtual bool InitializeFromCurrentContext() { return false; }
599
601
610 virtual bool GetPlatformSupportsRenderWindowSharing() { return false; }
612
617 virtual bool IsCurrent() { return false; }
618
624 virtual void SetForceMakeCurrent() {}
625
629 virtual const char* ReportCapabilities() { return "Not Implemented"; }
630
634 virtual int SupportsOpenGL() { return 0; }
635
639 virtual vtkTypeBool IsDirect() { return 0; }
640
645 virtual int GetDepthBufferSize() { return 0; }
646
651 virtual int GetColorBufferSizes(int* /*rgba*/) { return 0; }
652
654
659 virtual void SetMultiSamples(int);
660 vtkGetMacro(MultiSamples, int);
662
664
669 vtkBooleanMacro(StencilCapable, vtkTypeBool);
671
673
679 vtkSetMacro(DeviceIndex, int);
680 vtkGetMacro(DeviceIndex, int);
682
686 virtual int GetNumberOfDevices() { return 0; }
687
689
693 vtkGetMacro(UseSRGBColorSpace, bool);
694 vtkSetMacro(UseSRGBColorSpace, bool);
695 vtkBooleanMacro(UseSRGBColorSpace, bool);
697
698 enum : vtkTypeUInt16
699 {
701 };
702
704
712 virtual void SetPhysicalViewDirection(double, double, double);
713 virtual void SetPhysicalViewDirection(double[3]);
714 vtkGetVector3Macro(PhysicalViewDirection, double);
716
718
726 virtual void SetPhysicalViewUp(double, double, double);
727 virtual void SetPhysicalViewUp(double[3]);
728 vtkGetVector3Macro(PhysicalViewUp, double);
730
732
740 virtual void SetPhysicalTranslation(double, double, double);
741 virtual void SetPhysicalTranslation(double[3]);
742 vtkGetVector3Macro(PhysicalTranslation, double);
744
746
755 virtual void SetPhysicalScale(double);
756 vtkGetMacro(PhysicalScale, double);
758
766
773
781 vtkEventDataDevice device, vtkMatrix4x4* deviceToWorldMatrix);
782
784
790 vtkGetMacro(EnableTranslucentSurface, bool);
791 vtkSetMacro(EnableTranslucentSurface, bool);
792 vtkBooleanMacro(EnableTranslucentSurface, bool);
794
796
803
804protected:
806 ~vtkRenderWindow() override;
807
808 virtual void DoStereoRender();
809
814 int OldScreen[5];
838
840
845
847
848 // -Z axis of the Physical to World matrix
849 double PhysicalViewDirection[3] = { 0.0, 0.0, -1.0 };
850 // Y axis of the Physical to World matrix
851 double PhysicalViewUp[3] = { 0.0, 1.0, 0.0 };
852 // Inverse of the translation component of the Physical to World matrix, in mm
853 double PhysicalTranslation[3] = { 0.0, 0.0, 0.0 };
854 // Scale of the Physical to World matrix
855 double PhysicalScale = 1.0;
856
858
859 bool Initialized = false;
860
862
863private:
864 vtkRenderWindow(const vtkRenderWindow&) = delete;
865 void operator=(const vtkRenderWindow&) = delete;
866
867 vtkNew<vtkStereoCompositor> StereoCompositor;
868};
869
870VTK_ABI_NAMESPACE_END
871#endif
create and manipulate ordered lists of objects
dynamic, self-adjusting array of float
create a window for renderers to draw into
a simple class to control print indentation
Definition vtkIndent.h:29
represent and manipulate 4x4 transformation matrices
Allocate and hold a VTK object.
Definition vtkNew.h:59
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:50
Asynchronously measures GPU execution times for a series of events.
platform-independent render window interaction including picking and frame rate control.
void * GetGenericDrawable() override
Dummy stubs for vtkWindow API.
void SetStereoTypeToDresden()
Set/Get what type of stereo rendering to use.
virtual void SetDesiredUpdateRate(double)
Set/Get the desired update rate.
virtual void ReleaseRGBAPixelData(float *)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual void SetPhysicalViewUp(double, double, double)
Set/get physical coordinate system in world coordinate system.
virtual int GetZbufferData(int, int, int, int, float *)
Set/Get the zbuffer data from the frame buffer.
void SetStereoType(int)
Set/Get what type of stereo rendering to use.
virtual void SetPhysicalTranslation(double, double, double)
Set/get physical coordinate system in world coordinate system.
virtual int SetRGBACharPixelData(int, int, int, int, unsigned char *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual int SetZbufferData(int, int, int, int, float *)
Set/Get the zbuffer data from the frame buffer.
void SetStereoTypeToRedBlue()
Set/Get what type of stereo rendering to use.
virtual void Initialize()
Initializes the rendering process.
vtkNew< vtkRenderTimerLog > RenderTimer
void SetParentInfo(const char *) override
Dummy stubs for vtkWindow API.
virtual void Finalize()
Finalize the rendering process.
void * GetGenericParentId() override
Dummy stubs for vtkWindow API.
virtual bool GetPlatformSupportsRenderWindowSharing()
Set/Get an already existing window that this window should share data with if possible.
virtual void SetHardwareWindow(vtkHardwareWindow *win)
Set/Get the platform hardware window associated with this window.
virtual const char * GetRenderingBackend()
What rendering backend has the user requested.
virtual vtkHardwareWindow * GetHardwareWindow()
Set/Get the platform hardware window associated with this window.
double AbortCheckTime
The universal time since the last abort check occurred.
virtual void SetPhysicalTranslation(double[3])
Set/get physical coordinate system in world coordinate system.
virtual int SetRGBAPixelData(int, int, int, int, float *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual int SetPixelData(int, int, int, int, unsigned char *, int, int=0)
Set/Get the pixel data of an image, transmitted as RGBRGBRGB.
virtual void AddRenderer(vtkRenderer *)
Add a renderer to the list of renderers.
virtual const char * ReportCapabilities()
Get report of capabilities for the render window.
virtual void GetPhysicalToWorldMatrix(vtkMatrix4x4 *matrix)
Get physical to world transform matrix.
virtual void Frame()
A termination method performed at the end of the rendering process to do things like swapping buffers...
vtkTypeBool LineSmoothing
virtual void SetCoverable(vtkTypeBool coverable)
Set/Get whether windows should be coverable (as opposed to always on top).
double PhysicalTranslation[3]
vtkRenderWindowInteractor * Interactor
void SetStereoTypeToFake()
Set/Get what type of stereo rendering to use.
virtual bool GetDeviceToWorldMatrixForDevice(vtkEventDataDevice device, vtkMatrix4x4 *deviceToWorldMatrix)
Store in deviceToWorldMatrix the matrix that goes from device coordinates to world coordinates.
static const char * GetStereoTypeAsString(int type)
Returns the stereo type as a string.
virtual int GetZbufferData(int, int, int, int, vtkFloatArray *)
Set/Get the zbuffer data from the frame buffer.
vtkTypeBool FullScreen
void SetStereoTypeToInterlaced()
Set/Get what type of stereo rendering to use.
static vtkRenderWindow * New()
Construct an instance of vtkRenderWindow with its screen size set to 300x300, borders turned on,...
void CaptureGL2PSSpecialProps(vtkCollection *specialProps)
The GL2PS exporter must handle certain props in a special way (e.g.
vtkTypeBool HasRenderer(vtkRenderer *)
Query if a renderer is in the list of renderers.
virtual int GetRGBACharPixelData(int, int, int, int, int, vtkUnsignedCharArray *, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
float GetZbufferDataAtPoint(int x, int y)
Set/Get the zbuffer data from the frame buffer.
virtual void WaitForCompletion()
Block the thread until the actual rendering is finished().
virtual void StereoRenderComplete()
Handles work required once both views have been rendered when using stereo rendering.
virtual void SetStereoCapableWindow(vtkTypeBool capable)
Prescribe that the window be created in a stereo-capable mode.
virtual int SetPixelData(int, int, int, int, vtkUnsignedCharArray *, int, int=0)
Set/Get the pixel data of an image, transmitted as RGBRGBRGB.
vtkTypeBool PolygonSmoothing
virtual vtkRenderWindowInteractor * MakeRenderWindowInteractor()
Create an interactor to control renderers in this window.
virtual void SetPhysicalToWorldMatrix(vtkMatrix4x4 *matrix)
Set physical to world transform matrix.
virtual int GetDepthBufferSize()
This method should be defined by the subclass.
void SetStereoRender(vtkTypeBool stereo)
Turn on/off stereo rendering.
void SetStereoTypeToLeft()
Set/Get what type of stereo rendering to use.
virtual void SetFullScreen(vtkTypeBool)
Turn on/off rendering full screen window size.
virtual void SetNextWindowId(void *)
Dummy stubs for vtkWindow API.
virtual bool InitializeFromCurrentContext()
Initialize the render window from the information associated with the currently activated OpenGL cont...
void SetWindowInfo(const char *) override
Dummy stubs for vtkWindow API.
virtual void DoStereoRender()
virtual void SetPhysicalViewDirection(double, double, double)
Set/get physical coordinate system in world coordinate system.
virtual int GetRGBAPixelData(int, int, int, int, int, vtkFloatArray *, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual void SetNextWindowInfo(const char *)
Dummy stubs for vtkWindow API.
virtual void ClearInRenderStatus()
Clear status (after an exception was thrown for example).
virtual float * GetZbufferData(int, int, int, int)
Set/Get the zbuffer data from the frame buffer.
vtkTypeBool Coverable
void Render() override
Ask each renderer owned by this RenderWindow to render its image and synchronize this process.
void * GetGenericContext() override
Dummy stubs for vtkWindow API.
vtkSmartPointer< vtkUnsignedCharArray > ResultFrame
void SetParentId(void *) override
Dummy stubs for vtkWindow API.
virtual void SetInteractor(vtkRenderWindowInteractor *)
Set the interactor to the render window.
virtual void End()
Update the system, if needed, at end of render process.
virtual void SetPhysicalViewDirection(double[3])
Set/get physical coordinate system in world coordinate system.
virtual int CheckAbortStatus()
This is a flag that can be set to interrupt a rendering that is in progress.
virtual void SetForceMakeCurrent()
If called, allow MakeCurrent() to skip cache-check when called.
void SetWindowId(void *) override
Dummy stubs for vtkWindow API.
virtual void SetPhysicalViewUp(double[3])
Set/get physical coordinate system in world coordinate system.
void SetStereoTypeToCheckerboard()
Set/Get what type of stereo rendering to use.
double PhysicalViewDirection[3]
void UnRegister(vtkObjectBase *o) override
This Method detects loops of RenderWindow<->Interactor, so objects are freed properly.
virtual int SupportsOpenGL()
Does this render window support OpenGL?
vtkTypeBool AlphaBitPlanes
vtkRenderWindow * SharedRenderWindow
virtual void StereoUpdate()
Update the system, if needed, due to stereo rendering.
virtual void SetMultiSamples(int)
Set / Get the number of multisamples to use for hardware antialiasing.
virtual void Start()
Start the rendering process for a frame.
void SetStereoTypeToAnaglyph()
Set/Get what type of stereo rendering to use.
virtual void CopyResultFrame()
Performed at the end of the rendering process to generate image.
virtual int SetRGBACharPixelData(int, int, int, int, vtkUnsignedCharArray *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
vtkRendererCollection * Renderers
virtual unsigned char * GetRGBACharPixelData(int, int, int, int, int, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual int SetRGBAPixelData(int, int, int, int, vtkFloatArray *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
vtkTypeBool StencilCapable
static const char * GetRenderLibrary()
What rendering library has the user requested.
void * GetGenericWindowId() override
Dummy stubs for vtkWindow API.
virtual void WindowRemap()
Remap the rendering window.
void RemoveRenderer(vtkRenderer *)
Remove a renderer from the list of renderers.
virtual int SetZbufferData(int, int, int, int, vtkFloatArray *)
Set/Get the zbuffer data from the frame buffer.
vtkTypeBool StereoRender
virtual int GetColorBufferSizes(int *)
Get the size of the color buffer.
vtkGetNewMacro(RenderTimer, vtkRenderTimerLog)
Get the render timer log for this window.
virtual void SetSharedRenderWindow(vtkRenderWindow *)
Set/Get an already existing window that this window should share data with if possible.
vtkTypeBool PointSmoothing
vtkTypeBool StereoCapableWindow
virtual vtkTypeBool GetEventPending()
Check to see if a mouse button has been pressed.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void StereoMidpoint()
Intermediate method performs operations required between the rendering of the left and right eye.
void SetDisplayId(void *) override
Dummy stubs for vtkWindow API.
vtkSmartPointer< vtkHardwareWindow > HardwareWindow
void SetStereoTypeToEmulate()
Set/Get what type of stereo rendering to use.
void SetStereoTypeToSplitViewportHorizontal()
Set/Get what type of stereo rendering to use.
virtual int GetNumberOfDevices()
Returns the number of devices (graphics cards) on a system.
vtkSmartPointer< vtkUnsignedCharArray > StereoBuffer
virtual float * GetRGBAPixelData(int, int, int, int, int, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual vtkTypeBool IsDirect()
Is this render window using hardware acceleration?
vtkRendererCollection * GetRenderers()
Return the collection of renderers in the render window.
void SetStereoTypeToCrystalEyes()
Set/Get what type of stereo rendering to use.
vtkTypeBool SwapBuffers
double PhysicalViewUp[3]
virtual void SetPhysicalScale(double)
Set/get physical coordinate system in world coordinate system.
void SetStereoTypeToRight()
Set/Get what type of stereo rendering to use.
virtual int CheckInRenderStatus()
Are we rendering at the moment.
void * GetGenericDisplayId() override
Dummy stubs for vtkWindow API.
virtual bool IsCurrent()
Tells if this window is the current graphics context for the calling thread.
const char * GetStereoTypeAsString()
Returns the stereo type as a string.
an ordered list of renderers
abstract specification for renderers
Definition vtkRenderer.h:64
Hold a reference to a vtkObjectBase instance.
helper class to generate composited stereo images.
dynamic, self-adjusting array of unsigned char
int vtkTypeBool
Definition vtkABI.h:64
vtkEventDataDevice
platform-independent event data structures
#define VTK_STEREO_ANAGLYPH
#define VTK_STEREO_SPLITVIEWPORT_HORIZONTAL
#define VTK_STEREO_DRESDEN
#define VTK_STEREO_CHECKERBOARD
#define VTK_STEREO_CRYSTAL_EYES
#define VTK_STEREO_RIGHT
#define VTK_STEREO_FAKE
#define VTK_STEREO_RED_BLUE
#define VTK_STEREO_INTERLACED
#define VTK_STEREO_EMULATE
#define VTK_STEREO_LEFT
#define VTK_INT_MAX
Definition vtkType.h:192
#define VTK_MARSHAL_EXCLUDE_REASON_IS_INTERNAL
#define VTK_MARSHALAUTO
#define VTK_MARSHALEXCLUDE(reason)