iMSTK
Interactive Medical Simulation Toolkit
imstkVTKSurfaceNormalRenderDelegate.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 vtkDataArray;
12 class vtkPolyData;
13 
14 namespace imstk
15 {
16 class PointSet;
17 template<typename T, int N> class VecDataArray;
18 
26 {
27 public:
29  ~VTKSurfaceNormalRenderDelegate() override = default;
30 
34  void processEvents() override;
35 
36 protected:
37  void init() override;
38 
42  void vertexDataModified(Event* e);
43 
47  void geometryModified(Event* e);
48 
52  void updateRenderProperties() override;
53 
57  std::shared_ptr<VecDataArray<double, 3>> computeTriangleCenters(
58  std::shared_ptr<VecDataArray<double, 3>> verticesPtr,
59  std::shared_ptr<VecDataArray<int, 3>> indicesPtr);
60 
61  std::shared_ptr<VecDataArray<double, 3>> computeTriangleNormals(
62  std::shared_ptr<VecDataArray<double, 3>> verticesPtr,
63  std::shared_ptr<VecDataArray<int, 3>> indicesPtr);
64 
65  std::shared_ptr<VecDataArray<double, 3>> m_surfMeshVertices;
66  std::shared_ptr<VecDataArray<int, 3>> m_surfMeshIndices;
67 
68  std::shared_ptr<VecDataArray<double, 3>> m_triangleCenterVertices;
69  std::shared_ptr<VecDataArray<double, 3>> m_triangleNormals;
70 
71  vtkSmartPointer<vtkPolyData> m_polydata;
72  vtkSmartPointer<vtkPolyData> m_glyphPolyData;
73 
74  vtkSmartPointer<vtkDataArray> m_mappedVertexArray;
75  vtkSmartPointer<vtkDataArray> m_mappedNormalsArray;
76 };
77 } // namespace imstk
vtkSmartPointer< vtkDataArray > m_mappedNormalsArray
Mapped array of orientations.
vtkSmartPointer< vtkDataArray > m_mappedVertexArray
Mapped array of vertices.
Base class for events which contain a type, priority, and data priority defaults to 0 and uses a grea...
Compound Geometry.
void vertexDataModified(Event *e)
Callback for when vertex data changes.
void processEvents() override
Update polydata source based on the mesh geometry.
std::shared_ptr< VecDataArray< double, 3 > > computeTriangleCenters(std::shared_ptr< VecDataArray< double, 3 >> verticesPtr, std::shared_ptr< VecDataArray< int, 3 >> indicesPtr)
Computes triangle centers from the current geometry.
Delegates rendering of SurfaceMesh to VTK as normals per triangle center from VisualModel.
void updateRenderProperties() override
Updates the actor and mapper properties from the currently set VisualModel.
Abstract base class for PolyData-based RenderDelegates.
void geometryModified(Event *e)
Callback for when geometry changes.