Slicer  5.0
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
vtkTeemNRRDReader.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: vtkTeemNRRDReader.h,v $
10  Date: $Date: 2007/06/12 19:13:59 $
11  Version: $Revision: 1.3.2.1 $
12 
13 =========================================================================auto=*/
14 /*=========================================================================
15 
16  Program: Visualization Toolkit
17  Module: $RCSfile: vtkTeemNRRDReader.h,v $
18 
19  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
20  All rights reserved.
21  See Copyright.txt or https://www.kitware.com/Copyright.htm for details.
22 
23  This software is distributed WITHOUT ANY WARRANTY; without even
24  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
25  PURPOSE. See the above copyright notice for more information.
26 
27 =========================================================================*/
28 
29 #ifndef __vtkTeemNRRDReader_h
30 #define __vtkTeemNRRDReader_h
31 
32 #include <string>
33 #include <map>
34 #include <iostream>
35 
36 #include "vtkTeemConfigure.h"
37 #include "vtkMedicalImageReader2.h"
38 
39 //#include "vtkDataObject.h"
40 //#include "vtkImageData.h"
41 
42 #include <vtkMatrix4x4.h>
43 #include <vtkPointData.h>
44 #include <vtkSmartPointer.h>
45 #include <vtkVersion.h>
46 
47 #include "teem/nrrd.h"
48 
52 //
54 class VTK_Teem_EXPORT vtkTeemNRRDReader : public vtkMedicalImageReader2
55 {
56 public:
57  static vtkTeemNRRDReader *New();
58 
59  vtkTypeMacro(vtkTeemNRRDReader,vtkMedicalImageReader2);
60 
63  vtkMatrix4x4* GetRasToIjkMatrix();
64 
67  vtkMatrix4x4* GetMeasurementFrameMatrix();
68 
73  const char* GetHeaderKeys();
74 
78  const std::vector<std::string> GetHeaderKeysVector();
79 
83  const std::map<std::string, std::string> GetHeaderKeysMap();
84 
87  const char* GetHeaderValue(const char *key);
88 
90  const char* GetAxisLabel(unsigned int axis);
91 
93  const char* GetAxisUnit(unsigned int axis);
94 
95  void PrintSelf(ostream& os, vtkIndent indent) override;
96 
98  int CanReadFile(const char* filename) override;
99 
102  const char* GetFileExtensions() override
103  {
104  return ".nhdr .nrrd";
105  }
106 
109  const char* GetDescriptiveName() override
110  {
111  return "NRRD - Nearly Raw Raster Data";
112  }
113 
114  //Description:
118  vtkGetMacro(ReadStatus,int);
119 
122  vtkSetMacro(PointDataType,int);
123  vtkGetMacro(PointDataType,int);
124 
127  vtkSetMacro(DataType,int);
128  vtkGetMacro(DataType,int);
129 
131  //Number of components
132  vtkSetMacro(NumberOfComponents,int);
133  vtkGetMacro(NumberOfComponents,int);
134 
135 
139  {
140  UseNativeOrigin = true;
141  }
142 
146  {
147  UseNativeOrigin = false;
148  }
149 
155  vtkSetMacro(DataArrayName, std::string);
156  vtkGetMacro(DataArrayName, std::string);
157 
158  int NrrdToVTKScalarType( const int nrrdPixelType ) const
159  {
160  switch( nrrdPixelType )
161  {
162  default:
163  case nrrdTypeDefault:
164  return VTK_VOID;
165  break;
166  case nrrdTypeChar:
167  return VTK_CHAR;
168  break;
169  case nrrdTypeUChar:
170  return VTK_UNSIGNED_CHAR;
171  break;
172  case nrrdTypeShort:
173  return VTK_SHORT;
174  break;
175  case nrrdTypeUShort:
176  return VTK_UNSIGNED_SHORT;
177  break;
184  case nrrdTypeInt:
185  return VTK_INT;
186  break;
187  case nrrdTypeUInt:
188  return VTK_UNSIGNED_INT;
189  break;
190  case nrrdTypeFloat:
191  return VTK_FLOAT;
192  break;
193  case nrrdTypeDouble:
194  return VTK_DOUBLE;
195  break;
196  case nrrdTypeBlock:
197  return -1;
198  break;
199  }
200  }
201 
202  int VTKToNrrdPixelType( const int vtkPixelType ) const
203  {
204  switch( vtkPixelType )
205  {
206  default:
207  case VTK_VOID:
208  return nrrdTypeDefault;
209  break;
210  case VTK_CHAR:
211  return nrrdTypeChar;
212  break;
213  case VTK_UNSIGNED_CHAR:
214  return nrrdTypeUChar;
215  break;
216  case VTK_SHORT:
217  return nrrdTypeShort;
218  break;
219  case VTK_UNSIGNED_SHORT:
220  return nrrdTypeUShort;
221  break;
228  case VTK_INT:
229  return nrrdTypeInt;
230  break;
231  case VTK_UNSIGNED_INT:
232  return nrrdTypeUInt;
233  break;
234  case VTK_FLOAT:
235  return nrrdTypeFloat;
236  break;
237  case VTK_DOUBLE:
238  return nrrdTypeDouble;
239  break;
240  }
241  }
242 vtkImageData * AllocateOutputData(vtkDataObject *out, vtkInformation* outInfo) override;
243 void AllocateOutputData(vtkImageData *out, vtkInformation* outInfo, int *uExtent) override
244  { Superclass::AllocateOutputData(out, outInfo, uExtent); }
245 void AllocatePointData(vtkImageData *out, vtkInformation* outInfo);
246 
247 protected:
249  ~vtkTeemNRRDReader() override;
250 
251  static bool GetPointType(Nrrd* nrrdTemp, int& pointDataType, int &numOfComponents);
252 
253  vtkSmartPointer<vtkMatrix4x4> RasToIjkMatrix;
254  vtkSmartPointer<vtkMatrix4x4> MeasurementFrameMatrix;
255  vtkSmartPointer<vtkMatrix4x4> NRRDWorldToRasMatrix;
256 
257  std::string CurrentFileName;
258 
259  Nrrd *nrrd;
260 
262 
264  int DataType;
267  std::string DataArrayName;
268 
269  std::map <std::string, std::string> HeaderKeyValue;
270  std::string HeaderKeys; // buffer for returning key list
271 
272  std::map<unsigned int, std::string> AxisLabels;
273  std::map<unsigned int, std::string> AxisUnits;
274 
275  void ExecuteInformation() override;
276  void ExecuteDataWithInformation(vtkDataObject *output, vtkInformation* outInfo) override;
277 
278  int tenSpaceDirectionReduce(Nrrd *nout, const Nrrd *nin, double SD[9]);
279 
280 private:
281  vtkTeemNRRDReader(const vtkTeemNRRDReader&) = delete;
282  void operator=(const vtkTeemNRRDReader&) = delete;
283 
284 };
285 
286 #endif
const char * GetFileExtensions() override
Valid extentsions
vtkSmartPointer< vtkMatrix4x4 > NRRDWorldToRasMatrix
vtkSmartPointer< vtkMatrix4x4 > MeasurementFrameMatrix
std::string CurrentFileName
void AllocateOutputData(vtkImageData *out, vtkInformation *outInfo, int *uExtent) override
std::map< std::string, std::string > HeaderKeyValue
std::map< unsigned int, std::string > AxisLabels
int NrrdToVTKScalarType(const int nrrdPixelType) const
std::map< unsigned int, std::string > AxisUnits
vtkSmartPointer< vtkMatrix4x4 > RasToIjkMatrix
Reads Nearly Raw Raster Data files.
void SetUseNativeOriginOff()
Use image center as origin
void SetUseNativeOriginOn()
Use image origin from the file
int VTKToNrrdPixelType(const int vtkPixelType) const
std::string DataArrayName
const char * GetDescriptiveName() override
A descriptive name for this format