Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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{
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
95
99 typedef ArchetypeVolumeNodeSet (*ArchetypeVolumeNodeSetFactory)(std::string& volumeName, vtkMRMLScene* scene, int options);
100
103 int IsFreeSurferVolume(const char* filename);
104
113
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
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)
ArchetypeVolumeNodeSet(* ArchetypeVolumeNodeSetFactory)(std::string &volumeName, vtkMRMLScene *scene, int options)
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