7 #include "imstkVTKRenderDelegate.h" 8 #include "imstkLogger.h" 9 #include "imstkPointSet.h" 10 #include "imstkRenderDelegateObjectFactory.h" 11 #include "imstkVisualModel.h" 12 #include "imstkVolumeRenderMaterial.h" 14 #include <vtkAbstractMapper.h> 16 #include <vtkImageReader2.h> 17 #include <vtkImageReader2Factory.h> 18 #include <vtkTexture.h> 19 #include <vtkTransform.h> 23 VTKRenderDelegate::VTKRenderDelegate() :
24 m_transform(vtkSmartPointer<vtkTransform>::New()),
27 m_visualModel(nullptr),
35 CHECK(model !=
nullptr)
36 <<
"VTKRenderDelegate was given null VisualModel";
39 <<
"VTKRenderDelegate was given a VisualModel " <<
m_visualModel->getName()
40 <<
" which does not have a material";
44 queueConnect<Event>(m_material, &RenderMaterial::modified,
54 std::shared_ptr<VTKRenderDelegate>
70 std::shared_ptr<RenderMaterial> renderMaterial =
m_visualModel->getRenderMaterial();
73 std::list<Command> cmds;
74 bool contains[2] = {
false,
false };
77 if (cmd.m_event->m_sender ==
m_visualModel.get() && !contains[0])
82 else if (cmd.m_event->m_sender == renderMaterial.get() && !contains[1])
89 for (std::list<Command>::reverse_iterator i = cmds.rbegin(); i != cmds.rend(); i++)
99 disconnect(m_material, shared_from_this(), &RenderMaterial::modified);
104 queueConnect<Event>(m_material, &RenderMaterial::modified,
111 vtkSmartPointer<vtkTexture>
112 VTKRenderDelegate::getVTKTexture(std::shared_ptr<Texture> texture)
114 vtkNew<vtkImageReader2Factory> readerFactory;
115 std::string fileName = texture->getPath();
116 auto imageReader = readerFactory->CreateImageReader2(fileName.c_str());
119 imageReader->SetFileName(fileName.c_str());
120 imageReader->Update();
123 vtkNew<vtkTexture> vtktexture;
125 vtktexture->SetInputConnection(imageReader->GetOutputPort());
void rforeachEvent(std::function< void(Command cmd)> func)
thread safe reverse loop over all event commands, one can implement a custom handler ...
void update()
Update render delegate.
void initialize(std::shared_ptr< VisualModel > model)
Setup the VTKRenderDelegate with given model.
friend void disconnect(std::shared_ptr< EventObject >, std::shared_ptr< EventObject >, std::string(*)())
Remove an observer from the sender.
std::shared_ptr< VisualModel > m_visualModel
imstk visual model (contains data (geometry) and render specification (render material)) ...
Base class for events which contain a type, priority, and data priority defaults to 0 and uses a grea...
void visualModelModified(Event *e)
Callback for visual model modifications.
static std::shared_ptr< VTKRenderDelegate > makeDelegate(std::shared_ptr< VisualModel > visualModel)
Instantiate proper render delegate.
void updateRenderProperties() override
Updates the actor and mapper properties from the currently set VisualModel.
void materialModified(Event *imstkNotUsed(e))
Callback for updating render properties.
virtual void processEvents()
Process the event queue, default implementation processes visualModel events and its RenderMaterial e...
static std::shared_ptr< VTKRenderDelegate > makeRenderDelegate(std::shared_ptr< VisualModel > visualModel)
attempt to create a delegate for the given visual model
Stores everything needed to invoke an event A call may not be present, in which case invoke doesn't d...