VTK  9.6.20260705
vtkOpenGLSurfaceProbeVolumeMapper.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
54
55#ifndef vtkOpenGLSurfaceProbeVolumeMapper_h
56#define vtkOpenGLSurfaceProbeVolumeMapper_h
57
58#include "vtkNew.h" // For vtkNew
60#include "vtkRenderingVolumeOpenGL2Module.h" // For export macro
61#include "vtkVolumeTexture.h" // For VolumeTexture
62#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
63
64VTK_ABI_NAMESPACE_BEGIN
68
69class VTKRENDERINGVOLUMEOPENGL2_EXPORT VTK_MARSHALAUTO vtkOpenGLSurfaceProbeVolumeMapper
71{
72public:
73 static vtkOpenGLSurfaceProbeVolumeMapper* New();
74 vtkTypeMacro(vtkOpenGLSurfaceProbeVolumeMapper, vtkOpenGLPolyDataMapper);
75
77
85
87
94
102 vtkSetSmartPointerMacro(VolumeTexture, vtkVolumeTexture);
103
105
111 double GetWindow() { return this->ScalarRange[1] - this->ScalarRange[0]; }
112 void SetWindow(double window)
113 {
114 double level = this->GetLevel();
115 this->SetScalarRange(level - 0.5 * window, level + 0.5 * window);
116 }
117
118 double GetLevel() { return 0.5 * (this->ScalarRange[0] + this->ScalarRange[1]); }
119 void SetLevel(double level)
120 {
121 double window = this->GetWindow();
122 this->SetScalarRange(level - 0.5 * window, level + 0.5 * window);
123 }
124
125
127
133 enum class BlendModes : unsigned int
134 {
135 NONE = 0,
139 };
140
143 void SetBlendModeToNone() { this->SetBlendMode(BlendModes::NONE); }
144 void SetBlendModeToMaximumIntensity() { this->SetBlendMode(BlendModes::MAX); }
145 void SetBlendModeToMinimumIntensity() { this->SetBlendMode(BlendModes::MIN); }
148
150
153 vtkGetMacro(BlendWidth, double);
154 vtkSetMacro(BlendWidth, double);
156
157 void RenderPiece(vtkRenderer* ren, vtkActor* act) override;
158
159 void UpdateShaders(vtkOpenGLHelper& cellBO, vtkRenderer* ren, vtkActor* act) override;
160
167 vtkUnsignedCharArray* MapScalars(vtkDataSet* input, double alpha, int& cellFlag) override;
168
176
181 void CreateDefaultLookupTable() override {};
182
183protected:
184 int FillInputPortInformation(int port, vtkInformation* info) override;
185
189
190private:
191 vtkOpenGLSurfaceProbeVolumeMapper();
192 ~vtkOpenGLSurfaceProbeVolumeMapper() override;
193
194 void CreateTexture(vtkTextureObject*, vtkOpenGLRenderWindow*);
195 void ReplaceActiveFBO(vtkRenderer*);
196 void RestoreActiveFBO(vtkRenderer*);
197
199
200 vtkNew<vtkTextureObject> PositionsTextureObject;
201 vtkNew<vtkTextureObject> NormalsTextureObject;
203
204 vtkNew<vtkImageData> TransformedSource;
205
206 // Internal pass type used for shader updates
207 enum class PassTypes : unsigned int
208 {
209 DEFAULT = 0,
210 POSITION_TEXTURE,
211 PROBE
212 };
213 PassTypes CurrentPass = PassTypes::DEFAULT;
214
215 // Blend mode
216 BlendModes BlendMode = BlendModes::NONE;
217 double BlendWidth = 1.0;
218
219 // Saved state
220 bool SavedScissorTestState = false;
221 bool SavedBlendState = false;
222 int SavedViewport[4] = {};
223};
224
225VTK_ABI_NAMESPACE_END
226#endif
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:151
Proxy object to connect input/output ports.
abstract class to specify dataset behavior
Definition vtkDataSet.h:166
topologically and geometrically regular array of data
Store vtkAlgorithm input/output information.
virtual vtkUnsignedCharArray * MapScalars(double alpha)
Map the scalars (if there are any scalars and ScalarVisibility is on) through the lookup table,...
virtual void SetScalarRange(double, double)
Specify range in terms of scalar minimum and maximum (smin,smax).
double ScalarRange[2]
Definition vtkMapper.h:557
Allocate and hold a VTK object.
Definition vtkNew.h:168
Internal class which encapsulates OpenGL FramebufferObject.
OpenGL rendering window.
void SetBlendModeToMaximumIntensity()
Set/Get the blend mode.
void UpdateShaders(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act) override
Make sure appropriate shaders are defined, compiled and bound.
vtkImageData * GetSource()
Specify the input data to be probed.
vtkPolyData * GetProbeInput()
Specify the input data used for probing (optional).
void SetSourceData(vtkImageData *in)
Specify the input data to be probed.
void SetSourceConnection(vtkAlgorithmOutput *algOutput)
Specify the input data to be probed.
bool HasTranslucentPolygonalGeometry() override
Determine whether this mapper should be invoked on a specific rendering pass.
virtual void UpdateShadersProbePass(vtkOpenGLHelper &cellBO, vtkRenderer *ren)
virtual void ReplaceShaderPositionPass(vtkActor *act)
void SetBlendModeToAverageIntensity()
Set/Get the blend mode.
vtkSetEnumMacro(BlendMode, BlendModes)
Set/Get the blend mode.
vtkUnsignedCharArray * MapScalars(vtkDataSet *input, double alpha, int &cellFlag) override
Map the scalars of the source through the lookup table if any.
virtual void ReplaceShaderProbePass(vtkActor *act)
void SetWindow(double window)
Convienence methods to set the window and level values used for scalar coloring, which ultimately set...
void SetLevel(double level)
Convienence methods to set the window and level values used for scalar coloring, which ultimately set...
void CreateDefaultLookupTable() override
Defined as no-op to prevent the creation of a default lookup table in GetLookupTable.
double GetWindow()
Convienence methods to set the window and level values used for scalar coloring, which ultimately set...
void SetProbeInputConnection(vtkAlgorithmOutput *algOutput)
Specify the input data used for probing (optional).
void RenderPiece(vtkRenderer *ren, vtkActor *act) override
Implemented by sub classes.
double GetLevel()
Convienence methods to set the window and level values used for scalar coloring, which ultimately set...
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
void SetBlendModeToMinimumIntensity()
Set/Get the blend mode.
void SetProbeInputData(vtkPolyData *in)
Specify the input data used for probing (optional).
static vtkOpenGLSurfaceProbeVolumeMapper * New()
vtkGetEnumMacro(BlendMode, BlendModes)
Set/Get the blend mode.
concrete dataset represents vertices, lines, polygons, and triangle strips
abstract specification for renderers
Hold a reference to a vtkObjectBase instance.
abstracts an OpenGL texture object.
dynamic, self-adjusting array of unsigned char
Creates and manages the volume texture rendered by vtkOpenGLGPUVolumeRayCastMapper.
#define VTK_MARSHALAUTO