iMSTK
Interactive Medical Simulation Toolkit
imstkVTKSphereRenderDelegate.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 "imstkVTKSphereRenderDelegate.h"
8 #include "imstkSphere.h"
9 #include "imstkVisualModel.h"
10 
11 #include <vtkActor.h>
12 #include <vtkPolyDataMapper.h>
13 #include <vtkSphereSource.h>
14 #include <vtkTransform.h>
15 
16 namespace imstk
17 {
18 VTKSphereRenderDelegate::VTKSphereRenderDelegate() :
19  m_sphereSource(vtkSmartPointer<vtkSphereSource>::New())
20 {
21 }
22 
23 void
24 VTKSphereRenderDelegate::init()
25 {
26  auto geometry = std::dynamic_pointer_cast<Sphere>(m_visualModel->getGeometry());
27  CHECK(geometry != nullptr) << "VTKSphereRenderDelegate only works with Sphere geometry";
28 
29  m_sphereSource->SetCenter(0.0, 0.0, 0.0);
30  m_sphereSource->SetRadius(geometry->getRadius(Geometry::DataType::PreTransform));
31  m_sphereSource->SetPhiResolution(20);
32  m_sphereSource->SetThetaResolution(20);
33 
34  const Mat4d& transform = geometry->getTransform().transpose();
35  m_transform->SetMatrix(transform.data());
36 
37  // Setup mapper
38  {
39  vtkNew<vtkPolyDataMapper> mapper;
40  mapper->SetInputConnection(m_sphereSource->GetOutputPort());
41  vtkNew<vtkActor> actor;
42  actor->SetMapper(mapper);
43  actor->SetUserTransform(m_transform);
44  m_mapper = mapper;
45  m_actor = actor;
46  }
47 
48  update();
50 }
51 
52 void
54 {
56 
57  auto geometry = std::dynamic_pointer_cast<Sphere>(m_visualModel->getGeometry());
58 
59  m_sphereSource->SetRadius(geometry->getRadius(Geometry::DataType::PreTransform));
60  m_sphereSource->Modified();
61 
62  AffineTransform3d T = AffineTransform3d::Identity();
63  T.translate(geometry->getPosition(Geometry::DataType::PostTransform));
64  T.rotate(geometry->getOrientation(Geometry::DataType::PostTransform));
65  T.scale(geometry->getScaling().maxCoeff());
66  T.matrix().transposeInPlace();
67  m_transform->SetMatrix(T.data());
68 }
69 } // namespace imstk
void update()
Update render delegate.
std::shared_ptr< VisualModel > m_visualModel
imstk visual model (contains data (geometry) and render specification (render material)) ...
Compound Geometry.
void processEvents() override
Update sphere source based on the sphere geometry.
Represents a sphere via its position & radius.
Definition: imstkSphere.h:19
virtual void updateRenderProperties()=0
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...