iMSTK
Interactive Medical Simulation Toolkit
imstkVTKSurfaceMeshRenderDelegate.h
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #pragma once
8 
9 #include "imstkVTKPolyDataRenderDelegate.h"
10 
11 class vtkCellArray;
12 class vtkDataArray;
13 class vtkDoubleArray;
14 class vtkFloatArray;
15 class vtkPolyData;
16 
17 namespace imstk
18 {
19 class AbstractDataArray;
20 class SurfaceMesh;
21 template<typename T, int N> class VecDataArray;
22 
29 {
30 public:
32  ~VTKSurfaceMeshRenderDelegate() override = default;
33 
37  void processEvents() override;
38 
42  void initializeTextures();
43 
44 // Callbacks for modifications, when an element changes the user or API must post the modified event
45 // to inform that this happened, if the actual buffer on the geometry is swapped then geometry
46 // modified would instead be called
47 protected:
48  void init() override;
49 
53  void vertexDataModified(Event* e);
54  void indexDataModified(Event* e);
55  void normalDataModified(Event* e);
56  void vertexScalarsModified(Event* e);
57  void cellScalarsModified(Event* e);
58  void textureCoordinatesModified(Event* e);
59 
63  void geometryModified(Event* e);
64 
68  void texturesModified(Event* e);
69 
70  void setVertexBuffer(std::shared_ptr<VecDataArray<double, 3>> vertices);
71  void setNormalBuffer(std::shared_ptr<VecDataArray<double, 3>> normals);
72  void setIndexBuffer(std::shared_ptr<VecDataArray<int, 3>> indices);
73  void setVertexScalarBuffer(std::shared_ptr<AbstractDataArray> scalars);
74  void setCellScalarBuffer(std::shared_ptr<AbstractDataArray> scalars);
75  void setTextureCoordinateBuffer(std::shared_ptr<AbstractDataArray> textureCoordinates);
76 
77  std::shared_ptr<SurfaceMesh> m_geometry;
78  bool m_isDynamicMesh;
79 
80  std::shared_ptr<VecDataArray<double, 3>> m_vertices;
81  std::shared_ptr<VecDataArray<double, 3>> m_normals;
82  std::shared_ptr<VecDataArray<int, 3>> m_indices;
83  std::shared_ptr<AbstractDataArray> m_vertexScalars;
84  std::shared_ptr<AbstractDataArray> m_cellScalars;
85  std::shared_ptr<AbstractDataArray> m_textureCoordinates;
86 
87  vtkSmartPointer<vtkPolyData> m_polydata;
88 
89  vtkSmartPointer<vtkDoubleArray> m_mappedVertexArray;
90  vtkSmartPointer<vtkDoubleArray> m_mappedNormalArray;
91  vtkSmartPointer<vtkFloatArray> m_mappedTangentArray;
92  vtkSmartPointer<vtkFloatArray> m_mappedTCoordsArray;
93  vtkSmartPointer<vtkDataArray> m_mappedVertexScalarArray;
94  vtkSmartPointer<vtkDataArray> m_mappedCellScalarArray;
95  vtkSmartPointer<vtkCellArray> m_cellArray;
96 };
97 } // namespace imstk
vtkSmartPointer< vtkCellArray > m_cellArray
Array of cells.
vtkSmartPointer< vtkFloatArray > m_mappedTangentArray
Mapped array of tangents.
vtkSmartPointer< vtkDataArray > m_mappedCellScalarArray
Mapped array of scalars.
Base class for events which contain a type, priority, and data priority defaults to 0 and uses a grea...
vtkSmartPointer< vtkFloatArray > m_mappedTCoordsArray
Mapped array of tcoords.
vtkSmartPointer< vtkDataArray > m_mappedVertexScalarArray
Mapped array of scalars.
Compound Geometry.
void geometryModified(Event *e)
Callback for when geometry is modified.
vtkSmartPointer< vtkDoubleArray > m_mappedNormalArray
Mapped array of normals.
Delegates rendering of SurfaceMesh to VTK from VisualModel.
Abstract base class for PolyData-based RenderDelegates.
void vertexDataModified(Event *e)
Callback for when vertex values are modified.
void texturesModified(Event *e)
Callback for when RenderMaterial textures are modified.
vtkSmartPointer< vtkDoubleArray > m_mappedVertexArray
Mapped array of vertices.