iMSTK
Interactive Medical Simulation Toolkit
imstkVTKCylinderRenderDelegate.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 "imstkVTKCylinderRenderDelegate.h"
8 #include "imstkCylinder.h"
9 #include "imstkRenderMaterial.h"
10 #include "imstkVisualModel.h"
11 
12 #include <vtkActor.h>
13 #include <vtkCylinderSource.h>
14 #include <vtkPolyDataMapper.h>
15 #include <vtkTransform.h>
16 
17 namespace imstk
18 {
19 VTKCylinderRenderDelegate::VTKCylinderRenderDelegate() :
20  m_cylinderSource(vtkSmartPointer<vtkCylinderSource>::New())
21 {
22 }
23 
24 void
25 VTKCylinderRenderDelegate::init()
26 {
27  auto geometry = std::dynamic_pointer_cast<Cylinder>(m_visualModel->getGeometry());
28  CHECK(geometry != nullptr) << "VTKCylinderRenderDelegate only works with Cylinder geometry";
29 
30  m_cylinderSource->SetCenter(0.0, 0.0, 0.0);
31  m_cylinderSource->SetRadius(geometry->getRadius(Geometry::DataType::PreTransform));
32  m_cylinderSource->SetHeight(geometry->getLength(Geometry::DataType::PreTransform));
33  m_cylinderSource->SetResolution(100);
34 
35  const Mat4d& transform = geometry->getTransform().transpose();
36  m_transform->SetMatrix(transform.data());
37 
38  // Setup mapper
39  {
40  vtkNew<vtkPolyDataMapper> mapper;
41  mapper->SetInputConnection(m_cylinderSource->GetOutputPort());
42  vtkNew<vtkActor> actor;
43  actor->SetMapper(mapper);
44  actor->SetUserTransform(m_transform);
45  m_mapper = mapper;
46  m_actor = actor;
47  }
48 
49  update();
51 }
52 
53 void
55 {
57 
58  auto geometry = std::dynamic_pointer_cast<Cylinder>(m_visualModel->getGeometry());
59 
60  m_cylinderSource->SetRadius(geometry->getRadius(Geometry::DataType::PreTransform));
61  m_cylinderSource->SetHeight(geometry->getLength(Geometry::DataType::PreTransform));
62  m_cylinderSource->Modified();
63 
64  AffineTransform3d T = AffineTransform3d::Identity();
65  T.translate(geometry->getPosition(Geometry::DataType::PostTransform));
66  T.rotate(geometry->getOrientation(Geometry::DataType::PostTransform));
67  T.scale(geometry->getScaling());
68  T.matrix().transposeInPlace();
69  m_transform->SetMatrix(T.data());
70 }
71 } // namespace imstk
void update()
Update render delegate.
std::shared_ptr< VisualModel > m_visualModel
imstk visual model (contains data (geometry) and render specification (render material)) ...
Cylinder geometry, default configuration is at origin with length running up the y axes...
Definition: imstkCylinder.h:19
Compound Geometry.
void processEvents() override
Process the event queue.
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...