Slicer 5.8
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#include <string>
38
39#include "vtkSlicerVolumesModuleLogicExport.h"
40
45class vtkStringArray;
46
48{
51 Node = set.Node;
52 DisplayNode = set.DisplayNode;
53 StorageNode = set.StorageNode;
54 Scene = set.Scene;
55 LabelMap = set.LabelMap;
56 }
57 vtkSmartPointer<vtkMRMLVolumeNode> Node;
58 vtkSmartPointer<vtkMRMLVolumeDisplayNode> DisplayNode;
59 vtkSmartPointer<vtkMRMLStorageNode> StorageNode;
60 vtkSmartPointer<vtkMRMLScene> Scene;
61 bool LabelMap; // is this node set for labelmaps?
62};
63
64class VTK_SLICER_VOLUMES_MODULE_LOGIC_EXPORT vtkSlicerVolumesLogic :
66{
67public:
68
71 void PrintSelf(ostream& os, vtkIndent indent) override;
73
75 {
76 std::string id;
77 std::string name;
78 std::string description;
79 std::string icon;
80 double window{0.0};
81 double level{0.0};
82 std::string colorNodeID;
83 bool valid{false};
84 };
85 std::vector<VolumeDisplayPreset> VolumeDisplayPresets;
86
89 LabelMap = 1,
90 CenterImage = 2,
91 SingleFile = 4,
92 AutoWindowLevel = 8,
93 DiscardOrientation = 16
94 };
95
99 typedef ArchetypeVolumeNodeSet (*ArchetypeVolumeNodeSetFactory)(std::string& volumeName, vtkMRMLScene* scene, int options);
100
103 int IsFreeSurferVolume(const char* filename);
104
112 void RegisterArchetypeVolumeNodeSetFactory(ArchetypeVolumeNodeSetFactory factory);
113
123 void PreRegisterArchetypeVolumeNodeSetFactory(ArchetypeVolumeNodeSetFactory factory);
124
133 vtkMRMLVolumeNode* AddArchetypeVolume (const char* filename, const char* volname, int loadingOptions)
134 {
135 return (this->AddArchetypeVolume( filename, volname, loadingOptions, nullptr));
136 }
137 vtkMRMLVolumeNode* AddArchetypeVolume (const char* filename, const char* volname, int loadingOptions, vtkStringArray *fileList);
138 vtkMRMLVolumeNode* AddArchetypeVolume (const char *filename, const char* volname)
139 {
140 return this->AddArchetypeVolume( filename, volname, 0, nullptr);
141 }
142
145 vtkMRMLScalarVolumeNode* AddArchetypeScalarVolume(const char* filename, const char* volname, int loadingOptions, vtkStringArray *fileList);
146
148 int SaveArchetypeVolume (const char* filename, vtkMRMLVolumeNode *volumeNode);
149
153 const char *name);
154
157 vtkMRMLVolumeNode *volumeNode,
158 const char *name);
164 const char *name);
169 vtkMRMLVolumeNode *volumeNode,
170 const char *name);
171
177 vtkMRMLVolumeNode *templateNode);
178
186 vtkMRMLLabelMapVolumeNode *labelNode,
187 vtkMRMLVolumeNode *templateNode);
188
195 vtkMRMLLabelMapVolumeNode *outputVolume,
196 vtkMRMLVolumeNode *inputVolume);
197
204 vtkMRMLScalarVolumeNode *outputVolume,
205 vtkMRMLVolumeNode *inputVolume);
206
208 static void ClearVolumeImageData(vtkMRMLVolumeNode *volumeNode);
209
216 vtkMRMLLabelMapVolumeNode *labelNode);
217
230 vtkMRMLScalarVolumeNode *volumeNode2);
231
232
237
241 vtkMRMLVolumeNode *volumeNode,
242 const char *name);
243
249 vtkMRMLVolumeNode *volumeNode,
250 const char *name,
251 bool cloneImageData=true);
254 vtkMRMLVolumeNode *volumeNode,
255 const char *name,
256 bool cloneImageData = true);
257
261 vtkMRMLVolumeNode *V2Node,
262 vtkMatrix4x4 *FSRegistrationMatrix,
263 vtkMatrix4x4 *ResultsMatrix);
264
267 vtkMatrix4x4 *M );
268
272
275 void GetVolumeCenteredOrigin(vtkMRMLVolumeNode *volumeNode, double* origin);
276
280 vtkMRMLVolumeNode *referenceVolumeNode);
281
285 vtkGetMacro(CompareVolumeGeometryEpsilon, double);
290
294 vtkGetMacro(CompareVolumeGeometryPrecision, int);
295
298 bool ApplyVolumeDisplayPreset(vtkMRMLVolumeDisplayNode* displayNode, std::string presetId);
299
303
305 std::vector<std::string> GetVolumeDisplayPresetIDs();
306
309 VolumeDisplayPreset GetVolumeDisplayPreset(const std::string& presetId);
310
311protected:
316
319
320 void ProcessMRMLNodesEvents(vtkObject * caller,
321 unsigned long event,
322 void * callData) override;
323
324
326 const char * filename,
327 vtkStringArray *fileList,
328 vtkMRMLScene * mrmlScene = nullptr);
329
331 int labelmap, const char* filename);
332
333 typedef std::list<ArchetypeVolumeNodeSetFactory> NodeSetFactoryRegistry;
334
338 const NodeSetFactoryRegistry& volumeRegistry,
339 const char* filename, const char* volname, int loadingOptions,
340 vtkStringArray *fileList);
341
342protected:
343
345
349
353};
354
355#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