Slicer 5.11
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
vtkMRMLScene.h
Go to the documentation of this file.
1/*=auto=========================================================================
2
3Portions (c) Copyright 2005 Brigham and Women's Hospital (BWH) All Rights Reserved.
4
5See COPYRIGHT.txt
6or http://www.slicer.org/copyright/copyright.txt for details.
7
8Program: 3D Slicer
9Module: $RCSfile: vtkMRMLScene.h,v $
10Date: $Date: 2006/03/17 15:10:09 $
11Version: $Revision: 1.18 $
12
13=========================================================================auto=*/
14
15#ifndef __vtkMRMLScene_h
16#define __vtkMRMLScene_h
17
18// MRML includes
19#include "vtkMRML.h"
20class vtkCacheManager;
23class vtkMRMLNode;
28class vtkTagTable;
29class vtkURIHandler;
30
31// VTK includes
32#include <vtkObject.h>
33#include <vtkSmartPointer.h>
34#include <vtkWeakPointer.h>
35class vtkCallbackCommand;
36class vtkCollection;
37class vtkGeneralTransform;
38class vtkImageData;
39
40// STD includes
41#include <list>
42#include <map>
43#include <random>
44#include <set>
45#include <string>
46#include <vector>
47
52//
55class VTK_MRML_EXPORT vtkMRMLScene : public vtkObject
56{
62
63public:
64 static vtkMRMLScene* New();
65 vtkTypeMacro(vtkMRMLScene, vtkObject);
66 void PrintSelf(ostream& os, vtkIndent indent) override;
67
69 void SetURL(const char* url);
70 void SetURL(const std::string& url) { return this->SetURL(url.c_str()); };
71
73 const char* GetURL();
74
76 void SetRootDirectory(const char* dir);
77
79 const char* GetRootDirectory();
80
85 int Connect(vtkMRMLMessageCollection* userMessages = nullptr);
86
95 int Import(vtkMRMLMessageCollection* userMessages = nullptr);
96
101 int Commit(const char* url = nullptr, vtkMRMLMessageCollection* userMessages = nullptr);
102
108 void Clear(int removeSingletons = 0);
109
112
130 vtkMRMLNode* CreateNodeByClass(const char* className);
131
152 void RegisterNodeClass(vtkMRMLNode* node, const char* tagName);
153
159
167 void RegisterAbstractNodeClass(std::string className, std::string typeDisplayName);
168
170 const char* GetClassNameByTag(const char* tagName);
171
173 const char* GetTagByClassName(const char* className);
174
176 std::string GetTypeDisplayNameByClassName(std::string className);
177
182 vtkMRMLNode* GetDefaultNodeByClass(const char* className);
183
186
188 vtkCollection* GetNodes();
189
203
219 vtkMRMLNode* AddNewNodeByClass(std::string className, std::string nodeBaseName = "");
220
228 vtkMRMLNode* AddNewNodeByClassWithID(std::string className, std::string nodeBaseName, std::string nodeID);
229
232
237 void NodeAdded() { this->NodeAdded(nullptr); }
238
241
246
255
264
272 vtkMRMLNode* GetNextNodeByClass(const char* className);
273
275 vtkCollection* GetNodesByName(const char* name);
276 vtkMRMLNode* GetFirstNodeByName(const char* name);
277
289 vtkMRMLNode* GetFirstNode(const char* byName = nullptr, const char* byClass = nullptr, const int* byHideFromEditors = nullptr, bool exactNameMatch = true);
290
292 vtkMRMLNode* GetNodeByID(const char* name);
293 vtkMRMLNode* GetNodeByID(std::string name);
294
297 vtkCollection* GetNodesByClassByName(const char* className, const char* name);
298
301
304
306 vtkMRMLNode* GetNthNodeByClass(int n, const char* className);
308 vtkMRMLNode* GetFirstNodeByClass(const char* className);
309
311 int GetNumberOfNodesByClass(const char* className);
312
314 int GetNodesByClass(const char* className, std::vector<vtkMRMLNode*>& nodes);
315
317 vtkCollection* GetNodesByClass(const char* className);
318
323 vtkMRMLNode* GetSingletonNode(const char* singletonTag, const char* className);
324
332
333 std::list<std::string> GetNodeClassesList();
334
341
345 bool IsNodeClassRegistered(const std::string& className);
346
349
353
357
361 std::string GenerateUniqueName(const std::string& baseName);
362
367 const char* GetUniqueNameByString(const char* baseName);
368
373
375 void SetUndoOn() { UndoFlag = true; }
376 void SetUndoOff() { UndoFlag = false; }
377 bool GetUndoFlag() { return UndoFlag; }
378 void SetUndoFlag(bool flag) { UndoFlag = flag; }
379
381 void Undo();
382
384 void Redo();
385
388
391
393 int GetNumberOfUndoLevels() { return static_cast<int>(this->UndoStack.size()); }
394
396 int GetNumberOfRedoLevels() { return static_cast<int>(this->RedoStack.size()); }
397
400
407
413 void SaveStateForUndo(vtkCollection* nodes);
414 void SaveStateForUndo(std::vector<vtkMRMLNode*> nodes);
415
422 void AddReferencedNodeID(const char* id, vtkMRMLNode* refrencingNode);
423 bool IsNodeReferencingNodeID(vtkMRMLNode* referencingNode, const char* id);
424
434 const char* GetNthReferencedID(int n);
435
436 void RemoveReferencedNodeID(const char* id, vtkMRMLNode* refrencingNode);
437
439
441
449 void UpdateNodeReferences(vtkCollection* checkNodes = nullptr);
450
452
454
457
459
469
479
480 bool IsReservedID(const std::string& id);
481
482 void AddReservedID(const char* id);
483
485
488 const char* GetChangedID(const char* id);
489
504 vtkCollection* GetReferencedNodes(vtkMRMLNode* node, bool recursive = true);
505
507 void GetReferencingNodes(vtkMRMLNode* referencedNode, std::vector<vtkMRMLNode*>& referencingNodes);
508
516
517 int IsFilePathRelative(const char* filepath);
518
525 vtkSetMacro(LoadFromXMLString, int);
526 vtkGetMacro(LoadFromXMLString, int);
527
534 vtkSetMacro(SaveToXMLString, int);
535 vtkGetMacro(SaveToXMLString, int);
536
537 vtkSetMacro(ReadDataOnLoad, int);
538 vtkGetMacro(ReadDataOnLoad, int);
539
544 void SetSceneXMLString(const std::string& xmlString);
545
550 const std::string& GetSceneXMLString();
551
553
554 vtkGetObjectMacro(CacheManager, vtkCacheManager);
556 vtkGetObjectMacro(DataIOManager, vtkDataIOManager);
558 vtkGetObjectMacro(URIHandlerCollection, vtkCollection);
559 virtual void SetURIHandlerCollection(vtkCollection*);
560 vtkGetObjectMacro(UserTagTable, vtkTagTable);
562
567 vtkURIHandler* FindURIHandler(const char* URI);
572
618
626 int GetStates() const;
627
629 inline bool IsBatchProcessing() const;
631 inline bool IsClosing() const;
633 inline bool IsImporting() const;
635 inline bool IsRestoring() const;
637 inline bool IsUndoing() const;
639 inline bool IsRedoing() const;
640
675 void StartState(unsigned long state, int anticipatedMaxProgress = 0);
676
685 void EndState(unsigned long state);
686
688 void ProgressState(unsigned long state, int progress = 0);
689
691 {
697
699 MetadataAddedEvent = 66032, // ### Slicer 4.5: Simplify - Do not explicitly set for backward compat. See issue #3472
702
706 StateEvent = 0x2000,
707 StartEvent = 0x0100,
708 EndEvent = 0x0200,
710
714
718
722
726
730
734
738
739 };
740
742 vtkGetStringMacro(LastLoadedVersion);
743 vtkSetStringMacro(LastLoadedVersion);
744
746 vtkGetStringMacro(LastLoadedExtensions);
747 vtkSetStringMacro(LastLoadedExtensions);
748
750 vtkGetStringMacro(Version);
751 vtkSetStringMacro(Version);
752
755 vtkGetStringMacro(Extensions);
756 vtkSetStringMacro(Extensions);
757
760 static bool ParseVersion(const char* versionString, std::string& application, int& major, int& minor, int& patch, int& revision);
761
764
767
770
774 bool GetModifiedSinceRead(vtkCollection* modifiedNodes = nullptr);
775
777 vtkGetMacro(StoredTime, vtkMTimeType);
778
785 bool GetStorableNodesModifiedSinceRead(vtkCollection* modifiedStorableNodes = nullptr);
786
793
796 static void SetStorableNodesModifiedSinceRead(vtkCollection* storableNodes);
797
802
806
812 bool WriteToMRB(const char* filename, vtkImageData* thumbnail = nullptr, vtkMRMLMessageCollection* userMessages = nullptr);
813
817 bool ReadFromMRB(const char* fullName, bool clear = false, vtkMRMLMessageCollection* userMessages = nullptr);
818
824 static std::string UnpackSlicerDataBundle(const char* sdbFilePath, const char* temporaryDirectory, vtkMRMLMessageCollection* userMessages = nullptr);
825
831 bool SaveSceneToSlicerDataBundleDirectory(const char* sdbDir, vtkImageData* thumbnail = nullptr, vtkMRMLMessageCollection* userMessages = nullptr);
832
834 void SaveSceneScreenshot(vtkImageData* thumbnail);
835
845 static std::string PercentEncode(std::string s);
846
852 static std::string CreateUniqueFileName(const std::string& filename, const std::string& knownExtension = "");
853
855 static std::string GetPrivateFolderName();
856
857protected:
858 typedef std::map<std::string, std::set<std::string>> NodeReferencesType;
859
861 ~vtkMRMLScene() override;
862
865
868
873
877 void AddReferencedNodes(vtkMRMLNode* node, vtkCollection* refNodes, bool recursive = true);
878
880 void RemoveInvalidNodeReferences(vtkCollection* checkNodes, const std::set<std::string>& validNodeIDs);
881
883 static void SceneCallback(vtkObject* caller, unsigned long eid, void* clientData, void* callData);
884
885 std::string GenerateUniqueID(vtkMRMLNode* node);
886 std::string GenerateUniqueID(const std::string& baseID);
887 int GetUniqueIDIndex(const std::string& baseID);
888 std::string BuildID(const std::string& baseID, int idIndex) const;
889
891 std::string GenerateUniqueName(vtkMRMLNode* node);
892
898 int GetUniqueNameIndex(const std::string& baseName);
899
901 std::string BuildName(const std::string& baseName, int nameIndex) const;
902
906
909
911 void RemoveNodeID(char* nodeID);
912
915
917 NodeReferencesType::iterator FindNodeReference(const char* referencedId, vtkMRMLNode* referencingNode);
918
921
924
926 void GetNodeReferenceIDsFromUndoStack(std::set<std::string>& referenceIDs) const;
927
929 bool IsNodeIDReservedByUndo(const std::string id) const;
930
932
938 std::string& dataDir,
939 std::map<vtkMRMLStorageNode*, std::vector<std::string>>& originalStorageNodeFileNames,
940 vtkMRMLMessageCollection* userMessages);
941
942 vtkCollection* Nodes;
943
945 vtkWeakPointer<vtkMRMLSubjectHierarchyNode> SubjectHierarchyNode;
946
950 vtkCollection* URIHandlerCollection;
952
953 std::vector<unsigned long> States;
954
957
958 std::list<vtkCollection*> UndoStack;
959 std::list<vtkCollection*> RedoStack;
960
961 std::string URL;
962 std::string RootDirectory;
963
964 std::map<std::string, int> UniqueIDs;
965 std::map<std::string, int> UniqueNames;
966 std::set<std::string> ReservedIDs;
967
968 std::vector<vtkMRMLNode*> RegisteredNodeClasses;
969 std::vector<std::string> RegisteredNodeTags;
970 std::map<std::string, std::string> RegisteredAbstractNodeClassTypeDisplayNames; // map class name to type display name
971
972 NodeReferencesType NodeReferences; // ReferencedIDs (string), ReferencingNodes (node pointer)
973 std::map<std::string, std::string> ReferencedIDChanges;
974 std::map<std::string, vtkSmartPointer<vtkMRMLNode>> NodeIDs;
975
976 // Stores default nodes. If a class is created or reset (using CreateNodeByClass or Clear) and
977 // a default node is defined for it then the content of the default node will be used to initialize
978 // the class. It is useful for overriding default values that are set in a node's constructor.
979 std::map<std::string, vtkSmartPointer<vtkMRMLNode>> DefaultNodes;
980
981 std::string SceneXMLString;
982
984
986
988
989 vtkMTimeType NodeIDsMTime;
990
991 void RemoveAllNodes(bool removeSingletons);
992
993 char* Version;
995
998
999 vtkCallbackCommand* DeleteEventCallback;
1000
1001 std::default_random_engine RandomGenerator;
1002
1003private:
1004 vtkMRMLScene(const vtkMRMLScene&); // Not implemented
1005 void operator=(const vtkMRMLScene&); // Not implemented
1006
1010 int LoadIntoScene(vtkCollection* scene, vtkMRMLMessageCollection* userMessages = nullptr);
1011
1013 vtkTimeStamp StoredTime;
1014};
1015
1016//------------------------------------------------------------------------------
1021
1022//------------------------------------------------------------------------------
1024{
1026}
1027
1028//------------------------------------------------------------------------------
1033
1034//------------------------------------------------------------------------------
1039
1040//------------------------------------------------------------------------------
1042{
1044}
1045
1046//------------------------------------------------------------------------------
1048{
1050}
1051
1052#endif
Manages the on-disk remote cache used by MRML storage.
Abstract Superclass for all specific types of MRML nodes.
void RegisterAbstractNodeClass(std::string className, std::string typeDisplayName)
Register abstract node type display name.
int GetStates() const
Returns the current state of the scene.
vtkWeakPointer< vtkMRMLSubjectHierarchyNode > SubjectHierarchyNode
subject hierarchy node
vtkCollection * URIHandlerCollection
void GetNodeReferenceIDsFromUndoStack(std::set< std::string > &referenceIDs) const
Returns all unique node reference IDs that are referenced within the undo stack.
bool IsNodeIDReservedByUndo(const std::string id) const
Returns true if a node is not referenced within the scene, but is referenced within the Undo stack.
bool ReadFromMRB(const char *fullName, bool clear=false, vtkMRMLMessageCollection *userMessages=nullptr)
Read the scene from a MRML scene bundle (.mrb) file If userMessages is not nullptr then the method ma...
static void SetStorableNodesModifiedSinceRead(vtkCollection *storableNodes)
Given a collection of storable nodes, iterate through and call StorableModified() on them.
char * LastLoadedVersion
void SetUndoOff()
void SetUndoFlag(bool flag)
std::map< std::string, std::string > ReferencedIDChanges
void CopyRegisteredNodesToScene(vtkMRMLScene *scene)
Copies all registered nodes into the parameter scene.
void ReserveNodeReferenceIDs(vtkMRMLNode *node)
Reserve all node reference ids for a node.
void SaveSceneScreenshot(vtkImageData *thumbnail)
Utility function to write the scene thumbnail to a file in the scene's root folder.
static std::string PercentEncode(std::string s)
vtkMRMLNode * GetNthReferencingNode(int n)
vtkMRMLNode * CreateNodeByClass(const char *className)
Create node with a given class.
std::map< std::string, vtkSmartPointer< vtkMRMLNode > > NodeIDs
void StartState(unsigned long state, int anticipatedMaxProgress=0)
Flag the scene as being in a state mode.
const char * GetURL()
Get URL (file name) of the scene.
void ClearUndoStack()
clear Undo stack, delete undo history
int MaximumNumberOfSavedUndoStates
bool WriteToMRB(const char *filename, vtkImageData *thumbnail=nullptr, vtkMRMLMessageCollection *userMessages=nullptr)
Write the scene to a MRML scene bundle (.mrb) file. If thumbnail image is provided then it is saved i...
const char * GetNthReferencedID(int n)
void RemoveUnreferencedStorageNodes()
Remove all vtkMRMLStorageNode instances not referenced by any vtkMRMLStorableNode.
vtkMRMLNode * GetNthNode(int n)
Get n-th node in the scene.
void EndState(unsigned long state)
Unflag the scene as being in a state mode.
vtkTagTable * UserTagTable
std::string GenerateUniqueID(const std::string &baseID)
void AddNodeID(vtkMRMLNode *node)
Add node to NodeIDs map used to speedup GetByID() method.
const char * GetClassNameByTag(const char *tagName)
Add a path to the list.
void RemoveNodeReferences(vtkMRMLNode *node)
int Commit(const char *url=nullptr, vtkMRMLMessageCollection *userMessages=nullptr)
void SaveStateForUndo(std::vector< vtkMRMLNode * > nodes)
bool IsNodeClassRegistered(const std::string &className)
Return True if className is a registered node.
static bool ParseVersion(const char *versionString, std::string &application, int &major, int &minor, int &patch, int &revision)
void RemoveInvalidNodeReferences(vtkCollection *checkNodes, const std::set< std::string > &validNodeIDs)
Remove invalid node references after scene import.
vtkMRMLNode * GetNodeByID(std::string name)
void RemoveReferencesToNode(vtkMRMLNode *node)
std::map< std::string, std::set< std::string > > NodeReferencesType
void CopyNodeChangedIDs(vtkMRMLScene *scene)
vtkMRMLNode * CopyNode(vtkMRMLNode *n)
Add a copy of a node to the scene.
vtkMRMLNode * GetFirstNode(const char *byName=nullptr, const char *byClass=nullptr, const int *byHideFromEditors=nullptr, bool exactNameMatch=true)
Return the first node in the scene that matches the filtering criteria if specified.
vtkURIHandler * FindURIHandlerByName(const char *name)
Returns a URIHandler of a specific type if its name is known.
bool SaveSceneToSlicerDataBundleDirectory(const char *sdbDir, vtkImageData *thumbnail=nullptr, vtkMRMLMessageCollection *userMessages=nullptr)
Save the scene into a self contained directory, sdbDir If thumbnail image is provided then it is save...
std::string GetNthRegisteredAbstractNodeClassName(int n)
void RemoveUnreferencedDisplayNodes()
Remove all vtkMRMLDisplayNode instances not referenced by any vtkMRMLDisplayableNode.
int Connect(vtkMRMLMessageCollection *userMessages=nullptr)
Create new scene from URL If userMessages is not nullptr then the method may add messages to it about...
vtkMRMLNode * GetSingletonNode(vtkMRMLNode *n)
Search and return a matching singleton in the scene that the input singleton node will overwrite if i...
void RemoveAllNodes(bool removeSingletons)
void Clear(int removeSingletons=0)
friend class vtkMRMLSceneViewNode
std::string RootDirectory
vtkCollection * GetNodesByClassByName(const char *className, const char *name)
int GetNumberOfUndoLevels()
returns number of undo steps in the history buffer
std::set< std::string > ReservedIDs
static std::string CreateUniqueFileName(const std::string &filename, const std::string &knownExtension="")
bool IsBatchProcessing() const
Return true if the scene is in BatchProcess state, false otherwise.
vtkCallbackCommand * DeleteEventCallback
void SetStorableNodesModifiedSinceRead()
Search the scene for storable nodes that are not "ModifiedSinceRead".
vtkMRMLNode * AddNewNodeByClass(std::string className, std::string nodeBaseName="")
Instantiate and add a node to the scene.
void PushIntoUndoStack()
void CopyDefaultNodesToScene(vtkMRMLScene *scene)
Copies all default nodes into the parameter scene. Does not remove existing default nodes.
virtual void SetUserTagTable(vtkTagTable *)
vtkMRMLNode * GetNodeByID(const char *name)
Get node given a unique ID.
void Undo()
undo, set the scene to previous state
std::string GenerateUniqueName(vtkMRMLNode *node)
Return a unique name for a MRML node. It uses the node tag as the base.
void ResetNodes()
Reset all nodes to their constructor's state.
std::map< std::string, int > UniqueIDs
vtkMRMLNode * GetDefaultNodeByClass(const char *className)
void RegisterNodeClass(vtkMRMLNode *node)
Utility function to RegisterNodeClass(), the node tag name is used when registering the node.
bool GetUndoFlag()
NodeReferencesType::iterator FindNodeReference(const char *referencedId, vtkMRMLNode *referencingNode)
Get a NodeReferences iterator for a node reference.
void AddReferencedNodes(vtkMRMLNode *node, vtkCollection *refNodes, bool recursive=true)
int Import(vtkMRMLMessageCollection *userMessages=nullptr)
Add the scene into the existing scene (no clear) from URL file or from.
bool SaveStorableNodeToSlicerDataBundleDirectory(vtkMRMLStorableNode *storableNode, std::string &dataDir, std::map< vtkMRMLStorageNode *, std::vector< std::string > > &originalStorageNodeFileNames, vtkMRMLMessageCollection *userMessages)
const char * GetUniqueNameByString(const char *baseName)
vtkMRMLNode * GetNthNodeByClass(int n, const char *className)
Get n-th node of a specified class in the scene.
static void SceneCallback(vtkObject *caller, unsigned long eid, void *clientData, void *callData)
Handle vtkMRMLScene::DeleteEvent: clear the scene.
std::list< vtkCollection * > UndoStack
void SaveStateForUndo()
Save current state in the undo buffer.
void UpdateNodeIDs()
Synchronize NodeIDs map used to speedup GetByID() method with the Nodes collection.
void ClearNodeIDs()
Clear NodeIDs map used to speedup GetByID() method.
void RemoveReservedIDs()
std::map< std::string, vtkSmartPointer< vtkMRMLNode > > DefaultNodes
void RemoveNodeID(char *nodeID)
Remove node from NodeIDs map used to speedup GetByID() method.
static std::string GetPrivateFolderName()
Returns name of the subfolder where hidden nodes (scene view nodes, etc.) are saved.
int IsFilePathRelative(const char *filepath)
~vtkMRMLScene() override
std::string GenerateUniqueID(vtkMRMLNode *node)
std::map< std::string, int > UniqueNames
char * Extensions
void TrimUndoStack()
Clean up elements of the undo/redo stack beyond the maximum size.
static vtkMRMLScene * New()
vtkMRMLNode * AddNode(vtkMRMLNode *nodeToAdd)
Add a node to the scene and send vtkMRMLScene::NodeAboutToBeAddedEvent, vtkMRMLScene::NodeAddedEvent ...
void NodeAdded(vtkMRMLNode *n)
Invoke a vtkMRMLScene::NodeAddedEvent.
const char * GetChangedID(const char *id)
int GetNodesByClass(const char *className, std::vector< vtkMRMLNode * > &nodes)
Get vector of nodes of a specified class in the scene.
int IsNodePresent(vtkMRMLNode *n)
Determine whether a particular node is present.
int GetNumberOfRegisteredNodeClasses()
std::map< std::string, std::string > RegisteredAbstractNodeClassTypeDisplayNames
void PrintSelf(ostream &os, vtkIndent indent) override
virtual void SetSubjectHierarchyNode(vtkMRMLSubjectHierarchyNode *)
void GetReferencingNodes(vtkMRMLNode *referencedNode, std::vector< vtkMRMLNode * > &referencingNodes)
Get vector of nodes containing references to an input node.
@ NodeAboutToBeRemovedEvent
@ ProgressBatchProcessEvent
@ SaveProgressFeedbackEvent
@ StateEvent
1024 (decimal)
@ ImportProgressFeedbackEvent
void SetURL(const std::string &url)
int GetUniqueIDIndex(const std::string &baseID)
void AddReservedID(const char *id)
virtual void SetCacheManager(vtkCacheManager *)
int GetNumberOfRedoLevels()
returns number of redo steps in the history buffer
std::string BuildName(const std::string &baseName, int nameIndex) const
Combine a basename and an index to produce a full name.
void UpdateNodeReferences(vtkCollection *checkNodes=nullptr)
Notify nodes about node ID changes.
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 RemoveUnusedNodeReferences()
void GetReferencedSubScene(vtkMRMLNode *node, vtkMRMLScene *newScene)
Get a sub-scene containing all nodes directly or indirectly referenced by the input node.
vtkCollection * GetNodesByClass(const char *className)
bool IsNodeReferencingNodeID(vtkMRMLNode *referencingNode, const char *id)
void SaveStateForUndo(vtkMRMLNode *node)
vtkCollection * GetNodesByName(const char *name)
Get nodes having the specified name.
void CopyNodeInUndoStack(vtkMRMLNode *node)
void AddURIHandler(vtkURIHandler *handler)
Add a URI handler to the collection.
const char * GetTagByClassName(const char *className)
Add a path to the list.
vtkMRMLNode * GetNextNodeByClass(const char *className)
vtkMRMLNode * GetFirstNodeByClass(const char *className)
Convenience function for getting 0-th node of a specified class in the scene.
std::string BuildID(const std::string &baseID, int idIndex) const
int GetNumberOfNodesByClass(const char *className)
Get number of nodes of a specified class in the scene.
void RemoveAllDefaultNodes()
Deletes all default node values from the scene.
std::string URL
void CopyNodeReferences(vtkMRMLScene *scene)
vtkMRMLNode * InsertBeforeNode(vtkMRMLNode *item, vtkMRMLNode *newItem)
insert a node in the scene before a specified node
vtkURIHandler * FindURIHandler(const char *URI)
Find a URI handler in the collection that can work on the passed URI.
int GetUniqueNameIndex(const std::string &baseName)
Returns a unique index for a given baseName.
vtkMRMLNode * InsertAfterNode(vtkMRMLNode *item, vtkMRMLNode *newItem)
insert a node in the scene after a specified node
const char * GetRootDirectory()
Get Root directory, where URL is pointing.
vtkMRMLNode * GetNthRegisteredNodeClass(int n)
int GetNumberOfRegisteredAbstractNodeClasses()
Get the number of registered abstract node classes.
void AddReferencedNodeID(const char *id, vtkMRMLNode *refrencingNode)
vtkCollection * GetNodes()
Return collection of nodes.
void CopySingletonNodesToScene(vtkMRMLScene *scene)
Copies all singleton nodes into the parameter scene.
std::default_random_engine RandomGenerator
const std::string & GetSceneXMLString()
Returns the saved scene with an XML format if SaveToXMLString is true and Commit() was called prior.
int GetNumberOfNodes()
Get number of nodes in the scene.
std::vector< unsigned long > States
vtkMRMLNode * AddNewNodeByClassWithID(std::string className, std::string nodeBaseName, std::string nodeID)
Instantiates and adds a new node to the scene with the specified ID.
vtkCollection * Nodes
void SetMaximumNumberOfSavedUndoStates(int stackSize)
Sets the maximum number of saved undo states and removes the oldest saved states so that the number o...
std::string GetTemporaryBundleDirectory()
Returns a string for the temporary directory to use for saving/reading scene files....
vtkMRMLNode * GetFirstNodeByName(const char *name)
std::list< vtkCollection * > RedoStack
void CopyNodeInRedoStack(vtkMRMLNode *node)
vtkCollection * GetReferencedNodes(vtkMRMLNode *node, bool recursive=true)
Return collection of all nodes referenced directly or indirectly by node.
NodeReferencesType NodeReferences
void SetUndoOn()
Set undo on/off.
std::vector< std::string > RegisteredNodeTags
bool IsRestoring() const
Return true if the scene is in Restore state, false otherwise.
char * LastLoadedExtensions
void ClearRedoStack()
clear Redo stack, delete redo history
void RemoveReferencedNodeID(const char *id, vtkMRMLNode *refrencingNode)
bool IsUndoing() const
Return true if the scene is in Undo state (in the process of undoing node changes),...
void ProgressState(unsigned long state, int progress=0)
TODO: Report progress of the current state.
void SetRootDirectory(const char *dir)
Set Root directory, where URL is pointing.
vtkMTimeType NodeIDsMTime
std::vector< vtkMRMLNode * > RegisteredNodeClasses
void SetSceneXMLString(const std::string &xmlString)
Set the XML string to read from by Import() if GetLoadFromXMLString() is true.
static std::string UnpackSlicerDataBundle(const char *sdbFilePath, const char *temporaryDirectory, vtkMRMLMessageCollection *userMessages=nullptr)
Unpack the file into a temp directory and return the scene file inside. Note that the first mrml file...
void SaveStateForUndo(vtkCollection *nodes)
void SetURL(const char *url)
Set URL (file name) of the scene.
void PushIntoRedoStack()
bool GetStorableNodesModifiedSinceRead(vtkCollection *modifiedStorableNodes=nullptr)
Search the scene for storable nodes that are "ModifiedSinceRead".
void AddDefaultNode(vtkMRMLNode *node)
bool IsImporting() const
Return true if the scene is in Import state, false otherwise.
std::string SceneXMLString
vtkMRMLNode * GetNextNode()
bool IsReservedID(const std::string &id)
bool GetModifiedSinceRead(vtkCollection *modifiedNodes=nullptr)
Returns true if the scene has been "significantly" modified since the last saved state....
std::string GetNthRegisteredAbstractNodeTypeDisplayName(int n)
vtkMRMLSubjectHierarchyNode * GetSubjectHierarchyNode()
bool IsRedoing() const
Return true if the scene is in Redo state (in the process of redoing node changes),...
vtkDataIOManager * DataIOManager
std::list< std::string > GetNodeClassesList()
virtual void SetDataIOManager(vtkDataIOManager *)
vtkCacheManager * CacheManager
data i/o handling members
void InitTraversal()
void RemoveNode(vtkMRMLNode *n)
Remove a path from the list.
std::string GetTypeDisplayNameByClassName(std::string className)
Get type display name which is shown in the GUI.
void Redo()
redo, set the scene to previously undone
vtkMRMLNode * AddNodeNoNotify(vtkMRMLNode *n)
int GetNumberOfNodeReferences()
Get the total number of node references (number of ReferencedID-ReferencingNode pairs).
virtual void SetURIHandlerCollection(vtkCollection *)
std::string GenerateUniqueName(const std::string &baseName)
Generate a node name that is unique in the scene. Calling this function successively with the same ba...
vtkMRMLNode * GetSingletonNode(const char *singletonTag, const char *className)
Search and return the singleton of type className with a singletonTag tag.
bool IsClosing() const
Return true if the scene is in Close state, false otherwise.
void UpdateNodeChangedIDs()
Change node IDs based on the ReferencedIDChanges list.
MRML node to represent a 3D surface model.
A superclass for other storage nodes.
MRML node to represent a complete subject hierarchy tree.