21#ifndef __vtkSlicerLayerDMLogic_h
22#define __vtkSlicerLayerDMLogic_h
24#include "vtkSlicerLayerDMModuleLogicExport.h"
40 void PrintSelf(ostream& os, vtkIndent indent)
override;
60 const std::string& singletonId,
101 template <
typename T>
106 template <
typename T>
115 template <
typename T>
125 template <
typename T>
136 template <
typename T>
143 template <
typename T>
146 template <
typename T>
149 template <
typename T>
158 template <
typename T>
159 static T* ModifyNodeReference(
vtkMRMLNode* node,
vtkMRMLNode* nodeRef,
const std::function<
void()>& modifyF)
161 if (!node || !nodeRef)
167 return T::SafeDownCast(nodeRef);
170 static constexpr auto EventTranslationRole{
"widgetEventTranslation" };
171 static constexpr auto DisplayRole{
"display" };
205 return referenceNodes.empty() ? nullptr : referenceNodes[0];
222 std::vector<T*> referenceNodes;
227 referenceNodes.emplace_back(refNode);
230 return referenceNodes;
253 auto scene = node ? node->
GetScene() :
nullptr;
260 if (nodeRef && !allowMultiple)
265 nodeRef = T::SafeDownCast(scene->
AddNewNodeByClass(vtkSmartPointer<T>::New()->GetClassName()));
Abstract Superclass for all specific types of MRML nodes.
vtkMRMLNode * AddAndObserveNodeReferenceID(const char *referenceRole, const char *referencedNodeID, vtkIntArray *events=nullptr, ContentModifiedObserveType observeContentModifiedEvents=ContentModifiedObserveUndefined)
Add and observe a reference node from this node for a specific referenceRole.
int GetNumberOfNodeReferences(const char *referenceRole)
Return the number of node IDs for a specific reference role (and nodes as they always have the same s...
vtkMRMLNode * SetAndObserveNthNodeReferenceID(const char *referenceRole, int n, const char *referencedNodeID, vtkIntArray *events=nullptr, ContentModifiedObserveType observeContentModifiedEvents=ContentModifiedObserveUndefined)
Set and observe the Nth node ID for a specific reference role.
virtual vtkMRMLScene * GetScene()
Get the scene this node has been added to.
vtkMRMLNode * SetAndObserveNodeReferenceID(const char *referenceRole, const char *referencedNodeID, vtkIntArray *events=nullptr, ContentModifiedObserveType observeContentModifiedEvents=ContentModifiedObserveUndefined)
Set and observe a reference node from this node for a specific referenceRole.
vtkMRMLNode * GetNthNodeReference(const char *referenceRole, int n)
Get referenced MRML node for a specific referenceRole.
A set of MRML Nodes that supports serialization and undo/redo.
bool IsNodeClassRegistered(const std::string &className)
Return True if className is a registered node.
vtkMRMLNode * AddNewNodeByClass(std::string className, std::string nodeBaseName="")
Instantiate and add a node to the scene.
void RegisterNodeClass(vtkMRMLNode *node, const char *tagName)
Register a node class to the scene so that the scene can later create the same node type from a tag o...
void operator=(const vtkSlicerLayerDMLogic &)=delete
static void SetWidgetEventTranslationNode(vtkMRMLNode *node, vtkMRMLLayerDMWidgetEventTranslationNode *translationNode)
Attach a translation node ref to the input node.
static T * SetReferenceNode(vtkMRMLNode *node, T *nodeRef, const char *role)
static T * GetDisplayNode(vtkMRMLNode *node)
static T * GetReferenceNode(vtkMRMLNode *node, const char *role)
static void CreateDefaultEventTranslation(vtkMRMLNode *node, const std::string &singletonId, const std::function< void(vtkMRMLLayerDMWidgetEventTranslationNode *)> &configureF)
void PrintSelf(ostream &os, vtkIndent indent) override
static T * CreateDisplayNode(vtkMRMLNode *node, bool allowMultiple=false)
static T * CreateReferenceNode(vtkMRMLNode *node, const char *role, bool allowMultiple=false)
static vtkMRMLLayerDMWidgetEventTranslationNode * GetWidgetEventTranslationSingleton(vtkMRMLScene *scene, const std::string &singletonId, const std::function< void(vtkMRMLLayerDMWidgetEventTranslationNode *)> &configureF)
static vtkMRMLLayerDMWidgetEventTranslationNode * GetWidgetEventTranslationNode(vtkMRMLNode *node)
void RegisterNodes() override
Registers the LayerDM MRML nodes in the scene.
vtkSlicerLayerDMLogic()=default
static vtkMRMLLayerDMWidgetEventTranslationNode * GetWidgetEventTranslationSingleton(vtkMRMLScene *scene, const std::string &singletonId)
Get the singleton translation node with given ID if it exists in the scene.
static vtkMRMLLayerDMWidgetEventTranslationNode * CreateWidgetEventTranslationSingleton(vtkMRMLScene *scene, const std::string &singletonId)
static T * AddReferenceNode(vtkMRMLNode *node, T *nodeRef, const char *role)
static void RegisterNodeIfNeeded(vtkMRMLScene *scene)
static T * SetNthReferenceNode(vtkMRMLNode *node, T *nodeRef, const char *role, int nthRef)
vtkSlicerLayerDMLogic(const vtkSlicerLayerDMLogic &)=delete
static std::string GetDisplayRole()
static std::vector< T * > GetReferenceNodes(vtkMRMLNode *node, const char *role)
static std::string GetEventTranslationRole()
static vtkSlicerLayerDMLogic * New()
~vtkSlicerLayerDMLogic() override=default