00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkConfig.h"
00019 #include "mitkCoreObjectFactory.h"
00020
00021 #include "mitkAffineInteractor.h"
00022 #include "mitkColorProperty.h"
00023 #include "mitkDataNode.h"
00024 #include "mitkEnumerationProperty.h"
00025 #include "mitkGeometry2DData.h"
00026 #include "mitkGeometry2DDataMapper2D.h"
00027 #include "mitkGeometry2DDataVtkMapper3D.h"
00028 #include "mitkGeometry3D.h"
00029 #include "mitkGeometryData.h"
00030 #include "mitkImage.h"
00031 #include "mitkImageMapperGL2D.h"
00032 #include "mitkLevelWindowProperty.h"
00033 #include "mitkLookupTable.h"
00034 #include "mitkLookupTableProperty.h"
00035 #include "mitkPlaneGeometry.h"
00036 #include "mitkPointSet.h"
00037 #include "mitkPointSetGLMapper2D.h"
00038 #include "mitkPointSetVtkMapper3D.h"
00039 #include "mitkPolyDataGLMapper2D.h"
00040 #include "mitkProperties.h"
00041 #include "mitkPropertyList.h"
00042 #include "mitkSlicedGeometry3D.h"
00043 #include "mitkSmartPointerProperty.h"
00044 #include "mitkStringProperty.h"
00045 #include "mitkSurface.h"
00046 #include "mitkSurface.h"
00047 #include "mitkSurfaceGLMapper2D.h"
00048 #include "mitkSurfaceVtkMapper3D.h"
00049 #include "mitkTimeSlicedGeometry.h"
00050 #include "mitkTransferFunctionProperty.h"
00051 #include "mitkVolumeDataVtkMapper3D.h"
00052 #include "mitkVtkInterpolationProperty.h"
00053 #include "mitkVtkRepresentationProperty.h"
00054 #include "mitkVtkResliceInterpolationProperty.h"
00055
00056 #include "mitkPicFileIOFactory.h"
00057 #include "mitkPointSetIOFactory.h"
00058 #include "mitkItkImageFileIOFactory.h"
00059 #include "mitkSTLFileIOFactory.h"
00060 #include "mitkVtkSurfaceIOFactory.h"
00061 #include "mitkVtkImageIOFactory.h"
00062 #include "mitkVtiFileIOFactory.h"
00063 #include "mitkPicVolumeTimeSeriesIOFactory.h"
00064
00065 #include "mitkImageWriterFactory.h"
00066 #include "mitkPointSetWriterFactory.h"
00067 #include "mitkSurfaceVtkWriterFactory.h"
00068
00069 mitk::CoreObjectFactory::FileWriterList mitk::CoreObjectFactory::m_FileWriters;
00070
00071 void mitk::CoreObjectFactory::RegisterExtraFactory(CoreObjectFactoryBase* factory) {
00072 MITK_INFO << "CoreObjectFactory: registering extra factory of type " << factory->GetNameOfClass();
00073 m_ExtraFactories.push_back(CoreObjectFactoryBase::Pointer(factory));
00074 }
00075
00076 mitk::CoreObjectFactory::Pointer mitk::CoreObjectFactory::GetInstance() {
00077 static mitk::CoreObjectFactory::Pointer instance;
00078 if (instance.IsNull())
00079 {
00080 instance = mitk::CoreObjectFactory::New();
00081 }
00082 return instance;
00083 }
00084
00085 #include <mitkDataNodeFactory.h>
00086
00087 void mitk::CoreObjectFactory::SetDefaultProperties(mitk::DataNode* node)
00088 {
00089 if(node==NULL)
00090 return;
00091
00092 mitk::DataNode::Pointer nodePointer = node;
00093
00094 mitk::Image::Pointer image = dynamic_cast<mitk::Image*>(node->GetData());
00095 if(image.IsNotNull() && image->IsInitialized())
00096 {
00097 mitk::ImageMapperGL2D::SetDefaultProperties(node);
00098 mitk::VolumeDataVtkMapper3D::SetDefaultProperties(node);
00099 }
00100
00101 mitk::Surface::Pointer surface = dynamic_cast<mitk::Surface*>(node->GetData());
00102 if(surface.IsNotNull())
00103 {
00104 mitk::SurfaceGLMapper2D::SetDefaultProperties(node);
00105 mitk::SurfaceVtkMapper3D::SetDefaultProperties(node);
00106 }
00107
00108 mitk::PointSet::Pointer pointSet = dynamic_cast<mitk::PointSet*>(node->GetData());
00109 if(pointSet.IsNotNull())
00110 {
00111 mitk::PointSetGLMapper2D::SetDefaultProperties(node);
00112 mitk::PointSetVtkMapper3D::SetDefaultProperties(node);
00113 }
00114 for (ExtraFactoriesList::iterator it = m_ExtraFactories.begin(); it != m_ExtraFactories.end() ; it++ ) {
00115 (*it)->SetDefaultProperties(node);
00116 }
00117 }
00118
00119 mitk::CoreObjectFactory::CoreObjectFactory()
00120 {
00121 static bool alreadyDone = false;
00122 if (!alreadyDone)
00123 {
00124 MITK_INFO << "CoreObjectFactory c'tor" << std::endl;
00125
00126 itk::ObjectFactoryBase::RegisterFactory( PicFileIOFactory::New() );
00127 itk::ObjectFactoryBase::RegisterFactory( PointSetIOFactory::New() );
00128 itk::ObjectFactoryBase::RegisterFactory( STLFileIOFactory::New() );
00129 itk::ObjectFactoryBase::RegisterFactory( VtkSurfaceIOFactory::New() );
00130 itk::ObjectFactoryBase::RegisterFactory( VtkImageIOFactory::New() );
00131 itk::ObjectFactoryBase::RegisterFactory( VtiFileIOFactory::New() );
00132 itk::ObjectFactoryBase::RegisterFactory( ItkImageFileIOFactory::New() );
00133 itk::ObjectFactoryBase::RegisterFactory( PicVolumeTimeSeriesIOFactory::New() );
00134
00135 mitk::SurfaceVtkWriterFactory::RegisterOneFactory();
00136 mitk::PointSetWriterFactory::RegisterOneFactory();
00137 mitk::ImageWriterFactory::RegisterOneFactory();
00138
00139 CreateFileExtensionsMap();
00140
00141 alreadyDone = true;
00142 }
00143 }
00144
00145 mitk::Mapper::Pointer mitk::CoreObjectFactory::CreateMapper(mitk::DataNode* node, MapperSlotId id)
00146 {
00147 mitk::Mapper::Pointer newMapper = NULL;
00148 mitk::Mapper::Pointer tmpMapper = NULL;
00149
00150
00151 for (ExtraFactoriesList::iterator it = m_ExtraFactories.begin(); it != m_ExtraFactories.end() ; it++ ) {
00152 tmpMapper = (*it)->CreateMapper(node,id);
00153 if(tmpMapper.IsNotNull())
00154 newMapper = tmpMapper;
00155 }
00156
00157 if (newMapper.IsNull())
00158 {
00159
00160 mitk::BaseData *data = node->GetData();
00161
00162 if ( id == mitk::BaseRenderer::Standard2D )
00163 {
00164 if((dynamic_cast<Image*>(data)!=NULL))
00165 {
00166 mitk::Image::Pointer image = dynamic_cast<mitk::Image*>(data);
00167 newMapper = mitk::ImageMapperGL2D::New();
00168 newMapper->SetDataNode(node);
00169 }
00170 else if((dynamic_cast<Geometry2DData*>(data)!=NULL))
00171 {
00172 newMapper = mitk::Geometry2DDataMapper2D::New();
00173 newMapper->SetDataNode(node);
00174 }
00175 else if((dynamic_cast<Surface*>(data)!=NULL))
00176 {
00177 newMapper = mitk::SurfaceGLMapper2D::New();
00178
00179 mitk::SurfaceGLMapper2D *castedMapper = dynamic_cast<mitk::SurfaceGLMapper2D*>(newMapper.GetPointer());
00180 castedMapper->SetDataNode(node);
00181 }
00182 else if((dynamic_cast<PointSet*>(data)!=NULL))
00183 {
00184 newMapper = mitk::PointSetGLMapper2D::New();
00185 newMapper->SetDataNode(node);
00186 }
00187 }
00188 else if ( id == mitk::BaseRenderer::Standard3D )
00189 {
00190 if((dynamic_cast<Image*>(data) != NULL))
00191 {
00192 newMapper = mitk::VolumeDataVtkMapper3D::New();
00193 newMapper->SetDataNode(node);
00194 }
00195 else if((dynamic_cast<Geometry2DData*>(data)!=NULL))
00196 {
00197 newMapper = mitk::Geometry2DDataVtkMapper3D::New();
00198 newMapper->SetDataNode(node);
00199 }
00200 else if((dynamic_cast<Surface*>(data)!=NULL))
00201 {
00202 newMapper = mitk::SurfaceVtkMapper3D::New();
00203 newMapper->SetDataNode(node);
00204 }
00205 else if((dynamic_cast<PointSet*>(data)!=NULL))
00206 {
00207 newMapper = mitk::PointSetVtkMapper3D::New();
00208
00209 newMapper->SetDataNode(node);
00210 }
00211 }
00212 }
00213
00214 return newMapper;
00215 }
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00238 const char* mitk::CoreObjectFactory::GetFileExtensions()
00239 {
00240 MultimapType aMap;
00241 for (ExtraFactoriesList::iterator it = m_ExtraFactories.begin(); it != m_ExtraFactories.end() ; it++ )
00242 {
00243 aMap = (*it)->GetFileExtensionsMap();
00244 this->MergeFileExtensions(m_FileExtensionsMap, aMap);
00245 }
00246 this->CreateFileExtensions(m_FileExtensionsMap, m_FileExtensions);
00247 return m_FileExtensions.c_str();
00248 }
00249
00258 void mitk::CoreObjectFactory::MergeFileExtensions(MultimapType& fileExtensionsMap, MultimapType inputMap)
00259 {
00260 bool duplicateFound = false;
00261 std::pair<MultimapType::iterator, MultimapType::iterator> pairOfIter;
00262 for (MultimapType::iterator it = inputMap.begin(); it != inputMap.end(); ++it)
00263 {
00264 duplicateFound = false;
00265 pairOfIter = fileExtensionsMap.equal_range((*it).first);
00266 for (MultimapType::iterator it2 = pairOfIter.first; it2 != pairOfIter.second; ++it2)
00267 {
00268
00269 std::string aString = (*it2).second;
00270 if (aString.compare((*it).second) == 0)
00271 {
00272
00273 duplicateFound = true;
00274 break;
00275 }
00276 }
00277 if (!duplicateFound)
00278 {
00279 fileExtensionsMap.insert(std::pair<std::string, std::string>((*it).first, (*it).second));
00280 }
00281 }
00282 }
00283
00288 mitk::CoreObjectFactoryBase::MultimapType mitk::CoreObjectFactory::GetFileExtensionsMap()
00289 {
00290 return m_FileExtensionsMap;
00291 }
00292
00296 void mitk::CoreObjectFactory::CreateFileExtensionsMap()
00297 {
00298 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.dcm", "DICOM files"));
00299 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.DCM", "DICOM files"));
00300 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.dc3", "DICOM files"));
00301 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.DC3", "DICOM files"));
00302 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.gdcm", "DICOM files"));
00303 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.seq", "DKFZ Pic"));
00304 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.pic", "DKFZ Pic"));
00305 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.pic.gz", "DKFZ Pic"));
00306 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.mhd", "MetaImage"));
00307 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.seq.gz", "DKFZ Pic"));
00308 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.nrrd", "NRRD Vector Images"));
00309 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.nhdr", "NRRD Vector Images"));
00310 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.mps", "Point sets"));
00311 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.pic", "Sets of 2D slices"));
00312 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.pic.gz", "Sets of 2D slices"));
00313 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.bmp", "Sets of 2D slices"));
00314 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.png", "Sets of 2D slices"));
00315 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.jpg", "Sets of 2D slices"));
00316 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.jpeg", "Sets of 2D slices"));
00317 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.dcm", "Sets of 2D slices"));
00318 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.gdcm", "Sets of 2D slices"));
00319 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.ima", "Sets of 2D slices"));
00320 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.tiff", "Sets of 2D slices"));
00321 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.tif", "Sets of 2D slices"));
00322 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.stl", "Surface files"));
00323 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.vtk", "Surface files"));
00324 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.vtp", "Surface files"));
00325 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.obj", "Surface files"));
00326 m_FileExtensionsMap.insert(std::pair<std::string, std::string>("*.nii", "NIfTI format"));
00327
00328 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.pic", "DKFZ Pic"));
00329 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.mhd", "MetaImage"));
00330 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.vtk", "Surface Files"));
00331 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.vti", "VTK Image Data Files"));
00332 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.hdr", "Image Header Files"));
00333 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.png", "Sets of 2D slices"));
00334 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.tiff", "Sets of 2D slices"));
00335 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.tif", "Sets of 2D slices"));
00336 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.jpg", "Sets of 2D slices"));
00337 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.jpeg", "Sets of 2D slices"));
00338 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.bmp", "Sets of 2D slices"));
00339 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.dcm", "Sets of 2D slices"));
00340 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.gipl", "UMDS GIPL Format Files"));
00341 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.nii", "NIfTI format"));
00342 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.nrrd", "NRRD Vector Images"));
00343 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.nhdr", "NRRD Vector Images"));
00344 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.spr", "Stimulate Files"));
00345 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.lsm", "Microscope Images"));
00346 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.dwi", "Diffusion Weighted Images"));
00347 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.hdwi", "Diffusion Weighted Images"));
00348 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.qbi", "Q-Ball Images"));
00349 m_SaveFileExtensionsMap.insert(std::pair<std::string, std::string>("*.hqbi", "Q-Ball Images"));
00350
00351 }
00352
00358 const char* mitk::CoreObjectFactory::GetSaveFileExtensions() {
00359 MultimapType aMap;
00360 for (ExtraFactoriesList::iterator it = m_ExtraFactories.begin(); it != m_ExtraFactories.end() ; it++ )
00361 {
00362 aMap = (*it)->GetSaveFileExtensionsMap();
00363 this->MergeFileExtensions(m_SaveFileExtensionsMap, aMap);
00364
00365 }
00366 this->CreateFileExtensions(m_SaveFileExtensionsMap, m_SaveFileExtensions);
00367 return m_SaveFileExtensions.c_str();
00368 };
00369
00374 mitk::CoreObjectFactoryBase::MultimapType mitk::CoreObjectFactory::GetSaveFileExtensionsMap()
00375 {
00376 return m_SaveFileExtensionsMap;
00377 }
00378
00379 mitk::CoreObjectFactory::FileWriterList mitk::CoreObjectFactory::GetFileWriters() {
00380 FileWriterList allWriters = m_FileWriters;
00381 for (ExtraFactoriesList::iterator it = m_ExtraFactories.begin(); it != m_ExtraFactories.end() ; it++ ) {
00382 FileWriterList list2 = (*it)->GetFileWriters();
00383 allWriters.merge(list2);
00384 }
00385 return allWriters;
00386 }
00387 void mitk::CoreObjectFactory::MapEvent(const mitk::Event*, const int) {
00388
00389 }
00390