Program Listing for File vtkMRMLLayerDMPipelineFactory.h
↰ Return to documentation for file (MRMLDM/vtkMRMLLayerDMPipelineFactory.h)
#pragma once
#include "vtkSlicerLayerDMModuleMRMLDisplayableManagerExport.h"
// VTK includes
#include <vtkCommand.h>
#include <vtkObject.h>
#include <vtkSmartPointer.h>
#include <vtkWeakPointer.h>
// STL includes
#include <functional>
#include <vector>
class vtkMRMLAbstractViewNode;
class vtkMRMLLayerDMObjectEventObserver;
class vtkMRMLLayerDMPipelineCreatorI;
class vtkMRMLLayerDMPipelineI;
class vtkMRMLNode;
class VTK_SLICER_LAYERDM_MODULE_MRMLDISPLAYABLEMANAGER_EXPORT vtkMRMLLayerDMPipelineFactory : public vtkObject
{
public:
enum Events
{
// Triggered when the factory creates a non-empty pipeline
PipelineAboutToBeCreatedEvent = vtkCommand::UserEvent + 1
};
static vtkMRMLLayerDMPipelineFactory* New();
vtkTypeMacro(vtkMRMLLayerDMPipelineFactory, vtkObject);
static vtkSmartPointer<vtkMRMLLayerDMPipelineFactory> GetInstance();
void AddPipelineCreator(const vtkSmartPointer<vtkMRMLLayerDMPipelineCreatorI>& creator);
vtkSmartPointer<vtkMRMLLayerDMPipelineCreatorI> AddPipelineCreator(
const std::function<vtkSmartPointer<vtkMRMLLayerDMPipelineI>(vtkMRMLAbstractViewNode*, vtkMRMLNode*)>& creatorCallBack,
int priority = 0);
void RemovePipelineCreator(const vtkSmartPointer<vtkMRMLLayerDMPipelineCreatorI>& creator);
bool ContainsPipelineCreator(const vtkSmartPointer<vtkMRMLLayerDMPipelineCreatorI>& creator) const;
vtkSmartPointer<vtkMRMLLayerDMPipelineI> CreatePipeline(vtkMRMLAbstractViewNode* viewNode, vtkMRMLNode* node);
vtkMRMLAbstractViewNode* GetLastViewNode() const;
vtkMRMLNode* GetLastNode() const;
vtkMRMLLayerDMPipelineI* GetLastPipeline() const;
protected:
vtkMRMLLayerDMPipelineFactory();
~vtkMRMLLayerDMPipelineFactory() override = default;
private:
void SortPipelineCreators();
std::vector<vtkSmartPointer<vtkMRMLLayerDMPipelineCreatorI>> m_pipelineCreators;
vtkSmartPointer<vtkMRMLLayerDMObjectEventObserver> m_obs;
vtkWeakPointer<vtkMRMLAbstractViewNode> m_lastView;
vtkWeakPointer<vtkMRMLNode> m_lastNode;
vtkWeakPointer<vtkMRMLLayerDMPipelineI> m_lastPipeline;
};