diff --git a/Modules/PlanarFigure/Algorithms/mitkPlanarFigureObjectFactory.cpp b/Modules/PlanarFigure/Algorithms/mitkPlanarFigureObjectFactory.cpp index dfdcaccf77..d5fb22a7a5 100644 --- a/Modules/PlanarFigure/Algorithms/mitkPlanarFigureObjectFactory.cpp +++ b/Modules/PlanarFigure/Algorithms/mitkPlanarFigureObjectFactory.cpp @@ -1,139 +1,144 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkPlanarFigureObjectFactory.h" #include "mitkPlanarFigureWriter.h" #include "mitkCoreObjectFactory.h" #include "mitkPlanarFigureIOFactory.h" #include "mitkPlanarFigureWriterFactory.h" #include "mitkPlanarFigure.h" #include "mitkPlanarFigureMapper2D.h" typedef std::multimap MultimapType; mitk::PlanarFigureObjectFactory::PlanarFigureObjectFactory() +: m_PlanarFigureIOFactory(PlanarFigureIOFactory::New().GetPointer()) { static bool alreadyDone = false; if ( !alreadyDone ) { RegisterIOFactories(); - itk::ObjectFactoryBase::RegisterFactory( PlanarFigureIOFactory::New() ); + itk::ObjectFactoryBase::RegisterFactory( m_PlanarFigureIOFactory ); PlanarFigureWriterFactory::RegisterOneFactory(); m_FileWriters.push_back( PlanarFigureWriter::New().GetPointer() ); - mitk::CoreObjectFactory::GetInstance()->RegisterExtraFactory(this); - CreateFileExtensionsMap(); alreadyDone = true; } } +mitk::PlanarFigureObjectFactory::~PlanarFigureObjectFactory() +{ + PlanarFigureWriterFactory::UnRegisterOneFactory(); + itk::ObjectFactoryBase::UnRegisterFactory(m_PlanarFigureIOFactory); +} + mitk::Mapper::Pointer mitk::PlanarFigureObjectFactory::CreateMapper(mitk::DataNode* node, MapperSlotId id) { mitk::Mapper::Pointer newMapper=NULL; mitk::BaseData *data = node->GetData(); if ( id == mitk::BaseRenderer::Standard2D ) { if ( dynamic_cast(data) != NULL ) { newMapper = mitk::PlanarFigureMapper2D::New(); newMapper->SetDataNode(node); } } else if ( id == mitk::BaseRenderer::Standard3D ) { } return newMapper; } void mitk::PlanarFigureObjectFactory::SetDefaultProperties(mitk::DataNode* node) { if ( node == NULL ) { return; } mitk::DataNode::Pointer nodePointer = node; mitk::PlanarFigure::Pointer pf = dynamic_cast( node->GetData() ); if ( pf.IsNotNull() ) { mitk::PlanarFigureMapper2D::SetDefaultProperties(node); node->AddProperty( "color", mitk::ColorProperty::New(1.0,1.0,1.0), NULL, true ); node->AddProperty( "opacity", mitk::FloatProperty::New(0.8), NULL, true ); } } const char* mitk::PlanarFigureObjectFactory::GetFileExtensions() { return ""; -}; +} mitk::CoreObjectFactoryBase::MultimapType mitk::PlanarFigureObjectFactory::GetFileExtensionsMap() { return m_FileExtensionsMap; } const char* mitk::PlanarFigureObjectFactory::GetSaveFileExtensions() { //return ";;Planar Figures (*.pf)"; // for mitk::PlanarFigure and derived classes std::string fileExtension; this->CreateFileExtensions(m_SaveFileExtensionsMap, fileExtension); return fileExtension.c_str(); }; mitk::CoreObjectFactoryBase::MultimapType mitk::PlanarFigureObjectFactory::GetSaveFileExtensionsMap() { return m_SaveFileExtensionsMap; } void mitk::PlanarFigureObjectFactory::CreateFileExtensionsMap() { m_FileExtensionsMap.insert(std::pair("*.pf", "Planar Figure Files")); m_SaveFileExtensionsMap.insert(std::pair("*.pf", "Planar Figure Files")); } void mitk::PlanarFigureObjectFactory::RegisterIOFactories() { } struct RegisterPlanarFigureObjectFactory{ RegisterPlanarFigureObjectFactory() : m_Factory( mitk::PlanarFigureObjectFactory::New() ) { mitk::CoreObjectFactory::GetInstance()->RegisterExtraFactory( m_Factory ); } ~RegisterPlanarFigureObjectFactory() { mitk::CoreObjectFactory::GetInstance()->UnRegisterExtraFactory( m_Factory ); } mitk::PlanarFigureObjectFactory::Pointer m_Factory; }; static RegisterPlanarFigureObjectFactory registerPlanarFigureObjectFactory; diff --git a/Modules/PlanarFigure/Algorithms/mitkPlanarFigureObjectFactory.h b/Modules/PlanarFigure/Algorithms/mitkPlanarFigureObjectFactory.h index bafdb837e7..8d915c460e 100644 --- a/Modules/PlanarFigure/Algorithms/mitkPlanarFigureObjectFactory.h +++ b/Modules/PlanarFigure/Algorithms/mitkPlanarFigureObjectFactory.h @@ -1,55 +1,61 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef PLANARFIGUREOBJECTFACTORY_H_INCLUDED #define PLANARFIGUREOBJECTFACTORY_H_INCLUDED #include "mitkCoreObjectFactoryBase.h" #include "PlanarFigureExports.h" namespace mitk { class PlanarFigure_EXPORT PlanarFigureObjectFactory : public CoreObjectFactoryBase { public: - mitkClassMacro(PlanarFigureObjectFactory,CoreObjectFactoryBase); - itkNewMacro(PlanarFigureObjectFactory); + mitkClassMacro(PlanarFigureObjectFactory,CoreObjectFactoryBase) + itkNewMacro(PlanarFigureObjectFactory) + + ~PlanarFigureObjectFactory(); virtual Mapper::Pointer CreateMapper(mitk::DataNode* node, MapperSlotId slotId); virtual void SetDefaultProperties(mitk::DataNode* node); virtual const char* GetFileExtensions(); virtual mitk::CoreObjectFactoryBase::MultimapType GetFileExtensionsMap(); virtual const char* GetSaveFileExtensions(); virtual mitk::CoreObjectFactoryBase::MultimapType GetSaveFileExtensionsMap(); void RegisterIOFactories(); protected: PlanarFigureObjectFactory(); void CreateFileExtensionsMap(); MultimapType m_FileExtensionsMap; MultimapType m_SaveFileExtensionsMap; + +private: + + itk::ObjectFactoryBase::Pointer m_PlanarFigureIOFactory; }; } #endif // PLANARFIGUREOBJECTFACTORY_H_INCLUDED diff --git a/Modules/PlanarFigure/IO/mitkPlanarFigureWriterFactory.cpp b/Modules/PlanarFigure/IO/mitkPlanarFigureWriterFactory.cpp index 350cc6f0c9..7970b1b6db 100644 --- a/Modules/PlanarFigure/IO/mitkPlanarFigureWriterFactory.cpp +++ b/Modules/PlanarFigure/IO/mitkPlanarFigureWriterFactory.cpp @@ -1,75 +1,96 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkPlanarFigureWriterFactory.h" #include "itkCreateObjectFunction.h" #include "itkVersion.h" #include namespace mitk { template class CreatePlanarFigureWriter : public itk::CreateObjectFunctionBase { public: /** Standard class typedefs. */ typedef CreatePlanarFigureWriter Self; typedef itk::SmartPointer Pointer; /** Methods from itk:LightObject. */ - itkFactorylessNewMacro(Self); - LightObject::Pointer CreateObject() { typename T::Pointer p = T::New(); + itkFactorylessNewMacro(Self) + LightObject::Pointer CreateObject() + { + typename T::Pointer p = T::New(); p->Register(); return p.GetPointer(); } protected: CreatePlanarFigureWriter() {} ~CreatePlanarFigureWriter() {} private: CreatePlanarFigureWriter(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented }; PlanarFigureWriterFactory::PlanarFigureWriterFactory() { this->RegisterOverride("IOWriter", "PlanarFigureWriter", "PlanarFigure xml Writer", 1, mitk::CreatePlanarFigureWriter< mitk::PlanarFigureWriter >::New()); } PlanarFigureWriterFactory::~PlanarFigureWriterFactory() { } +itk::ObjectFactoryBase::Pointer PlanarFigureWriterFactory::GetInstance() +{ + static itk::ObjectFactoryBase::Pointer factory(mitk::PlanarFigureWriterFactory::New().GetPointer()); + return factory; +} + +void PlanarFigureWriterFactory::RegisterOneFactory(void) +{ + if ( GetInstance()->GetReferenceCount() == 1 ) + { + ObjectFactoryBase::RegisterFactory( GetInstance().GetPointer() ); + } +} + +void PlanarFigureWriterFactory::UnRegisterOneFactory(void) +{ + ObjectFactoryBase::UnRegisterFactory( GetInstance().GetPointer() ); +} + const char* PlanarFigureWriterFactory::GetITKSourceVersion() const { return ITK_SOURCE_VERSION; } const char* PlanarFigureWriterFactory::GetDescription() const { return "PlanarFigureWriterFactory"; } } // end namespace mitk diff --git a/Modules/PlanarFigure/IO/mitkPlanarFigureWriterFactory.h b/Modules/PlanarFigure/IO/mitkPlanarFigureWriterFactory.h index 94ac76983b..01c448feb8 100644 --- a/Modules/PlanarFigure/IO/mitkPlanarFigureWriterFactory.h +++ b/Modules/PlanarFigure/IO/mitkPlanarFigureWriterFactory.h @@ -1,67 +1,62 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef PLANARFIGURE_WRITERFACTORY_H_HEADER_INCLUDED #define PLANARFIGURE_WRITERFACTORY_H_HEADER_INCLUDED #include "itkObjectFactoryBase.h" #include "PlanarFigureExports.h" #include "mitkBaseData.h" namespace mitk { class PlanarFigure_EXPORT PlanarFigureWriterFactory : public itk::ObjectFactoryBase { public: mitkClassMacro( mitk::PlanarFigureWriterFactory, itk::ObjectFactoryBase ) /** Class methods used to interface with the registered factories. */ virtual const char* GetITKSourceVersion(void) const; virtual const char* GetDescription(void) const; /** Method for class instantiation. */ - itkFactorylessNewMacro(Self); + itkFactorylessNewMacro(Self) /** Register one factory of this type */ - static void RegisterOneFactory(void) - { - static bool IsRegistered = false; - if ( !IsRegistered ) - { - PlanarFigureWriterFactory::Pointer pfwf = PlanarFigureWriterFactory::New(); - ObjectFactoryBase::RegisterFactory( pfwf ); - IsRegistered = true; - } - } + static void RegisterOneFactory(void); + + /** UnRegister one factory of this type */ + static void UnRegisterOneFactory(void); protected: PlanarFigureWriterFactory(); ~PlanarFigureWriterFactory(); private: PlanarFigureWriterFactory(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented + static itk::ObjectFactoryBase::Pointer GetInstance(); }; } // end namespace mitk #endif // PLANARFIGURE_WRITERFACTORY_H_HEADER_INCLUDED