7 #include "imstkVTKSphereRenderDelegate.h" 8 #include "imstkSphere.h" 9 #include "imstkVisualModel.h" 12 #include <vtkPolyDataMapper.h> 13 #include <vtkSphereSource.h> 14 #include <vtkTransform.h> 18 VTKSphereRenderDelegate::VTKSphereRenderDelegate() :
19 m_sphereSource(vtkSmartPointer<vtkSphereSource>::New())
24 VTKSphereRenderDelegate::init()
26 auto geometry = std::dynamic_pointer_cast<Sphere>(
m_visualModel->getGeometry());
27 CHECK(geometry !=
nullptr) <<
"VTKSphereRenderDelegate only works with Sphere geometry";
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);
34 const Mat4d& transform = geometry->getTransform().transpose();
35 m_transform->SetMatrix(transform.data());
39 vtkNew<vtkPolyDataMapper> mapper;
40 mapper->SetInputConnection(m_sphereSource->GetOutputPort());
41 vtkNew<vtkActor> actor;
42 actor->SetMapper(mapper);
43 actor->SetUserTransform(m_transform);
59 m_sphereSource->SetRadius(geometry->getRadius(Geometry::DataType::PreTransform));
60 m_sphereSource->Modified();
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());
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 sphere source based on the sphere geometry.
Represents a sphere via its position & radius.
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...