Slicer 5.6
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
vtkSlicerVolumesLogic.h
Go to the documentation of this file.
1/*=auto=========================================================================
2
3 Portions (c) Copyright 2005 Brigham and Women's Hospital (BWH) All Rights Reserved.
4
5 See COPYRIGHT.txt
6 or http://www.slicer.org/copyright/copyright.txt for details.
7
8 Program: 3D Slicer
9 Module: $RCSfile: vtkSlicerVolumesLogic.h,v $
10 Date: $Date: 2006/01/08 04:48:05 $
11 Version: $Revision: 1.45 $
12
13=========================================================================auto=*/
14
15// .NAME vtkSlicerVolumesLogic - slicer logic class for volumes manipulation
16// .SECTION Description
17// This class manages the logic associated with reading, saving,
18// and changing properties of volumes
19
20
21#ifndef __vtkSlicerVolumesLogic_h
22#define __vtkSlicerVolumesLogic_h
23
24// Slicer includes
26
27// MRML includes
28#include "vtkMRML.h"
29#include "vtkMRMLScene.h"
30#include "vtkMRMLStorageNode.h"
32#include "vtkMRMLVolumeNode.h"
33
34// STD includes
35#include <cstdlib>
36#include <list>
37
38#include "vtkSlicerVolumesModuleLogicExport.h"
39
44class vtkStringArray;
45
47{
50 Node = set.Node;
51 DisplayNode = set.DisplayNode;
52 StorageNode = set.StorageNode;
53 Scene = set.Scene;
54 LabelMap = set.LabelMap;
55 }
56 vtkSmartPointer<vtkMRMLVolumeNode> Node;
57 vtkSmartPointer<vtkMRMLVolumeDisplayNode> DisplayNode;
58 vtkSmartPointer<vtkMRMLStorageNode> StorageNode;
59 vtkSmartPointer<vtkMRMLScene> Scene;
60 bool LabelMap; // is this node set for labelmaps?
61};
62
63class VTK_SLICER_VOLUMES_MODULE_LOGIC_EXPORT vtkSlicerVolumesLogic :
65{
66public:
67
70 void PrintSelf(ostream& os, vtkIndent indent) override;
72
74 {
75 std::string id;
76 std::string name;
77 std::string description;
78 std::string icon;
79 double window{0.0};
80 double level{0.0};
81 std::string colorNodeID;
82 bool valid{false};
83 };
84 std::vector<VolumeDisplayPreset> VolumeDisplayPresets;
85
88 LabelMap = 1,
89 CenterImage = 2,
90 SingleFile = 4,
91 AutoWindowLevel = 8,
92 DiscardOrientation = 16
93 };
94
98 typedef ArchetypeVolumeNodeSet (*ArchetypeVolumeNodeSetFactory)(std::string& volumeName, vtkMRMLScene* scene, int options);
99
102 int IsFreeSurferVolume(const char* filename);
103
111 void RegisterArchetypeVolumeNodeSetFactory(ArchetypeVolumeNodeSetFactory factory);
112
122 void PreRegisterArchetypeVolumeNodeSetFactory(ArchetypeVolumeNodeSetFactory factory);
123
132 vtkMRMLVolumeNode* AddArchetypeVolume (const char* filename, const char* volname, int loadingOptions)
133 {
134 return (this->AddArchetypeVolume( filename, volname, loadingOptions, nullptr));
135 }
136 vtkMRMLVolumeNode* AddArchetypeVolume (const char* filename, const char* volname, int loadingOptions, vtkStringArray *fileList);
137 vtkMRMLVolumeNode* AddArchetypeVolume (const char *filename, const char* volname)
138 {
139 return this->AddArchetypeVolume( filename, volname, 0, nullptr);
140 }
141
144 vtkMRMLScalarVolumeNode* AddArchetypeScalarVolume(const char* filename, const char* volname, int loadingOptions, vtkStringArray *fileList);
145
147 int SaveArchetypeVolume (const char* filename, vtkMRMLVolumeNode *volumeNode);
148
152 const char *name);
153
156 vtkMRMLVolumeNode *volumeNode,
157 const char *name);
163 const char *name);
168 vtkMRMLVolumeNode *volumeNode,
169 const char *name);
170
176 vtkMRMLVolumeNode *templateNode);
177
185 vtkMRMLLabelMapVolumeNode *labelNode,
186 vtkMRMLVolumeNode *templateNode);
187
194 vtkMRMLLabelMapVolumeNode *outputVolume,
195 vtkMRMLVolumeNode *inputVolume);
196
203 vtkMRMLScalarVolumeNode *outputVolume,
204 vtkMRMLVolumeNode *inputVolume);
205
207 static void ClearVolumeImageData(vtkMRMLVolumeNode *volumeNode);
208
215 vtkMRMLLabelMapVolumeNode *labelNode);
216
229 vtkMRMLScalarVolumeNode *volumeNode2);
230
231
236
240 vtkMRMLVolumeNode *volumeNode,
241 const char *name);
242
248 vtkMRMLVolumeNode *volumeNode,
249 const char *name,
250 bool cloneImageData=true);
253 vtkMRMLVolumeNode *volumeNode,
254 const char *name,
255 bool cloneImageData = true);
256
260 vtkMRMLVolumeNode *V2Node,
261 vtkMatrix4x4 *FSRegistrationMatrix,
262 vtkMatrix4x4 *ResultsMatrix);
263
266 vtkMatrix4x4 *M );
267
271
274 void GetVolumeCenteredOrigin(vtkMRMLVolumeNode *volumeNode, double* origin);
275
279 vtkMRMLVolumeNode *referenceVolumeNode);
280
284 vtkGetMacro(CompareVolumeGeometryEpsilon, double);
289
293 vtkGetMacro(CompareVolumeGeometryPrecision, int);
294
297 bool ApplyVolumeDisplayPreset(vtkMRMLVolumeDisplayNode* displayNode, std::string presetId);
298
302
304 std::vector<std::string> GetVolumeDisplayPresetIDs();
305
308 VolumeDisplayPreset GetVolumeDisplayPreset(const std::string& presetId);
309
310protected:
315
318
319 void ProcessMRMLNodesEvents(vtkObject * caller,
320 unsigned long event,
321 void * callData) override;
322
323
325 const char * filename,
326 vtkStringArray *fileList,
327 vtkMRMLScene * mrmlScene = nullptr);
328
330 int labelmap, const char* filename);
331
332 typedef std::list<ArchetypeVolumeNodeSetFactory> NodeSetFactoryRegistry;
333
337 const NodeSetFactoryRegistry& volumeRegistry,
338 const char* filename, const char* volname, int loadingOptions,
339 vtkStringArray *fileList);
340
341protected:
342
344
348
352};
353
354#endif
Abstract class that contains graphical display properties for displayable nodes.
MRML node for representing a label map volume.
MRML node for representing a volume display attributes.
MRML node for representing a volume (image stack).
A set of MRML Nodes that supports serialization and undo/redo.
A superclass for other storage nodes.
MRML node for representing a volume display attributes.
MRML node for representing a volume storage.
MRML node for representing a volume (image stack).
vtkMRMLScalarVolumeNode * CloneVolume(vtkMRMLVolumeNode *volumeNode, const char *name)
void SetCompareVolumeGeometryEpsilon(double epsilon)
void SetAndObserveColorToDisplayNode(vtkMRMLDisplayNode *displayNode, int labelmap, const char *filename)
NodeSetFactoryRegistry VolumeRegistry
std::vector< VolumeDisplayPreset > VolumeDisplayPresets
vtkMRMLLabelMapVolumeNode * CreateAndAddLabelVolume(vtkMRMLScene *scene, vtkMRMLVolumeNode *volumeNode, const char *name)
Create a label map volume to match the given volumeNode and add it to the scene.
std::string CompareVolumeGeometry(vtkMRMLScalarVolumeNode *volumeNode1, vtkMRMLScalarVolumeNode *volumeNode2)
vtkSlicerVolumesLogic(const vtkSlicerVolumesLogic &)
static vtkMRMLScalarVolumeNode * ResampleVolumeToReferenceVolume(vtkMRMLVolumeNode *inputVolumeNode, vtkMRMLVolumeNode *referenceVolumeNode)
bool ApplyVolumeDisplayPreset(vtkMRMLVolumeDisplayNode *displayNode, std::string presetId)
void ProcessMRMLNodesEvents(vtkObject *caller, unsigned long event, void *callData) override
void ComputeTkRegVox2RASMatrix(vtkMRMLVolumeNode *VNode, vtkMatrix4x4 *M)
Convenience method to compute a volume's Vox2RAS-tkreg Matrix.
vtkMRMLLabelMapVolumeNode * FillLabelVolumeFromTemplate(vtkMRMLScene *scene, vtkMRMLLabelMapVolumeNode *labelNode, vtkMRMLVolumeNode *templateNode)
void RegisterArchetypeVolumeNodeSetFactory(ArchetypeVolumeNodeSetFactory factory)
static vtkMRMLScalarVolumeNode * CloneVolumeWithoutImageData(vtkMRMLScene *scene, vtkMRMLVolumeNode *volumeNode, const char *name)
std::string GetAppliedVolumeDisplayPresetId(vtkMRMLVolumeDisplayNode *displayNode)
std::list< ArchetypeVolumeNodeSetFactory > NodeSetFactoryRegistry
static void ClearVolumeImageData(vtkMRMLVolumeNode *volumeNode)
Clear the image data of a volume node to contain all zeros.
vtkMRMLVolumeNode * AddArchetypeVolume(const char *filename, const char *volname)
void operator=(const vtkSlicerVolumesLogic &)
vtkMRMLVolumeNode * AddArchetypeVolume(const char *filename, const char *volname, int loadingOptions, vtkStringArray *fileList)
void GetVolumeCenteredOrigin(vtkMRMLVolumeNode *volumeNode, double *origin)
void TranslateFreeSurferRegistrationMatrixIntoSlicerRASToRASMatrix(vtkMRMLVolumeNode *V1Node, vtkMRMLVolumeNode *V2Node, vtkMatrix4x4 *FSRegistrationMatrix, vtkMatrix4x4 *ResultsMatrix)
void PreRegisterArchetypeVolumeNodeSetFactory(ArchetypeVolumeNodeSetFactory factory)
vtkMRMLLabelMapVolumeNode * CreateLabelVolumeFromVolume(vtkMRMLScene *scene, vtkMRMLLabelMapVolumeNode *outputVolume, vtkMRMLVolumeNode *inputVolume)
static vtkMRMLVolumeNode * CloneVolumeGeneric(vtkMRMLScene *scene, vtkMRMLVolumeNode *volumeNode, const char *name, bool cloneImageData=true)
Create a deep copy of a volumeNode and add it to the scene.
void InitializeDefaultVolumeDisplayPresets()
Read default volume display presets from configuration file.
std::vector< std::string > GetVolumeDisplayPresetIDs()
Method to get a vector to currently defined window level preset IDs.
LoadingOptions
Loading options, bitfield.
~vtkSlicerVolumesLogic() override
vtkSlicerVolumesLogic Self
vtkMRMLScalarVolumeNode * CreateScalarVolumeFromVolume(vtkMRMLScene *scene, vtkMRMLScalarVolumeNode *outputVolume, vtkMRMLVolumeNode *inputVolume)
vtkMRMLLabelMapVolumeNode * CreateLabelVolume(vtkMRMLVolumeNode *volumeNode, const char *name)
vtkMRMLLabelMapVolumeNode * FillLabelVolumeFromTemplate(vtkMRMLLabelMapVolumeNode *labelNode, vtkMRMLVolumeNode *templateNode)
static vtkMRMLScalarVolumeNode * CloneVolume(vtkMRMLScene *scene, vtkMRMLVolumeNode *volumeNode, const char *name, bool cloneImageData=true)
vtkMRMLVolumeNode * AddArchetypeVolume(const NodeSetFactoryRegistry &volumeRegistry, const char *filename, const char *volname, int loadingOptions, vtkStringArray *fileList)
static vtkSlicerVolumesLogic * New()
int IsFreeSurferVolume(const char *filename)
vtkMRMLLabelMapVolumeNode * CreateAndAddLabelVolume(vtkMRMLVolumeNode *volumeNode, const char *name)
vtkMRMLScalarVolumeNode * AddArchetypeScalarVolume(const char *filename, const char *volname, int loadingOptions, vtkStringArray *fileList)
void PrintSelf(ostream &os, vtkIndent indent) override
void CenterVolume(vtkMRMLVolumeNode *volumeNode)
std::string CheckForLabelVolumeValidity(vtkMRMLScalarVolumeNode *volumeNode, vtkMRMLLabelMapVolumeNode *labelNode)
int SaveArchetypeVolume(const char *filename, vtkMRMLVolumeNode *volumeNode)
Write volume's image data to a specified file.
vtkMRMLLabelMapVolumeNode * CreateLabelVolume(vtkMRMLScene *scene, vtkMRMLVolumeNode *volumeNode, const char *name)
void InitializeStorageNode(vtkMRMLStorageNode *storageNode, const char *filename, vtkStringArray *fileList, vtkMRMLScene *mrmlScene=nullptr)
VolumeDisplayPreset GetVolumeDisplayPreset(const std::string &presetId)
vtkMRMLVolumeNode * AddArchetypeVolume(const char *filename, const char *volname, int loadingOptions)
ArchetypeVolumeNodeSet(const ArchetypeVolumeNodeSet &set)
vtkSmartPointer< vtkMRMLVolumeNode > Node
vtkSmartPointer< vtkMRMLVolumeDisplayNode > DisplayNode
ArchetypeVolumeNodeSet(vtkMRMLScene *scene)
vtkSmartPointer< vtkMRMLScene > Scene
vtkSmartPointer< vtkMRMLStorageNode > StorageNode