VTK  9.3.1
vtkOpenGLCellGridRenderRequest.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
18 #ifndef vtkOpenGLCellGridRenderRequest_h
19 #define vtkOpenGLCellGridRenderRequest_h
20 #include "vtkCellGridQuery.h"
21 #include "vtkRenderingCellGridModule.h" // For export macro
22 #include "vtkStringToken.h" // for ivars
23 
24 #include <memory> // for unique_ptr
25 #include <unordered_map> // for this->State
26 
27 VTK_ABI_NAMESPACE_BEGIN
28 class vtkActor;
30 class vtkRenderer;
31 class vtkWindow;
32 
33 class VTKRENDERINGCELLGRID_EXPORT vtkOpenGLCellGridRenderRequest : public vtkCellGridQuery
34 {
35 public:
37  class StateBase
38  {
39  public:
40  virtual ~StateBase() = default;
41  };
42 
55  enum RenderableGeometry : unsigned char
56  {
57  VERTICES = 1,
58  EDGES = 2,
59  FACES = 4,
60  VOLUMES = 8,
61  SURFACE_WITH_EDGES = EDGES | FACES,
62  ALL = VERTICES | EDGES | FACES | VOLUMES
63  };
64 
67  void PrintSelf(std::ostream& os, vtkIndent indent) override;
68 
74  virtual void SetMapper(vtkOpenGLCellGridMapper* mapper);
75  vtkGetObjectMacro(Mapper, vtkOpenGLCellGridMapper);
76 
82  virtual void SetActor(vtkActor* actor);
83  vtkGetObjectMacro(Actor, vtkActor);
84 
90  virtual void SetRenderer(vtkRenderer* renderer);
91  vtkGetObjectMacro(Renderer, vtkRenderer);
92 
98  virtual void SetWindow(vtkWindow* window);
99  vtkGetObjectMacro(Window, vtkWindow);
100 
108  vtkGetMacro(ShapesToDraw, char);
109  vtkSetClampMacro(ShapesToDraw, char, 1, 9);
110 
112  void Initialize() override;
114  void Finalize() override;
115 
124  vtkGetMacro(IsReleasingResources, bool);
125  vtkSetMacro(IsReleasingResources, bool);
126 
131  template <typename StateType>
132  StateType* GetState(vtkStringToken cellType)
133  {
134  auto it = this->State.find(cellType);
135  if (it == this->State.end())
136  {
137  it = this->State.insert(std::make_pair(cellType, std::unique_ptr<StateBase>(new StateType)))
138  .first;
139  }
140  return static_cast<StateType*>(it->second.get());
141  }
142 
143 protected:
145  ~vtkOpenGLCellGridRenderRequest() override;
146 
147  vtkOpenGLCellGridMapper* Mapper{ nullptr };
148  vtkActor* Actor{ nullptr };
149  vtkRenderer* Renderer{ nullptr };
150  vtkWindow* Window{ nullptr };
151  bool IsReleasingResources{ false };
152  char ShapesToDraw{ RenderableGeometry::ALL };
153  std::unordered_map<vtkStringToken, std::unique_ptr<StateBase>> State;
154 
155 private:
157  void operator=(const vtkOpenGLCellGridRenderRequest&) = delete;
158 };
159 
160 VTK_ABI_NAMESPACE_END
161 #endif // vtkOpenGLCellGridRenderRequest_h
virtual void Finalize()
Override this if your query-result state requires finalization.
Perform an operation on cells in a vtkCellMetadata instance.
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:40
RenderableGeometry
An enumeration of which shapes to render.
abstract specification for renderers
Definition: vtkRenderer.h:61
std::unordered_map< vtkStringToken, std::unique_ptr< StateBase > > State
window superclass for vtkRenderWindow
Definition: vtkWindow.h:27
a simple class to control print indentation
Definition: vtkIndent.h:28
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
Represent a string by its integer hash.
CellGrid mapper using OpenGL to render exotic finite element fields and cells.
StateType * GetState(vtkStringToken cellType)
Return a state object of the given type.
virtual void Initialize()
Override this if your query-result state requires initialization.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
An empty base class that responders should inherit to store state using GetState().
State used by vtkOpenGLCellGridMapper during rendering.