forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vtkCompositePainter.h
127 lines (105 loc) · 4.11 KB
/
vtkCompositePainter.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*=========================================================================
Program: Visualization Toolkit
Module: vtkCompositePainter.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkCompositePainter
* @brief painter that can be inserted before any
* vtkDataSet painting chain to handle composite datasets.
*
* vtkCompositePainter iterates over the leaves in a composite datasets.
* This painter can also handle the case when the dataset is not a composite
* dataset.
*/
#ifndef vtkCompositePainter_h
#define vtkCompositePainter_h
#include "vtkRenderingOpenGLModule.h" // For export macro
#include "vtkPainter.h"
#include "vtkColor.h" // needed for vtkColor3d
#include <stack> // needed for RenderBlockState.
class vtkCompositeDataDisplayAttributesLegacy;
class vtkInformationObjectBaseKey;
class vtkProperty;
class vtkRenderWindow;
class VTKRENDERINGOPENGL_EXPORT vtkCompositePainter : public vtkPainter
{
public:
static vtkCompositePainter* New();
vtkTypeMacro(vtkCompositePainter, vtkPainter);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Get the output data object from this painter. The default implementation
* simply forwards the input data object as the output.
*/
vtkDataObject* GetOutput() override;
/**
* Key used to pass a vtkCompositeDataDisplayAttributesLegacy instance doing the
* painter pipeline.
*/
static vtkInformationObjectBaseKey* DISPLAY_ATTRIBUTES();
/**
* Set/get the composite data set display attributes. If set, these attributes
* can be used by the painter to control specific rendering attributes on a
* per-block basis for a multi-block dataset.
*/
void SetCompositeDataDisplayAttributes(vtkCompositeDataDisplayAttributesLegacy *attributes);
vtkGetObjectMacro(CompositeDataDisplayAttributes, vtkCompositeDataDisplayAttributesLegacy)
protected:
vtkCompositePainter();
~vtkCompositePainter() override;
/**
* Take part in garbage collection.
*/
void ReportReferences(vtkGarbageCollector *collector) override;
/**
* Called before RenderInternal() if the Information has been changed
* since the last time this method was called.
*/
void ProcessInformation(vtkInformation* information) override;
/**
* Performs the actual rendering. Subclasses may override this method.
* default implementation merely call a Render on the DelegatePainter,
* if any. When RenderInternal() is called, it is assured that the
* DelegatePainter is in sync with this painter i.e. UpdateDelegatePainter()
* has been called.
*/
void RenderInternal(vtkRenderer* renderer, vtkActor* actor,
unsigned long typeflags, bool forceCompileOnly) override;
class RenderBlockState
{
public:
std::stack<bool> Visibility;
std::stack<double> Opacity;
std::stack<vtkColor3d> AmbientColor;
std::stack<vtkColor3d> DiffuseColor;
std::stack<vtkColor3d> SpecularColor;
double RenderedOpacity;
vtkColor3d RenderedAmbientColor;
vtkColor3d RenderedDiffuseColor;
vtkColor3d RenderedSpecularColor;
};
void RenderBlock(vtkRenderer *renderer,
vtkActor *actor,
unsigned long typeflags,
bool forceCompileOnly,
vtkDataObject *dobj,
unsigned int &flat_index,
RenderBlockState &state);
/**
* Overridden in vtkOpenGLCompositePainter to pass attributes to OpenGL.
*/
virtual void UpdateRenderingState(
vtkRenderWindow*, vtkProperty*, RenderBlockState&) {}
vtkDataObject* OutputData;
vtkCompositeDataDisplayAttributesLegacy *CompositeDataDisplayAttributes;
private:
vtkCompositePainter(const vtkCompositePainter&) = delete;
void operator=(const vtkCompositePainter&) = delete;
};
#endif