7 #include "imstkVTKOrientedBoxRenderDelegate.h" 8 #include "imstkOrientedBox.h" 9 #include "imstkVisualModel.h" 12 #include <vtkCubeSource.h> 13 #include <vtkPolyDataMapper.h> 14 #include <vtkTransform.h> 18 VTKOrientedCubeRenderDelegate::VTKOrientedCubeRenderDelegate() :
19 m_cubeSource(vtkSmartPointer<vtkCubeSource>::New())
24 VTKOrientedCubeRenderDelegate::init()
26 auto geometry = std::dynamic_pointer_cast<OrientedBox>(
m_visualModel->getGeometry());
27 CHECK(geometry !=
nullptr) <<
"VTKOrientedCubeRenderDelegate only works with OrientedBox geometry";
29 const Vec3d& extents = geometry->getExtents(Geometry::DataType::PreTransform);
30 m_cubeSource->SetCenter(0.0, 0.0, 0.0);
31 m_cubeSource->SetXLength(extents[0] * 2.0);
32 m_cubeSource->SetYLength(extents[1] * 2.0);
33 m_cubeSource->SetZLength(extents[2] * 2.0);
35 const Mat4d& transform = geometry->getTransform().transpose();
36 m_transform->SetMatrix(transform.data());
40 vtkNew<vtkPolyDataMapper> mapper;
41 mapper->SetInputConnection(m_cubeSource->GetOutputPort());
42 vtkNew<vtkActor> actor;
43 actor->SetMapper(mapper);
44 actor->SetUserTransform(m_transform);
61 const Vec3d& extents = geometry->
getExtents(Geometry::DataType::PreTransform);
62 m_cubeSource->SetXLength(extents[0] * 2.0);
63 m_cubeSource->SetYLength(extents[1] * 2.0);
64 m_cubeSource->SetZLength(extents[2] * 2.0);
65 m_cubeSource->Modified();
67 AffineTransform3d T = AffineTransform3d::Identity();
68 T.translate(geometry->getPosition(Geometry::DataType::PostTransform));
69 T.rotate(geometry->getOrientation(Geometry::DataType::PostTransform));
70 T.scale(geometry->getScaling());
71 T.matrix().transposeInPlace();
72 m_transform->SetMatrix(T.data());
OrientedBox geometry, specified with extents (half lengths)
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.
Vec3d getExtents(DataType type=DataType::PostTransform)
Returns the extents of the cube.
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...