diff --git a/Modules/Core/Install/CmakeLists.txt b/Modules/Core/Install/CmakeLists.txt index 73a1feefe530a9ddbf0216c35074149a59aba9ea..26107cb5392eb2f4df7deaf4a156c5d8dca8b4a3 100644 --- a/Modules/Core/Install/CmakeLists.txt +++ b/Modules/Core/Install/CmakeLists.txt @@ -9,5 +9,5 @@ ELSE(ITK_FOUND) MESSAGE(FATAL_ERROR "ITK not found. Please set ITK_DIR.") ENDIF(ITK_FOUND) -ADD_EXECUTABLE(itkfactory itkfactory.cxx itkTransformModule1.h itkTransformModule1Factory.h itkTransformModule1.hxx itkTransformModule1Factory.hxx itkMetricModule1.h itkMetricModule1.hxx itkMetricModule1Factory.h itkMetricModule1Factory.hxx itkModuleIOBase.h itkModuleIOFactoryRegisterManager.h) +ADD_EXECUTABLE(itkfactory itkfactory.cxx itkTransformModule1.h itkTransformModule1Factory.h itkTransformModule1.hxx itkTransformModule1Factory.hxx itkMetricModule1.h itkMetricModule1.hxx itkMetricModule1Factory.h itkMetricModule1Factory.hxx itkModuleBase.h itkModuleFactory.h itkModuleFactory.hxx) TARGET_LINK_LIBRARIES(itkfactory ${ITK_LIBRARIES} ITKCommon ) diff --git a/Modules/Core/Install/itkMetricModule1.h b/Modules/Core/Install/itkMetricModule1.h index ec3637371178e305be2417d023da4cf6081d47a0..e846de4ffb91da0a396fb36cb26c1fa13eff1910 100644 --- a/Modules/Core/Install/itkMetricModule1.h +++ b/Modules/Core/Install/itkMetricModule1.h @@ -1,16 +1,16 @@ #ifndef itkMetricModule1_h #define itkMetricModule1_h -#include "itkModuleIOBase.h" +#include "itkModuleBase.h" namespace itk { -class MetricModule1 : public ModuleIOBase +class MetricModule1 : public ModuleBase { public: /** Standard class typedefs. */ typedef MetricModule1 Self; - typedef ModuleIOBase Superclass; + typedef ModuleBase Superclass; typedef SmartPointer< Self > Pointer; typedef SmartPointer< const Self > ConstPointer; @@ -18,7 +18,7 @@ public: itkNewMacro(Self); /** Run-time type information (and related methods). */ - itkTypeMacro(MetricModule1, ModuleIOBase); + itkTypeMacro(MetricModule1, ModuleBase); /** define the Clone method */ // itkCloneMacro(Self); diff --git a/Modules/Core/Install/itkMetricModule1Factory.h b/Modules/Core/Install/itkMetricModule1Factory.h index 909a373cdb673a2a965709ac1e5d39cdda15f031..daf9a90ff756928f659625e6927f0fb84bd76732 100644 --- a/Modules/Core/Install/itkMetricModule1Factory.h +++ b/Modules/Core/Install/itkMetricModule1Factory.h @@ -18,8 +18,8 @@ #ifndef itkMetricModule1Factory_h #define itkMetricModule1Factory_h -#include "itkModuleFactoryBase.h" -#include "itkModuleIOBase.h" +#include "itkModuleFactory.h" +#include "itkModuleBase.h" namespace itk { @@ -27,12 +27,12 @@ namespace itk * \brief Create instances of MetaImageIO objects using an object factory. * \ingroup ITKIOMeta */ -class MetricModule1Factory:public ModuleFactoryBase + class MetricModule1Factory :public ObjectFactoryBase { public: /** Standard class typedefs. */ typedef MetricModule1Factory Self; - typedef ModuleFactoryBase Superclass; + typedef ObjectFactoryBase Superclass; typedef SmartPointer< Self > Pointer; typedef SmartPointer< const Self > ConstPointer; @@ -45,14 +45,14 @@ public: itkFactorylessNewMacro(Self); /** Run-time type information (and related methods). */ - itkTypeMacro(MetricModule1Factory, ModuleFactoryBase); + itkTypeMacro(MetricModule1Factory, ObjectFactoryBase); /** Register one factory of this type */ static void RegisterOneFactory() { MetricModule1Factory::Pointer MetricModule1Factory = MetricModule1Factory::New(); - ModuleFactoryBase::RegisterFactory(MetricModule1Factory); + ObjectFactoryBase::RegisterFactory(MetricModule1Factory); } protected: diff --git a/Modules/Core/Install/itkMetricModule1Factory.hxx b/Modules/Core/Install/itkMetricModule1Factory.hxx index 6c869e7f9ee11c160e357de1dc8626806a825442..a55c3e1159fceda82f904533473364db53cb27ba 100644 --- a/Modules/Core/Install/itkMetricModule1Factory.hxx +++ b/Modules/Core/Install/itkMetricModule1Factory.hxx @@ -24,7 +24,7 @@ namespace itk MetricModule1Factory::MetricModule1Factory() { - this->RegisterOverride( "itkModuleIOBase", + this->RegisterOverride( "itkModuleBase", "itkMetricModule1", "Metric Module 1", 1, diff --git a/Modules/Core/Install/itkModuleIOBase.h b/Modules/Core/Install/itkModuleBase.h similarity index 80% rename from Modules/Core/Install/itkModuleIOBase.h rename to Modules/Core/Install/itkModuleBase.h index b21b49f86eec439b2e504c96b42e4294c37b4869..b4125786b5d1e63a982741b7795250d3ad12d7df 100644 --- a/Modules/Core/Install/itkModuleIOBase.h +++ b/Modules/Core/Install/itkModuleBase.h @@ -15,8 +15,8 @@ * limitations under the License. * *=========================================================================*/ -#ifndef itkModuleIOBase_h -#define itkModuleIOBase_h +#ifndef itkModuleBase_h +#define itkModuleBase_h #include "itkLightProcessObject.h" //#include "itkModuleBase.h" @@ -29,30 +29,30 @@ namespace itk { -/** \class ModuleIOBaseTemplate +/** \class ModuleBaseTemplate * * \brief Abstract superclass defining the Module IO interface. * - * ModuleIOBaseTemplate is a pure virtual base class for derived classes that + * ModuleBaseTemplate is a pure virtual base class for derived classes that * read/write Module data considering the type of input Module. - * First, ModuleIOBase is derived from this class for legacy read/write Module. + * First, ModuleBase is derived from this class for legacy read/write Module. * This class also is used by the ModuleFileReader and ModuleFileWriter - * classes. End users don't directly manipulate classes derived from ModuleIOBaseTemplate; - * the ModuleIOFactory is used by the Reader/Writer to pick a concrete derived class to do + * classes. End users don't directly manipulate classes derived from ModuleBaseTemplate; + * the ModuleFactory is used by the Reader/Writer to pick a concrete derived class to do * the actual reading/writing of Modules. * * \ingroup ITKIOModuleBase */ -class ModuleIOBase:public LightProcessObject +class ModuleBase:public LightProcessObject { public: /** Standard class typedefs */ - typedef ModuleIOBase Self; + typedef ModuleBase Self; typedef LightProcessObject Superclass; typedef SmartPointer< Self > Pointer; /** Run-time type information (and related methods). */ - itkTypeMacro(ModuleIOBase, Superclass); + itkTypeMacro(ModuleBase, Superclass); /** Module types */ //typedef TScalar ScalarType; @@ -78,13 +78,13 @@ public: /** Writes the Module list to disk. */ virtual void Write() = 0; - /** Determine the file type. Returns true if this ModuleIO can read the + /** Determine the file type. Returns true if this Module can read the * file specified. */ virtual bool MeetsCriteria(const CriteriaType &criteria) = 0; protected: - ModuleIOBase() {}; - virtual ~ModuleIOBase() {}; + ModuleBase() {}; + virtual ~ModuleBase() {}; //virtual void PrintSelf(std::ostream & os, Indent indent) const ITK_OVERRIDE; std::string m_FileName; @@ -94,4 +94,4 @@ protected: } // end namespace itk -#endif // itkModuleIOBase_h +#endif // itkModuleBase_h diff --git a/Modules/Core/Install/itkModuleFactoryBase.h b/Modules/Core/Install/itkModuleFactory.h similarity index 62% rename from Modules/Core/Install/itkModuleFactoryBase.h rename to Modules/Core/Install/itkModuleFactory.h index ffde5992b435067323c81d6197e6af74d82834bf..c0a3f1b5b08001d8094082dd4f3aee06e9e52e7b 100644 --- a/Modules/Core/Install/itkModuleFactoryBase.h +++ b/Modules/Core/Install/itkModuleFactory.h @@ -15,57 +15,67 @@ * limitations under the License. * *=========================================================================*/ -#ifndef itkModuleFactoryBase_h -#define itkModuleFactoryBase_h +#ifndef itkModuleFactory_h +#define itkModuleFactory_h -#include "itkObjectFactoryBase.h" -#include "itkModuleIOBase.h" +#include "itkObjectFactory.h" +#include "itkModuleBase.h" namespace itk { -/** \class ModuleFactoryBase +/** \class ModuleFactor * \brief Create instances of MetaImageIO objects using an object factory. * \ingroup ITKIOMeta */ -class ModuleFactoryBase:public ObjectFactoryBase +class ModuleFactory:public Object { public: /** Standard class typedefs. */ - typedef ModuleFactoryBase Self; - typedef ObjectFactoryBase Superclass; + typedef ModuleFactory Self; + typedef Object Superclass; typedef SmartPointer< Self > Pointer; typedef SmartPointer< const Self > ConstPointer; - /** Class methods used to interface with the registered factories. */ //virtual const char * GetITKSourceVersion() const { return ITK_SOURCE_VERSION; } /** Run-time type information (and related methods). */ - itkTypeMacro(ModuleFactoryBase, ObjectFactoryBase); + itkTypeMacro(ModuleFactory, Object); /** Convenient typedefs. */ - typedef ModuleIOBase::Pointer ModuleIOBasePointer; - typedef ModuleIOBase::CriteriaType CriteriaType; + typedef ModuleBase::Pointer ModuleBasePointer; + typedef ModuleBase::CriteriaType CriteriaType; + + typedef std::list< typename ModuleBasePointer > ModuleListType; + /** set selection criteria for possibleModules*/ + void SetCriteria(const CriteriaType &criteria); + + /** Narrow selection criteria*/ + void AddCriteria(const CriteriaType &criteria); + /** Create the appropriate ModuleIO depending on * the particulars of the file. */ - static ModuleIOBasePointer - CreateModuleIO(const CriteriaType &criteria); + static ModuleBasePointer + CreateModule(const CriteriaType &criteria); + protected: - ModuleFactoryBase() {}; - ~ModuleFactoryBase() {}; + CriteriaType m_Criteria; + mutable ModuleListType m_PossibleModules; + ModuleFactory(); + ~ModuleFactory(); private: - ModuleFactoryBase(const Self &); //purposely not implemented + ModuleFactory(const Self &); //purposely not implemented void operator=(const Self &); //purposely not implemented }; } // end namespace itk #ifndef ITK_MANUAL_INSTANTIATION -#include "itkModuleFactoryBase.hxx" +#include "itkModuleFactory.hxx" #endif #endif diff --git a/Modules/Core/Install/itkModuleFactoryBase.hxx b/Modules/Core/Install/itkModuleFactory.hxx similarity index 65% rename from Modules/Core/Install/itkModuleFactoryBase.hxx rename to Modules/Core/Install/itkModuleFactory.hxx index 6cfb301db780cb50660a79b2e5c89a75c99a750b..44405689847a14d40dfa32ef288ebd0c2d7991d7 100644 --- a/Modules/Core/Install/itkModuleFactoryBase.hxx +++ b/Modules/Core/Install/itkModuleFactory.hxx @@ -15,34 +15,44 @@ * limitations under the License. * *=========================================================================*/ -#ifndef itkModuleFactoryBase_hxx -#define itkModuleFactoryBase_hxx +#ifndef itkModuleFactory_hxx +#define itkModuleFactory_hxx -#include "itkModuleFactoryBase.h" +#include "itkModuleFactory.h" namespace itk { -ModuleIOBase::Pointer ModuleFactoryBase::CreateModuleIO(const CriteriaType &criteria) +ModuleFactory::ModuleFactory() + { + this->m_PossibleModules.clear(); + } +ModuleFactory::~ModuleFactory() + { + } + + + +ModuleBase::Pointer ModuleFactory::CreateModule(const CriteriaType &criteria) { - std::list< typename ModuleIOBase::Pointer > possibleModuleIO; + std::list< typename ModuleBase::Pointer > possibleModules; // std::list< LightObject::Pointer > allobjects = // ObjectFactoryBase::CreateAllInstance("itkModuleIOBaseTemplate"); std::list< LightObject::Pointer > allobjects = - ObjectFactoryBase::CreateAllInstance("itkModuleIOBase"); + ObjectFactoryBase::CreateAllInstance("itkModuleBase"); for ( std::list< LightObject::Pointer >::iterator i = allobjects.begin(); i != allobjects.end(); ++i ) { - ModuleIOBase *io = - dynamic_cast< ModuleIOBase * >( i->GetPointer() ); + ModuleBase *io = + dynamic_cast< ModuleBase * >( i->GetPointer() ); if ( io ) { - possibleModuleIO.push_back(io); + possibleModules.push_back(io); } } - for ( std::list< typename ModuleIOBase::Pointer >::iterator k = possibleModuleIO.begin(); - k != possibleModuleIO.end(); ++k ) + for (std::list< typename ModuleBase::Pointer >::iterator k = possibleModules.begin(); + k != possibleModules.end(); ++k) { if ( ( *k )->MeetsCriteria(criteria) ) { diff --git a/Modules/Core/Install/itkTransformModule1.h b/Modules/Core/Install/itkTransformModule1.h index 959ab694216da02694b15d143d0bc1e2edb5fa01..f9b87e4563577c1e4adf9b62522dab936d41b15b 100644 --- a/Modules/Core/Install/itkTransformModule1.h +++ b/Modules/Core/Install/itkTransformModule1.h @@ -1,16 +1,16 @@ #ifndef itkTransformModule1_h #define itkTransformModule1_h -#include "itkModuleIOBase.h" +#include "itkModuleBase.h" namespace itk { -class TransformModule1 : public ModuleIOBase +class TransformModule1 : public ModuleBase { public: /** Standard class typedefs. */ typedef TransformModule1 Self; - typedef ModuleIOBase Superclass; + typedef ModuleBase Superclass; typedef SmartPointer< Self > Pointer; typedef SmartPointer< const Self > ConstPointer; @@ -18,7 +18,7 @@ public: itkNewMacro(Self); /** Run-time type information (and related methods). */ - itkTypeMacro(TransformModule1, ModuleIOBase); + itkTypeMacro(TransformModule1, ModuleBase); /** define the Clone method */ // itkCloneMacro(Self); diff --git a/Modules/Core/Install/itkTransformModule1Factory.h b/Modules/Core/Install/itkTransformModule1Factory.h index c8bcdd49d632edc8106e9185c5d5e2d71906514e..050552d221f3f588963f441e6e93feefc994e9eb 100644 --- a/Modules/Core/Install/itkTransformModule1Factory.h +++ b/Modules/Core/Install/itkTransformModule1Factory.h @@ -18,8 +18,8 @@ #ifndef itkTransformModule1Factory_h #define itkTransformModule1Factory_h -#include "itkModuleFactoryBase.h" -#include "itkModuleIOBase.h" +#include "itkModuleFactory.h" +#include "itkModuleBase.h" namespace itk { @@ -27,12 +27,12 @@ namespace itk * \brief Create instances of MetaImageIO objects using an object factory. * \ingroup ITKIOMeta */ -class TransformModule1Factory:public ModuleFactoryBase + class TransformModule1Factory :public ObjectFactoryBase { public: /** Standard class typedefs. */ typedef TransformModule1Factory Self; - typedef ModuleFactoryBase Superclass; + typedef ObjectFactoryBase Superclass; typedef SmartPointer< Self > Pointer; typedef SmartPointer< const Self > ConstPointer; @@ -45,14 +45,14 @@ public: itkFactorylessNewMacro(Self); /** Run-time type information (and related methods). */ - itkTypeMacro(TransformModule1Factory, ModuleFactoryBase); + itkTypeMacro(TransformModule1Factory, ObjectFactoryBase); /** Register one factory of this type */ static void RegisterOneFactory() { TransformModule1Factory::Pointer transformModule1Factory = TransformModule1Factory::New(); - ModuleFactoryBase::RegisterFactory(transformModule1Factory); + ObjectFactoryBase::RegisterFactory(transformModule1Factory); } protected: diff --git a/Modules/Core/Install/itkTransformModule1Factory.hxx b/Modules/Core/Install/itkTransformModule1Factory.hxx index bd87dadea9437f1e519b06e2384387b69d4dfe4e..97712f6c8ca2935082b3a24627ef45125ff2f801 100644 --- a/Modules/Core/Install/itkTransformModule1Factory.hxx +++ b/Modules/Core/Install/itkTransformModule1Factory.hxx @@ -24,7 +24,7 @@ namespace itk TransformModule1Factory::TransformModule1Factory() { - this->RegisterOverride( "itkModuleIOBase", + this->RegisterOverride( "itkModuleBase", "itkTransformModule1", "Transform Module 1", 1, diff --git a/Modules/Core/Install/itkfactory.cxx b/Modules/Core/Install/itkfactory.cxx index 0e91a0269e2f1f65b921f01cb2b6ac5ddf24a764..f3fea8819c9b1ee6d57a339ae97bdf8c09629974 100644 --- a/Modules/Core/Install/itkfactory.cxx +++ b/Modules/Core/Install/itkfactory.cxx @@ -15,7 +15,7 @@ * limitations under the License. * *=========================================================================*/ -//#include "itkModuleIOFactoryRegisterManager.h" +//#include "itkModuleFactoryRegisterManager.h" #include "itkImageFileReader.h" #include "itkImageFileWriter.h" @@ -30,14 +30,15 @@ #include "itkTransformFactory.h" #include "itkMatrixOffsetTransformBase.h" -//Floris: The module factory is based on the transformIO factory. -// By default it creates 2 dummy modules: itkTransformModule1 and itkMetricModule1 -//CMake\UseITK.cmake sets up the IOFactory_Register_Manager for transforms and images +//Floris: The module factory is based on the ImageIO factory. +// We manually register 2 dummy modules: itkTransformModule1 and itkMetricModule1. +// in ITK CMake\UseITK.cmake sets up the IOFactory_Register_Manager for transforms and images +// Elastix (by Denis) uses (simpleITK's) Typelists to register all GPU filters //#include "itkModuleFactoryBase.h" //#include "itkModuleFactory.h" -#include "itkModuleIOBase.h" -//#include "itkModuleIOFactory.h" +#include "itkModuleBase.h" +//#include "itkModuleFactory.h" #include <map> #include <string> @@ -54,7 +55,7 @@ int main(int argc, char *argv[]) typedef std::list< itk::LightObject::Pointer > RegisteredObjectsContainerType; RegisteredObjectsContainerType registeredIOs = - itk::ObjectFactoryBase::CreateAllInstance("itkModuleIOBase"); + itk::ObjectFactoryBase::CreateAllInstance("itkModuleBase"); std::cout << "When CMake is not used to register the IO classes, there are\n" << registeredIOs.size() << " IO objects available to the Overlord.\n" << std::endl; @@ -63,21 +64,11 @@ int main(int argc, char *argv[]) itk::TransformModule1Factory::RegisterOneFactory(); itk::MetricModule1Factory::RegisterOneFactory(); std::cout << "there are\n"; - registeredIOs = itk::ObjectFactoryBase::CreateAllInstance("itkModuleIOBase"); + registeredIOs = itk::ObjectFactoryBase::CreateAllInstance("itkModuleBase"); std::cout << registeredIOs.size() << " IO objects available to the Overlord.\n" << std::endl; - std::cout << "Now, when we try to read a MetaImage, we will "; - //typedef itk::ModuleBaseTemplate< ScalarType > ModuleType; - //typedef itk::ModuleFactoryBase ModuleFactoryType; - - typedef itk::ModuleIOBase ModuleIOType; - //typedef itk::ModuleIOFactoryTemplate< ScalarType > ModuleFactoryIOType; - std::string moduleName("Metric"); - - //register a 3rd module - //typedef itk::TransformModule1< double, 3, 3 > TransformModule1Type; - //itk::ModuleFactory<TransformModule1Type>::RegisterModule(); + typedef itk::ModuleBase ModuleType; typedef std::map<std::string, std::string> CriteriaType; typedef std::pair<std::string, std::string> CriteriumType; @@ -90,12 +81,12 @@ int main(int argc, char *argv[]) //criteria1.insert(CriteriumType("ModuleInput", "Metric")); - ModuleIOType::Pointer Node1 = itk::ModuleFactoryBase::CreateModuleIO(criteria1); - - ModuleIOType::Pointer Node2 = itk::ModuleFactoryBase::CreateModuleIO(criteria2); - + ModuleType::Pointer Node1 = itk::ModuleFactory::CreateModule(criteria1); + ModuleType::Pointer Node2 = itk::ModuleFactory::CreateModule(criteria2); + + return EXIT_SUCCESS; } \ No newline at end of file diff --git a/Testing/Unit/CMakeLists.txt b/Testing/Unit/CMakeLists.txt index 152463661b386eebef9985f5071fa38a1f427f9e..404c59a453eae74f174b9810401106891a9d95b6 100644 --- a/Testing/Unit/CMakeLists.txt +++ b/Testing/Unit/CMakeLists.txt @@ -6,6 +6,7 @@ set( ElastixUnitTestFilenames elxExampleUnitTest.cxx itkRegistration.cxx + itkFactory.cxx ) # ---------------------------------------------------------------------