selxItkImageSource.h 3.75 KB
Newer Older
Floris Berendsen's avatar
Floris Berendsen committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*=========================================================================
 *
 *  Copyright Leiden University Medical Center, Erasmus University Medical 
 *  Center and contributors
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/

20
21
22
#ifndef selxItkImageSource_h
#define selxItkImageSource_h

23
24
#include "selxComponentBase.h"
#include "selxInterfaces.h"
25
#include <string.h>
26
#include "selxMacro.h"
27
28
29
#include "itkImageFileReader.h"
#include "selxAnyFileReader.h"
#include "selxFileReaderDecorator.h"
30
31
namespace selx
{
Floris Berendsen's avatar
Floris Berendsen committed
32
  template<int Dimensionality, class TPixel>
33
34
35
  class ItkImageSourceComponent : 
    public Implements<
    Accepting<>,
36
    Providing< SourceInterface, itkImageInterface<Dimensionality, TPixel > >
37
38
39
    >
  {
  public:
40
    selxNewMacro(ItkImageSourceComponent, ComponentBase);
41
42
43
44

    ItkImageSourceComponent();
    virtual ~ItkImageSourceComponent();

Floris Berendsen's avatar
Floris Berendsen committed
45
    typedef itk::Image<TPixel, Dimensionality> ItkImageType;
46
    
47
    typedef typename itk::ImageFileReader<ItkImageType> ItkImageReaderType;
48
    typedef FileReaderDecorator<ItkImageReaderType> DecoratedReaderType;
49

Floris Berendsen's avatar
Floris Berendsen committed
50
    virtual typename ItkImageType::Pointer GetItkImage() override;
51
    virtual void SetMiniPipelineInput(itk::DataObject::Pointer) override;
52
53
    virtual AnyFileReader::Pointer GetInputFileReader(void) override;

FBerendsen's avatar
FBerendsen committed
54
    virtual bool MeetsCriterion(const ComponentBase::CriterionType &criterion) override;
55
56
    static const char * GetDescription() { return "ItkImageSource Component"; };
  private:
Floris Berendsen's avatar
Floris Berendsen committed
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
    typename ItkImageType::Pointer m_Image;

  protected:
    /* The following struct returns the string name of computation type */
    /* default implementation */

    static inline const std::string GetTypeNameString()
    {
      itkGenericExceptionMacro(<< "Unknown ScalarType" << typeid(TPixel).name());
      // TODO: provide the user instructions how to enable the compilation of the component with the required template types (if desired)
      // We might define an exception object that can communicate various error messages: for simple user, for developer user, etc
    }

    static inline const std::string GetPixelTypeNameString()
    {
      itkGenericExceptionMacro(<< "Unknown PixelType" << typeid(TPixel).name());
      // TODO: provide the user instructions how to enable the compilation of the component with the required template types (if desired)
      // We might define an exception object that can communicate various error messages: for simple user, for developer user, etc
    }

77
  };
Floris Berendsen's avatar
Floris Berendsen committed
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113



  template <>
  inline const std::string
    ItkImageSourceComponent<2, float>
    ::GetPixelTypeNameString()
  {
    return std::string("float");
  }


  template <>
  inline const std::string
    ItkImageSourceComponent<2, double>
    ::GetPixelTypeNameString()
  {
    return std::string("double");
  }

  template <>
  inline const std::string
    ItkImageSourceComponent<3, float>
    ::GetPixelTypeNameString()
  {
    return std::string("float");
  }

  template <>
  inline const std::string
    ItkImageSourceComponent<3, double>
    ::GetPixelTypeNameString()
  {
    return std::string("double");
  }

114
} //end namespace selx
Floris Berendsen's avatar
Floris Berendsen committed
115
116
117
118
#ifndef ITK_MANUAL_INSTANTIATION
#include "selxItkImageSource.hxx"
#endif
#endif // #define selxItkImageSource_h