iMSTK
Interactive Medical Simulation Toolkit
imstkVTKPlaneRenderDelegate.cpp
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 #include "imstkVTKPlaneRenderDelegate.h"
8 #include "imstkPlane.h"
9 #include "imstkVisualModel.h"
10 
11 #include <vtkActor.h>
12 #include <vtkPlaneSource.h>
13 #include <vtkPolyDataMapper.h>
14 #include <vtkTransform.h>
15 
16 namespace imstk
17 {
18 VTKPlaneRenderDelegate::VTKPlaneRenderDelegate() :
19  m_planeSource(vtkSmartPointer<vtkPlaneSource>::New())
20 {
21 }
22 
23 void
24 VTKPlaneRenderDelegate::init()
25 {
26  auto geometry = std::dynamic_pointer_cast<Plane>(m_visualModel->getGeometry());
27  CHECK(geometry != nullptr) << "VTKPlaneRenderDelegate only works with Plane geometry";
28 
29  // Setup mapper
30  {
31  vtkNew<vtkPolyDataMapper> mapper;
32  mapper->SetInputConnection(m_planeSource->GetOutputPort());
33  vtkNew<vtkActor> actor;
34  actor->SetMapper(mapper);
35  actor->SetUserTransform(m_transform);
36  m_mapper = mapper;
37  m_actor = actor;
38  }
39 
40  update();
42 
43  // Call to update to initialize
44  processEvents();
45 }
46 
47 void
49 {
51 
52  // Events aren't used for primitives, always update
53  auto geometry = std::dynamic_pointer_cast<Plane>(m_visualModel->getGeometry());
54 
55  m_planeSource->SetCenter(0.0, 0.0, 0.0);
56  m_planeSource->SetNormal(geometry->getNormal(Geometry::DataType::PreTransform).data());
57  m_planeSource->Modified();
58 
59  AffineTransform3d T = AffineTransform3d::Identity();
60  T.translate(geometry->getPosition(Geometry::DataType::PostTransform));
61  T.rotate(geometry->getOrientation(Geometry::DataType::PostTransform));
62  T.scale(geometry->getWidth());
63  T.matrix().transposeInPlace();
64  m_transform->SetMatrix(T.data());
65 }
66 } // namespace imstk
void update()
Update render delegate.
std::shared_ptr< VisualModel > m_visualModel
imstk visual model (contains data (geometry) and render specification (render material)) ...
void processEvents() override
Update cube source based on the cube geometry.
Represents and infinite plane, width can be used for visual purposes.
Definition: imstkPlane.h:19
Compound Geometry.
void processEvents() override
Update plane source based on the plane geometry.
void updateRenderProperties() override
Updates the actor and mapper properties from the currently set VisualModel.
virtual void processEvents()
Process the event queue, default implementation processes visualModel events and its RenderMaterial e...