VTK  9.2.6
vtkCompositeMapperHelper2.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4 
5  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
6  All rights reserved.
7  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
8 
9  This software is distributed WITHOUT ANY WARRANTY; without even
10  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11  PURPOSE. See the above copyright notice for more information.
12 
13 =========================================================================*/
14 
15 #ifndef vtkCompositeMapperHelper2_h
16 #define vtkCompositeMapperHelper2_h
17 
19 #include "vtkRenderingOpenGL2Module.h" // for export macro
20 
21 class vtkPolyData;
23 
24 // this class encapsulates values tied to a
25 // polydata
27 {
28 public:
30  unsigned int FlatIndex;
31  double Opacity;
32  bool IsOpaque;
33  bool Visibility;
40 
41  bool Marked;
42 
43  unsigned int StartVertex;
44  unsigned int NextVertex;
45 
46  // point line poly strip edge stripedge
49 
50  // stores the mapping from vtk cells to gl_PrimitiveId
52 };
53 
54 //===================================================================
56 class VTKRENDERINGOPENGL2_EXPORT vtkCompositeMapperHelper2 : public vtkOpenGLPolyDataMapper
57 {
58 public:
61  void PrintSelf(ostream& os, vtkIndent indent) override;
62 
63  void SetParent(vtkCompositePolyDataMapper2* p) { this->Parent = p; }
64 
65  vtkCompositeMapperHelperData* AddData(vtkPolyData* pd, unsigned int flatIndex);
66 
70  void RenderPiece(vtkRenderer* ren, vtkActor* act) override;
71 
75  void ClearMark();
76  void RemoveUnused();
77  bool GetMarked() { return this->Marked; }
78  void SetMarked(bool v) { this->Marked = v; }
80 
84  std::vector<vtkPolyData*> GetRenderedList() const;
85 
91  vtkHardwareSelector* sel, std::vector<unsigned int>& pixeloffsets, vtkProp* prop) override;
92 
93  virtual void ProcessCompositePixelBuffers(vtkHardwareSelector* sel, vtkProp* prop,
94  vtkCompositeMapperHelperData* hdata, std::vector<unsigned int>& mypixels);
95 
96 protected:
98  std::map<vtkPolyData*, vtkCompositeMapperHelperData*> Data;
99 
100  bool Marked;
101 
103  void UpdateCameraShiftScale(vtkRenderer* ren, vtkActor* actor) override;
104 
105  vtkCompositeMapperHelper2() { this->Parent = nullptr; };
106  ~vtkCompositeMapperHelper2() override;
107 
108  void DrawIBO(vtkRenderer* ren, vtkActor* actor, int primType, vtkOpenGLHelper& CellBO,
109  GLenum mode, int pointSize);
110 
111  virtual void SetShaderValues(
112  vtkShaderProgram* prog, vtkCompositeMapperHelperData* hdata, size_t primOffset);
113 
118  void UpdateShaders(vtkOpenGLHelper& cellBO, vtkRenderer* ren, vtkActor* act) override;
119 
124  void ReplaceShaderColor(
125  std::map<vtkShader::Type, vtkShader*> shaders, vtkRenderer* ren, vtkActor* act) override;
126 
130  bool GetNeedToRebuildBufferObjects(vtkRenderer* ren, vtkActor* act) override;
131 
135  void BuildBufferObjects(vtkRenderer* ren, vtkActor* act) override;
136  virtual void AppendOneBufferObject(vtkRenderer* ren, vtkActor* act,
137  vtkCompositeMapperHelperData* hdata, vtkIdType& flat_index, std::vector<unsigned char>& colors,
138  std::vector<float>& norms);
139 
143  void BuildSelectionIBO(
144  vtkPolyData* poly, std::vector<unsigned int> (&indices)[4], vtkIdType offset) override;
145 
152 
153  std::vector<unsigned int> VertexOffsets;
154 
155  // vert line poly strip edge stripedge
156  std::vector<unsigned int> IndexArray[PrimitiveEnd];
157 
158  void RenderPieceDraw(vtkRenderer* ren, vtkActor* act) override;
159 
162 
164 
166  std::vector<std::vector<unsigned int>> PickPixels;
167 
168  std::map<vtkAbstractArray*, vtkDataArray*> ColorArrayMap;
169 
170 private:
172  void operator=(const vtkCompositeMapperHelper2&) = delete;
173 };
174 
175 #endif
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:56
virtual void RenderPieceDraw(vtkRenderer *ren, vtkActor *act)
Implemented by sub classes.
std::map< vtkAbstractArray *, vtkDataArray * > ColorArrayMap
PolyDataMapper using OpenGL to render.
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:51
static vtkOpenGLPolyDataMapper * New()
std::vector< unsigned int > VertexOffsets
mapper for composite dataset consisting of polygonal data.
virtual void BuildSelectionIBO(vtkPolyData *poly, std::vector< unsigned int >(&indices)[4], vtkIdType offset)
Build the selection IBO, called by UpdateBufferObjects.
abstract specification for renderers
Definition: vtkRenderer.h:72
virtual void UpdateShaders(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act)
Make sure appropriate shaders are defined, compiled and bound.
int vtkIdType
Definition: vtkType.h:332
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:90
virtual int CanUseTextureMapForColoring(vtkDataObject *input)
Returns if we can use texture maps for scalar coloring.
virtual bool GetNeedToRebuildBufferObjects(vtkRenderer *ren, vtkActor *act)
Does the VBO/IBO need to be rebuilt.
vtkCompositePolyDataMapper2 * Parent
a simple class to control print indentation
Definition: vtkIndent.h:39
void ProcessSelectorPixelBuffers(vtkHardwareSelector *sel, std::vector< unsigned int > &pixeloffsets, vtkProp *prop) override
allows a mapper to update a selections color buffers Called from a prop which in turn is called from ...
std::map< vtkPolyData *, vtkCompositeMapperHelperData * > Data
void RenderPiece(vtkRenderer *ren, vtkActor *act) override
Implemented by sub classes.
Helper class for vtkCompositePolyDataMapper2 that is a subclass of vtkOpenGLPolyDataMapper.
std::vector< std::vector< unsigned int > > PickPixels
used by the hardware selector
virtual void ReplaceShaderColor(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
Perform string replacements on the shader templates, called from ReplaceShaderValues.
virtual void UpdateCameraShiftScale(vtkRenderer *ren, vtkActor *actor)
virtual void BuildBufferObjects(vtkRenderer *ren, vtkActor *act)
Build the VBO/IBO, called by UpdateBufferObjects.
vtkNew< vtkOpenGLCellToVTKCellMap > CellCellMap
general representation of visualization data
Definition: vtkDataObject.h:65
vtkHardwareSelector * CurrentSelector
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetParent(vtkCompositePolyDataMapper2 *p)
unsigned int StartIndex[vtkOpenGLPolyDataMapper::PrimitiveEnd]
The ShaderProgram uses one or more Shader objects.
unsigned int NextIndex[vtkOpenGLPolyDataMapper::PrimitiveEnd]