ITK  5.0.0
Insight Segmentation and Registration Toolkit
itkTransformFactoryBase.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 /*=========================================================================
19  *
20  * Portions of this file are subject to the VTK Toolkit Version 3 copyright.
21  *
22  * Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
23  *
24  * For complete copyright, license and disclaimer of warranty information
25  * please refer to the NOTICE file at the top of the ITK source tree.
26  *
27  *=========================================================================*/
28 #ifndef itkTransformFactoryBase_h
29 #define itkTransformFactoryBase_h
30 
31 #include "itkObjectFactoryBase.h"
32 
33 namespace itk
34 {
40 class
42 {
43 public:
44  ITK_DISALLOW_COPY_AND_ASSIGN(TransformFactoryBase);
45 
51 
53  const char * GetITKSourceVersion() const override;
54 
55  const char * GetDescription() const override;
56 
59 
61  itkFactorylessNewMacro(Self);
62 
64  static void RegisterDefaultTransforms();
65 
67  static TransformFactoryBase * GetFactory();
68 
83  void RegisterTransform(const char *classOverride,
84  const char *overrideClassName,
85  const char *description,
86  bool enableFlag,
87  CreateObjectFunctionBase *createFunction)
88  {
89 
90  // Ensure there is only one transform registered by a name, this
91  // may happen on windows where this library is static, and the
92  // global init flag may not be unique.
93  LightObject::Pointer test = this->CreateInstance(classOverride);
94  if ( test.IsNotNull() )
95  {
96  itkDebugMacro("Refusing to register transform \"" << classOverride << "\" again!");
97  test->UnRegister();
98  }
99  else
100  {
101  this->RegisterOverride (classOverride, overrideClassName, description, enableFlag, createFunction);
102  }
103  }
104 
105 protected:
107  ~TransformFactoryBase() override;
108 
109 private:
110  // Sub private functions of RegisterDefaultTransforms
111  static void RegisterTransformFactoryDoubleParameters();
112  static void RegisterTransformFactoryFloatParameters();
113 
114 
115  // Called by the type specific methods
116  template <typename TParameterType>
117  static void RegisterTransformFactory();
118 
120 };
121 } // end namespace itk
122 
123 #endif
static TransformFactoryBase * m_Factory
void UnRegister() noexcept
Light weight base class for most itk classes.
Create instances of classes using an object factory.
bool IsNotNull() const noexcept
Define API for object creation callback functions.
int test(char *INfilename, char *OUTfilename, bool IsBinary)
void RegisterTransform(const char *classOverride, const char *overrideClassName, const char *description, bool enableFlag, CreateObjectFunctionBase *createFunction)
Create instances of Transforms.