Slicer 5.13
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
vtkMRMLLayerDMPipelineFactory.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Copyright (c) Kitware SAS
6
7 See COPYRIGHT.txt
8 or http://www.slicer.org/copyright/copyright.txt for details.
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 This file was originally developed by Thibault Pelletier, Kitware SAS,
17 and was partially funded by ANR grants ANR-22-CE45-0034 and ANR-18-RHUS-005.
18
19==============================================================================*/
20
21#ifndef __vtkMRMLLayerDMPipelineFactory_h
22#define __vtkMRMLLayerDMPipelineFactory_h
23
24#include "vtkSlicerLayerDMModuleMRMLDisplayableManagerExport.h"
25
26// VTK includes
27#include <vtkCommand.h>
28#include <vtkObject.h>
29#include <vtkSmartPointer.h>
30#include <vtkWeakPointer.h>
31
32// STL includes
33#include <functional>
34#include <vector>
35
40class vtkMRMLNode;
41
46class VTK_SLICER_LAYERDM_MODULE_MRMLDISPLAYABLEMANAGER_EXPORT vtkMRMLLayerDMPipelineFactory : public vtkObject
47{
48public:
49 enum Events
50 {
51 // Triggered when the factory creates a non-empty pipeline
52 PipelineAboutToBeCreatedEvent = vtkCommand::UserEvent + 1
53 };
54
56 vtkTypeMacro(vtkMRMLLayerDMPipelineFactory, vtkObject);
57 void PrintSelf(ostream& os, vtkIndent indent) override;
58
60 static vtkSmartPointer<vtkMRMLLayerDMPipelineFactory> GetInstance();
61
65 void AddPipelineCreator(const vtkSmartPointer<vtkMRMLLayerDMPipelineCreator>& creator);
66
71 vtkSmartPointer<vtkMRMLLayerDMPipelineCreator> AddPipelineCreator(
72 const std::function<vtkSmartPointer<vtkMRMLLayerDMPipeline>(vtkMRMLAbstractViewNode*, vtkMRMLNode*)>& creatorCallBack,
73 int priority = 0);
74
78 void RemovePipelineCreator(const vtkSmartPointer<vtkMRMLLayerDMPipelineCreator>& creator);
79
81 bool ContainsPipelineCreator(const vtkSmartPointer<vtkMRMLLayerDMPipelineCreator>& creator) const;
82
91 vtkSmartPointer<vtkMRMLLayerDMPipeline> CreatePipeline(vtkMRMLAbstractViewNode* viewNode, vtkMRMLNode* node, vtkSmartPointer<vtkMRMLLayerDMPipelineCreator>* creator);
92 vtkSmartPointer<vtkMRMLLayerDMPipeline> CreatePipeline(vtkMRMLAbstractViewNode* viewNode, vtkMRMLNode* node);
94
102
103protected:
105 ~vtkMRMLLayerDMPipelineFactory() override = default;
106
107private:
110 void SortPipelineCreators();
111
112 std::vector<vtkSmartPointer<vtkMRMLLayerDMPipelineCreator>> PipelineCreators;
113 vtkSmartPointer<vtkMRMLLayerDMObjectEventObserver> Observer;
114 vtkWeakPointer<vtkMRMLAbstractViewNode> LastView;
115 vtkWeakPointer<vtkMRMLNode> LastNode;
116 vtkWeakPointer<vtkMRMLLayerDMPipeline> LastPipeline;
117};
118
119#endif
Abstract MRML node to represent a view. The class holds the properties common to any view type (3D,...
VTK object observer with one callback endpoint when an event is triggered. Can observe multiple objec...
Interface responsible for creating new pipelines given input pairs of viewNode and node.
vtkSmartPointer< vtkMRMLLayerDMPipeline > CreatePipeline(vtkMRMLAbstractViewNode *viewNode, vtkMRMLNode *node, vtkSmartPointer< vtkMRMLLayerDMPipelineCreator > *creator)
void RemovePipelineCreator(const vtkSmartPointer< vtkMRMLLayerDMPipelineCreator > &creator)
Remove the input creator from the list of creators. If the factory doesn't contain the creator,...
void AddPipelineCreator(const vtkSmartPointer< vtkMRMLLayerDMPipelineCreator > &creator)
Add the input creator to the list of creators. If the factory already contains the creator,...
vtkMRMLNode * GetLastNode() const
vtkSmartPointer< vtkMRMLLayerDMPipelineCreator > AddPipelineCreator(const std::function< vtkSmartPointer< vtkMRMLLayerDMPipeline >(vtkMRMLAbstractViewNode *, vtkMRMLNode *)> &creatorCallBack, int priority=0)
vtkSmartPointer< vtkMRMLLayerDMPipeline > CreatePipeline(vtkMRMLAbstractViewNode *viewNode, vtkMRMLNode *node)
bool ContainsPipelineCreator(const vtkSmartPointer< vtkMRMLLayerDMPipelineCreator > &creator) const
true if the given creator is contained in the factory, false otherwise.
~vtkMRMLLayerDMPipelineFactory() override=default
static vtkMRMLLayerDMPipelineFactory * New()
vtkMRMLAbstractViewNode * GetLastViewNode() const
vtkMRMLLayerDMPipeline * GetLastPipeline() const
static vtkSmartPointer< vtkMRMLLayerDMPipelineFactory > GetInstance()
Singleton instance of the factory used by the displayable manager.
void PrintSelf(ostream &os, vtkIndent indent) override
Interface for the layered displayable manager pipelines.
Abstract Superclass for all specific types of MRML nodes.