C:/cmcintos/defOrgs/examples/DefOrgViewerWithKW/Source/DefOrgViewerAdapterBaseTemplated.h

00001 #ifndef __DefOrgViewerAdapterBaseTemplated_h
00002 #define __DefOrgViewerAdapterBaseTemplated_h
00003 
00004 #include "itkImageFileReader.h"
00005 #include "itkImageFileWriter.h"
00006 
00007 #include "vtkUnstructuredGrid.h"
00008 #include "vtkCellArray.h"
00009 #include "vtkProperty.h"
00010 
00011 #include <iostream>
00012 
00013 #include "itkImage.h"
00014 #include "itkImageFileReader.h"
00015 #include "vtkImageImport.h"
00016 #include "itkVTKImageExport.h"
00017 #include "DefOrgViewerAdapterBaseTemplated.h"
00018 #include "DefOrgViewerAdapterBase.h"
00019 #include "itkTriangleCell.h"
00020 #include "itkQuadrilateralCell.h"
00021 #include "itkDefaultDynamicMeshTraits.h"
00022 #include "itkMesh.h"
00023 
00024 #include <vtksys/SystemTools.hxx>
00025 #include <vtksys/CommandLineArguments.hxx>
00026 namespace mial{
00027 
00028 #define N_DIMS 3
00029 template<class MESHTYPE> class VistVTKCellsClass;
00031 template <class ITKPIXELTYPE, class MESHDATATYPE>
00032 class DefOrgViewerAdapterBaseTemplated:public DefOrgViewerAdapterBase{
00033 public:
00034 
00035         //Constructor
00036         DefOrgViewerAdapterBaseTemplated(int maxNumImages):DefOrgViewerAdapterBase(maxNumImages){};
00037 
00038         //convenient typedefs for derived base classes
00039         typedef ITKPIXELTYPE                                                                    PixelType;
00040         typedef MESHDATATYPE                                                                    DataType;
00041         typedef typename itk::Image< PixelType, N_DIMS >                ImageType;
00042         typedef typename ImageType::Pointer                                             ImageTypePointer;
00043         typedef typename itk::ImageFileReader< ImageType >              ImageFileReader;
00044         typedef typename ImageFileReader::Pointer                               ImageFileReaderPointer;
00045         typedef typename itk::VTKImageExport< ImageType >               itkImageExportType;
00046         typedef typename itkImageExportType::Pointer                    itkImageExportTypePointer;
00047         typedef typename itk::SceneSpatialObject<N_DIMS>::Pointer               itkScenePointer;
00048 
00049         typedef typename itk::DefaultDynamicMeshTraits<
00050                 DataType, N_DIMS, N_DIMS >                                                      MeshTrait;
00051         typedef  typename itk::Mesh< DataType, N_DIMS, MeshTrait >              MeshType;
00052         typedef typename MeshType::CellTraits                           MeshTypeCellTraits;
00053         typedef  typename MeshType::Pointer                                                             MeshTypePointer;
00054 
00055         // typedefs for itk->vtk mesh conversion:
00056         typedef typename itk::TriangleCell< typename itk::CellInterface<MESHDATATYPE, MeshTypeCellTraits > > 
00057                  TriangleCell;
00058         typedef typename itk::CellInterfaceVisitorImplementation<
00059                 DataType, MeshTypeCellTraits, TriangleCell, VistVTKCellsClass<typename DefOrgViewerAdapterBaseTemplated::MeshType> >
00060                  TriangleVisitor;
00061         typedef typename itk::QuadrilateralCell< typename itk::CellInterface<MESHDATATYPE, MeshTypeCellTraits > > QuadrilateralCell;
00062         typedef typename itk::CellInterfaceVisitorImplementation<
00063                 DataType, MeshTypeCellTraits, QuadrilateralCell, VistVTKCellsClass<typename DefOrgViewerAdapterBaseTemplated::MeshType> > 
00064                 QuadrilateralVisitor;
00065         
00066         virtual void SetupOrganism()=0;
00067         virtual void UpdateOrganism()=0;
00068         virtual void PopulateVtkImage()=0;
00069         virtual void PopulateVtkImageHelper(ImageTypePointer itkImage, vtkImageImport* vtkImporter);
00070         virtual void PopulateVtkUnstructuredGrid(vtkUnstructuredGrid* vtkGrid )=0;
00071         virtual void PopulateItkScene()=0;
00072         
00073 protected:
00075         virtual void ConnectPipelines( itkImageExportTypePointer exporter, vtkImageImport* importer);
00077         virtual void MeshToUnstructuredGrid( MeshTypePointer mesh, vtkUnstructuredGrid* vgrid); 
00078 
00079         ImageFileReaderPointer                  m_InputImageReader;     
00080 private:
00081         std::vector<itkImageExportTypePointer> m_itkImageExportPointerHolder;
00082 };
00083 
00085 template <class MESHTYPE>
00086 class VistVTKCellsClass
00087 {
00088         vtkCellArray* m_Cells;
00089         int* m_LastCell;
00090         int* m_TypeArray;
00091         public:
00092                 // typedef the itk cells we are interested in
00093                 typedef itk::CellInterface<
00094                 typename MESHTYPE::PixelType, 
00095                 typename MESHTYPE::CellTraits >  CellInterfaceType;
00096 
00097                 typedef itk::TriangleCell<CellInterfaceType>      floatTriangleCell;
00098                 typedef itk::QuadrilateralCell<CellInterfaceType> floatQuadrilateralCell;
00099 
00100                 // Set the vtkCellArray that will be constructed
00101                 void SetCellArray(vtkCellArray* a) 
00102                 {
00103                         m_Cells = a;
00104                 }
00105                 // Set the cell counter pointer
00106                 void SetCellCounter(int* i)
00107                 {
00108                         m_LastCell = i;
00109                 }
00110                 // Set the type array for storing the vtk cell types
00111                 void SetTypeArray(int* i)
00112                 {
00113                         m_TypeArray = i;
00114                 }
00115                 // Visit a triangle and create the VTK_TRIANGLE cell 
00116                 void Visit(unsigned long, floatTriangleCell* t)
00117                 {
00118                         m_Cells->InsertNextCell(3,  (vtkIdType*)t->PointIdsBegin());
00119                         m_TypeArray[*m_LastCell] = VTK_TRIANGLE;
00120                         (*m_LastCell)++;
00121                 }
00122                 // Visit a triangle and create the VTK_QUAD cell 
00123                 void Visit(unsigned long, floatQuadrilateralCell* t)
00124                 {
00125                         m_Cells->InsertNextCell(4,  (vtkIdType*)t->PointIdsBegin());
00126                         m_TypeArray[*m_LastCell] = VTK_QUAD;
00127                         (*m_LastCell)++;
00128                 }
00129 };
00130 
00131 }
00132 #endif

Generated on Wed Jul 19 13:05:16 2006 for IDO by  doxygen 1.4.7