00001 #include "DefOrgViewerAdapterBaseTemplated.h"
00002 namespace mial{
00003
00004 template class DefOrgViewerAdapterBaseTemplated<unsigned char, float>;
00005
00006 template <class ITKPIXELTYPE, class MESHDATATYPE>
00007 void DefOrgViewerAdapterBaseTemplated<ITKPIXELTYPE,MESHDATATYPE>::PopulateVtkImageHelper(ImageTypePointer itkImage, vtkImageImport* vtkImporter){
00008 itkImageExportTypePointer itkExporter = itkImageExportType::New();
00009 m_itkImageExportPointerHolder.push_back(itkExporter);
00010 itkExporter->SetInput( itkImage );
00011 itkExporter->Update();
00012 ConnectPipelines( itkExporter, vtkImporter );
00013 vtkImporter->Update();
00014 }
00015
00016
00017 template <class ITKPIXELTYPE, class MESHDATATYPE>
00018 void DefOrgViewerAdapterBaseTemplated<ITKPIXELTYPE,MESHDATATYPE>::ConnectPipelines( typename itkImageExportType::Pointer exporter,
00019 vtkImageImport* importer)
00020 {
00021 importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());
00022 importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
00023 importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
00024 importer->SetSpacingCallback(exporter->GetSpacingCallback());
00025 importer->SetOriginCallback(exporter->GetOriginCallback());
00026 importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());
00027 importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());
00028 importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
00029 importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
00030 importer->SetDataExtentCallback(exporter->GetDataExtentCallback());
00031 importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
00032 importer->SetCallbackUserData(exporter->GetCallbackUserData());
00033 }
00034
00035 template <class ITKPIXELTYPE, class MESHDATATYPE>
00036 void DefOrgViewerAdapterBaseTemplated<ITKPIXELTYPE,MESHDATATYPE>::MeshToUnstructuredGrid( MeshTypePointer mesh, vtkUnstructuredGrid* vgrid )
00037 {
00038
00039 int numPoints = mesh->GetNumberOfPoints();
00040 if(numPoints == 0)
00041 {
00042 mesh->Print(std::cerr);
00043 std::cerr << "no points in Grid " << std::endl;
00044 }
00045
00046
00047 vtkPoints* vpoints = vtkPoints::New();
00048 vpoints->SetNumberOfPoints(numPoints);
00049
00050
00051 MeshType::PointsContainer::Pointer points = mesh->GetPoints();
00052 for(MeshType::PointsContainer::Iterator i = points->Begin();
00053 i != points->End(); ++i)
00054 {
00055
00056 int idx = i->Index();
00057
00058
00059
00060 vpoints->SetPoint(idx, const_cast<DataType*>(i->Value().GetDataPointer()));
00061 }
00062
00063 vgrid->SetPoints(vpoints);
00064
00065
00066
00067 MeshType::CellType::MultiVisitor::Pointer mv =
00068 MeshType::CellType::MultiVisitor::New();
00069
00070 TriangleVisitor::Pointer tv = TriangleVisitor::New();
00071 QuadrilateralVisitor::Pointer qv = QuadrilateralVisitor::New();
00072
00073 int vtkCellCount = 0;
00074 int numCells = mesh->GetNumberOfCells();
00075 int *types = new int[numCells];
00076
00077 vtkCellArray* cells = vtkCellArray::New();
00078 cells->EstimateSize(numCells, 4);
00079
00080 tv->SetTypeArray(types);
00081 tv->SetCellCounter(&vtkCellCount);
00082 tv->SetCellArray(cells);
00083 qv->SetTypeArray(types);
00084 qv->SetCellCounter(&vtkCellCount);
00085 qv->SetCellArray(cells);
00086
00087 mv->AddVisitor(tv);
00088 mv->AddVisitor(qv);
00089
00090
00091
00092 mesh->Accept(mv);
00093
00094
00095 vgrid->SetCells(types, cells);
00096
00097
00098 cells->Delete();
00099 vpoints->Delete();
00100
00101 }
00102 }