ITK  4.4.0
Insight Segmentation and Registration Toolkit
itkMetaArrayReader.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 #ifndef __itkMetaArrayReader_h
19 #define __itkMetaArrayReader_h
20 
21 #include "itkLightProcessObject.h"
22 #include "itkArray.h"
23 #include "itkCovariantVector.h"
25 #include "metaArray.h"
26 
27 namespace itk
28 {
29 class ITK_EXPORT MetaArrayReader:public LightProcessObject
30 {
31 public:
32 
38 
40  itkNewMacro(Self);
41 
43  itkTypeMacro(MetaArrayReader, LightProcessObject);
44 
46  itkSetStringMacro(FileName);
47 
49  itkGetStringMacro(FileName);
50 
53  MetaArray * GetMetaArrayPointer(void);
54 
56  void SetBuffer(void *_buffer);
57 
59  void Update();
60 
62  MET_ValueEnumType GetDataType(void) const
63  {
64  return m_MetaArray.ElementType();
65  }
66 
68  int Size(void) const
69  {
70  return m_MetaArray.Length();
71  }
72 
74  int GetNumberOfElements(void) const
75  {
76  return m_MetaArray.Length();
77  }
78 
80  int GetVectorDimension(void) const
81  {
82  return m_MetaArray.Length();
83  }
84 
86  int GetNumberOfComponents(void) const
87  {
88  return m_MetaArray.Length();
89  }
90 
92  int GetCovariantVectorDimension(void) const
93  {
94  return m_MetaArray.Length();
95  }
96 
98  template< typename TValueType >
99  inline void GetElement(TValueType & value, unsigned int i,
100  unsigned int channel = 0) const
101  {
102  value = static_cast< TValueType >( m_MetaArray.ElementData(
103  i * m_MetaArray.ElementNumberOfChannels() + channel) );
104  }
105 
114  template< typename TValueType >
115  void GetOutput(MET_ValueEnumType _metaElementType,
116  Array< TValueType > *_array,
117  bool _letArrayManageData = true)
118  {
119  if ( m_MetaArray.ElementType() != _metaElementType )
120  {
121  m_MetaArray.ConvertElementDataTo(_metaElementType);
122  }
123  _array->SetData( (TValueType *)( m_MetaArray.ElementData() ),
124  m_MetaArray.Length(),
125  _letArrayManageData );
126  if ( _letArrayManageData )
127  {
128  m_MetaArray.AutoFreeElementData(false);
129  }
130  }
132 
134  template< typename TValueType, unsigned int VLength >
135  bool GetOutput(MET_ValueEnumType itkNotUsed(_metaElementType),
137  {
138  if ( static_cast< int >( VLength ) <= m_MetaArray.Length() )
139  {
140  unsigned int i;
141  for ( i = 0; i < VLength; i++ )
142  {
143  this->GetElement( ( *_array )[i], i );
144  }
145  return true;
146  }
147  return false;
148  }
150 
154  template< typename TValueType, unsigned int VLength >
155  bool GetOutput(MET_ValueEnumType itkNotUsed(_metaElementType),
157  {
158  if ( static_cast< int >( VLength ) <= m_MetaArray.Length() )
159  {
160  unsigned int i;
161  for ( i = 0; i < VLength; i++ )
162  {
163  this->GetElement( ( *_vector )[i], i );
164  }
165  return true;
166  }
167  return false;
168  }
170 
175  template< typename TValueType, unsigned int VLength >
176  bool GetOutput(MET_ValueEnumType itkNotUsed(_metaElementType),
178  {
179  if ( static_cast< int >( VLength ) <= m_MetaArray.Length() )
180  {
181  unsigned int i;
182  for ( i = 0; i < VLength; i++ )
183  {
184  this->GetElement( ( *_vector )[i], i );
185  }
186  return true;
187  }
188  return false;
189  }
191 
201  template< typename TValueType >
202  void GetOutput(MET_ValueEnumType _metaElementType,
204  bool _letVectorManageData = true)
205  {
206  if ( m_MetaArray.ElementType() != _metaElementType )
207  {
208  m_MetaArray.ConvertElementDataTo(_metaElementType);
209  }
210  _vector->SetData( (TValueType *)( m_MetaArray.ElementData() ),
211  m_MetaArray.Length(),
212  _letVectorManageData );
213  if ( _letVectorManageData )
214  {
215  m_MetaArray.AutoFreeElementData(false);
216  }
217  }
219 
225  template< typename TValueType >
226  void GetMultiChannelOutput(MET_ValueEnumType _metaElementType,
227  Array< TValueType > *_array)
228  {
229  if ( m_MetaArray.ElementType() != _metaElementType )
230  {
231  m_MetaArray.ConvertElementDataTo(_metaElementType);
232  }
233  int rows = m_MetaArray.Length();
234  int cols = m_MetaArray.ElementNumberOfChannels();
235  _array->SetSize(rows);
236  for ( int i = 0; i < rows; i++ )
237  {
238  ( *_array )[i].SetSize(cols);
239  for ( int j = 0; j < cols; j++ )
240  {
241  ( *_array )[i][j] = static_cast< typename TValueType::ValueType >
242  ( m_MetaArray.ElementData(i * cols + j) );
243  }
244  }
245  }
247 
248 protected:
249 
250  MetaArrayReader();
251  virtual ~MetaArrayReader();
252  void PrintSelf(std::ostream & os, Indent indent) const;
253 
254 private:
255 
256  MetaArray m_MetaArray;
257 
258  std::string m_FileName;
259 
260  void *m_Buffer;
261 };
262 } // namespace itk
263 
264 #endif // __itkTransformFileReader_h
265