00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date$ 00006 Version: $Revision: 16916 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #include "mitkCoreExtObjectFactory.h" 00019 00020 #include "mitkProperties.h" 00021 #include "mitkBaseRenderer.h" 00022 #include "mitkDataNode.h" 00023 #include "mitkCoreObjectFactory.h" 00024 00025 #include "mitkParRecFileIOFactory.h" 00026 #include "mitkObjFileIOFactory.h" 00027 #include "mitkVtkUnstructuredGridIOFactory.h" 00028 #include "mitkStlVolumeTimeSeriesIOFactory.h" 00029 #include "mitkVtkVolumeTimeSeriesIOFactory.h" 00030 00031 #include "mitkCone.h" 00032 #include "mitkContour.h" 00033 #include "mitkContourMapper2D.h" 00034 #include "mitkContourSetMapper2D.h" 00035 #include "mitkContourSetVtkMapper3D.h" 00036 #include "mitkContourVtkMapper3D.h" 00037 #include "mitkCuboid.h" 00038 #include "mitkCylinder.h" 00039 #include "mitkEllipsoid.h" 00040 #include "mitkMeshMapper2D.h" 00041 #include "mitkMeshVtkMapper3D.h" 00042 #include "mitkUnstructuredGridMapper2D.h" 00043 #include "mitkPointDataVtkMapper3D.h" 00044 #include "mitkEnhancedPointSetVtkMapper3D.h" 00045 #include "mitkSeedsImage.h" 00046 #include "mitkUnstructuredGrid.h" 00047 #include "mitkUnstructuredGridVtkMapper3D.h" 00048 #include "mitkPolyDataGLMapper2D.h" 00049 #include "mitkGPUVolumeMapper3D.h" 00050 00051 #include "mitkVolumeDataVtkMapper3D.h" 00052 00053 mitk::CoreExtObjectFactory::CoreExtObjectFactory() 00054 :CoreObjectFactoryBase() 00055 { 00056 static bool alreadyDone = false; 00057 if (!alreadyDone) 00058 { 00059 MITK_INFO << "CoreExtObjectFactory c'tor" << std::endl; 00060 RegisterIOFactories(); 00061 00062 itk::ObjectFactoryBase::RegisterFactory( ParRecFileIOFactory::New() ); 00063 itk::ObjectFactoryBase::RegisterFactory( ObjFileIOFactory::New() ); 00064 itk::ObjectFactoryBase::RegisterFactory( VtkUnstructuredGridIOFactory::New() ); 00065 itk::ObjectFactoryBase::RegisterFactory( StlVolumeTimeSeriesIOFactory::New() ); 00066 itk::ObjectFactoryBase::RegisterFactory( VtkVolumeTimeSeriesIOFactory::New() ); 00067 00068 alreadyDone = true; 00069 } 00070 } 00071 00072 mitk::Mapper::Pointer mitk::CoreExtObjectFactory::CreateMapper(mitk::DataNode* node, MapperSlotId id) 00073 { 00074 mitk::Mapper::Pointer newMapper=NULL; 00075 mitk::BaseData *data = node->GetData(); 00076 00077 if ( id == mitk::BaseRenderer::Standard2D ) 00078 { 00079 if((dynamic_cast<Mesh*>(data)!=NULL)) 00080 { 00081 newMapper = mitk::MeshMapper2D::New(); 00082 newMapper->SetDataNode(node); 00083 } 00084 else if((dynamic_cast<PointData*>(data)!=NULL)) 00085 { 00086 newMapper = mitk::PolyDataGLMapper2D::New(); 00087 newMapper->SetDataNode(node); 00088 } 00089 else if((dynamic_cast<Contour*>(data)!=NULL)) 00090 { 00091 newMapper = mitk::ContourMapper2D::New(); 00092 newMapper->SetDataNode(node); 00093 } 00094 else if((dynamic_cast<ContourSet*>(data)!=NULL)) 00095 { 00096 newMapper = mitk::ContourSetMapper2D::New(); 00097 newMapper->SetDataNode(node); 00098 } 00099 else if((dynamic_cast<UnstructuredGrid*>(data)!=NULL)) 00100 { 00101 newMapper = mitk::UnstructuredGridMapper2D::New(); 00102 newMapper->SetDataNode(node); 00103 } 00104 } 00105 else if ( id == mitk::BaseRenderer::Standard3D ) 00106 { 00107 if((dynamic_cast<Image*>(data) != NULL)) 00108 { 00109 newMapper = mitk::GPUVolumeMapper3D::New(); 00110 newMapper->SetDataNode(node); 00111 } 00112 else if((dynamic_cast<Mesh*>(data)!=NULL)) 00113 { 00114 newMapper = mitk::MeshVtkMapper3D::New(); 00115 newMapper->SetDataNode(node); 00116 } 00117 else if((dynamic_cast<PointData*>(data)!=NULL)) 00118 { 00119 newMapper = mitk::PointDataVtkMapper3D::New(); 00120 newMapper->SetDataNode(node); 00121 } 00122 else if((dynamic_cast<Contour*>(data)!=NULL)) 00123 { 00124 newMapper = mitk::ContourVtkMapper3D::New(); 00125 newMapper->SetDataNode(node); 00126 } 00127 else if((dynamic_cast<ContourSet*>(data)!=NULL)) 00128 { 00129 newMapper = mitk::ContourSetVtkMapper3D::New(); 00130 newMapper->SetDataNode(node); 00131 } 00132 else if((dynamic_cast<UnstructuredGrid*>(data)!=NULL)) 00133 { 00134 newMapper = mitk::UnstructuredGridVtkMapper3D::New(); 00135 newMapper->SetDataNode(node); 00136 } 00137 } 00138 return newMapper; 00139 } 00140 00141 void mitk::CoreExtObjectFactory::SetDefaultProperties(mitk::DataNode* node) 00142 { 00143 00144 if(node==NULL) 00145 return; 00146 00147 mitk::DataNode::Pointer nodePointer = node; 00148 00149 mitk::Image::Pointer image = dynamic_cast<mitk::Image*>(node->GetData()); 00150 if(image.IsNotNull() && image->IsInitialized()) 00151 { 00152 mitk::GPUVolumeMapper3D::SetDefaultProperties(node); 00153 } 00154 00155 if (dynamic_cast<mitk::UnstructuredGrid*>(node->GetData())) 00156 { 00157 mitk::UnstructuredGridVtkMapper3D::SetDefaultProperties(node); 00158 } 00159 00160 } 00161 00162 const char* mitk::CoreExtObjectFactory::GetFileExtensions() 00163 { 00164 return ""; 00165 }; 00166 00167 mitk::CoreObjectFactoryBase::MultimapType mitk::CoreExtObjectFactory::GetFileExtensionsMap() 00168 { 00169 return m_FileExtensionsMap; 00170 } 00171 00172 mitk::CoreObjectFactoryBase::MultimapType mitk::CoreExtObjectFactory::GetSaveFileExtensionsMap() 00173 { 00174 return m_SaveFileExtensionsMap; 00175 } 00176 00177 void mitk::CoreExtObjectFactory::CreateFileExtensionsMap() 00178 { 00179 } 00180 00181 const char* mitk::CoreExtObjectFactory::GetSaveFileExtensions() 00182 { 00183 return ""; 00184 }; 00185 00186 void mitk::CoreExtObjectFactory::RegisterIOFactories() 00187 { 00188 } 00189 00190 void RegisterCoreExtObjectFactory() 00191 { 00192 static bool oneCoreExtObjectFactoryRegistered = false; 00193 if ( ! oneCoreExtObjectFactoryRegistered ) 00194 { 00195 MITK_INFO << "Registering CoreExtObjectFactory..." << std::endl; 00196 mitk::CoreObjectFactory::GetInstance()->RegisterExtraFactory(mitk::CoreExtObjectFactory::New()); 00197 oneCoreExtObjectFactoryRegistered = true; 00198 } 00199 }