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

00001 #ifndef __DefOrgViewerAdapter_h
00002 #define __DefOrgViewerAdapter_h
00003 
00004 #include "itkImageFileReader.h"
00005 #include "itkImageFileWriter.h"
00006 #include "itkMeanImageFilter.h"
00007 #include "itkBinaryThresholdImageFilter.h"
00008 #include "itkCovariantVector.h"
00009 
00010 #include "vtkUnstructuredGrid.h"
00011 #include "vtkCellArray.h"
00012 #include "vtkProperty.h"
00013 
00014 #include <iostream>
00015 #include "itkOrganism.h"
00016 #include "Phys_Euler.h"
00017 #include "Ctrl_ScheduleDriven.h"
00018 #include "Beh_TranslateAll.h"
00019 #include "Def_Translation.h"
00020 #include "Sense_Gradient.h"
00021 #include "Geom_MeshSpatialObject.h"
00022 #include "Phys_LevelSet.h"
00023 
00024 #include "itkImage.h"
00025 #include "itkImageFileReader.h"
00026 #include "vtkImageImport.h"
00027 #include "itkVTKImageExport.h"
00028 #include "DefOrgViewerAdapter.h"
00029 
00030 #include <vtksys/SystemTools.hxx>
00031 #include <vtksys/CommandLineArguments.hxx>
00032 
00033 
00034 #define N_DIMS 3
00035 typedef unsigned char                                                                   PixelType;
00036 typedef itk::Image< PixelType, N_DIMS >                                 ImageType;
00037 typedef itk::ImageFileReader< ImageType >                               ImageFileReader;
00038 typedef ImageFileReader::Pointer                                                ImageFileReaderPointer;
00039 typedef  itk::VTKImageExport< ImageType >                               itkImageExportType;
00040 typedef itkImageExportType::Pointer                                             itkImageExportTypePointer;
00041 typedef itk::SceneSpatialObject<N_DIMS>::Pointer                itkScenePointer;
00042 
00043 #define SetStringMacro(name) \
00044   virtual void Set##name (const char* _arg) \
00045   { \
00046     if ( _arg && (_arg == this->m_##name) ) { return;} \
00047     if (_arg) \
00048       { \
00049       this->m_##name = _arg;\
00050       } \
00051      else \
00052       { \
00053       this->m_##name = ""; \
00054       } \
00055   } 
00056 
00057 class VistVTKCellsClass;
00058 
00059 class DefOrgViewerAdapter{
00060 public:
00061         // typedefs for the defOrg:
00062         typedef float                                                                                   DataType;       
00063         typedef  Geom_MeshSpatialObject< DataType, N_DIMS >             GeometricType;
00064         typedef itk::CovariantVector< DataType, N_DIMS >                GradientPixelType;
00065         typedef itk::Image< GradientPixelType, N_DIMS >                 GradientImageType;
00066         typedef Phys_LevelSet< DataType, ImageType, N_DIMS >    LevelSetPhysicsType;
00067         typedef Phys_Euler< DataType, 
00068                 GradientImageType, N_DIMS >                                                     EulerPhysicsType;
00069         typedef Sense_Gradient< DataType, ImageType, 
00070                 GradientImageType, N_DIMS >                                                     GradientSensorType;
00071         typedef Ctrl_ScheduleDriven<DataType, N_DIMS>                   CognitiveType;
00072         typedef Beh_TranslateAll<DataType, N_DIMS>                              Beh_TranslateAllType;
00073         typedef Def_Translation<DataType, N_DIMS>                               Def_TranslateAllType;
00074 
00075         typedef itk::ItkOrganism < ImageType, ImageType,
00076                 GradientImageType, DataType, N_DIMS >                           OrganismType;
00077 
00078         typedef itk::DefaultDynamicMeshTraits<
00079                 DataType, N_DIMS, N_DIMS >                                                      MeshTrait;
00080         typedef  itk::Mesh< DataType, N_DIMS, MeshTrait >               MeshType;
00081         typedef  MeshType::Pointer                                                              MeshTypePointer;
00082 
00083         // typedefs for itk->vtk mesh conversion:
00084         typedef itk::CellInterfaceVisitorImplementation<
00085                 DataType, MeshType::CellTraits,
00086                 itk::TriangleCell< itk::CellInterface<MeshType::PixelType, MeshType::CellTraits > >, 
00087                 VistVTKCellsClass> TriangleVisitor;
00088 
00089         typedef itk::CellInterfaceVisitorImplementation<
00090                 DataType, MeshType::CellTraits,
00091                 itk::QuadrilateralCell< itk::CellInterface<MeshType::PixelType, MeshType::CellTraits > >, 
00092                 VistVTKCellsClass> QuadrilateralVisitor;
00093         
00094         SetStringMacro(ScheduleFileName);
00095         SetStringMacro(MeshFileName);
00096         SetStringMacro(ImageFileName);
00097 
00098         DefOrgViewerAdapter();
00099         void SetupOrganism();
00100         void UpdateOrganism(itkScenePointer itkScene /*in/out*/);
00101         void PopulateVtkImage(vtkImageImport* vtkImporter /*in/out*/);
00102         void PopulateVtkUnstructuredGrid(vtkUnstructuredGrid* vtkGrid /*in/out*/);
00103         void PopulateItkScene(itkScenePointer itkScene /*in/out*/);
00104         bool IsAllInputFilesSet();
00105 
00106         
00107 private:
00108         void ConnectPipelines( itkImageExportTypePointer exporter, vtkImageImport* importer);
00109         void MeshToUnstructuredGrid( MeshTypePointer mesh, vtkUnstructuredGrid* vgrid); 
00110 
00111         std::string m_ImageFileName;
00112         std::string m_ScheduleFileName;
00113         std::string m_MeshFileName;
00114 
00115         ImageFileReaderPointer                  m_InputImageReader;
00116         itkImageExportTypePointer               m_ItkExporter;
00117         OrganismType::Pointer                   testOrg;
00118         LevelSetPhysicsType                             levelSetPhysLayer;
00119         EulerPhysicsType*                               eulerPhysLayerPointer;
00120         GradientSensorType::sensorIn    sensorInput;
00121         GradientSensorType                              gradientSensor;
00122         GeometricType*                                  geomLayerPointer;
00123         CognitiveType*                                  cognitiveLayerPointer;
00124         Beh_TranslateAllType*                   beh1;
00125         Def_TranslateAllType*                   def1;                                           
00126 
00127 };
00128 
00129 class VistVTKCellsClass
00130 {
00131         vtkCellArray* m_Cells;
00132         int* m_LastCell;
00133         int* m_TypeArray;
00134 public:
00135         // typedef the itk cells we are interested in
00136         typedef itk::CellInterface<
00137                 DefOrgViewerAdapter::MeshType::PixelType, 
00138                 DefOrgViewerAdapter::MeshType::CellTraits >  CellInterfaceType;
00139 
00140         typedef itk::TriangleCell<CellInterfaceType>      floatTriangleCell;
00141         typedef itk::QuadrilateralCell<CellInterfaceType> floatQuadrilateralCell;
00142 
00143         // Set the vtkCellArray that will be constructed
00144         void SetCellArray(vtkCellArray* a) 
00145         {
00146                 m_Cells = a;
00147         }
00148         // Set the cell counter pointer
00149         void SetCellCounter(int* i)
00150         {
00151                 m_LastCell = i;
00152         }
00153         // Set the type array for storing the vtk cell types
00154         void SetTypeArray(int* i)
00155         {
00156                 m_TypeArray = i;
00157         }
00158         // Visit a triangle and create the VTK_TRIANGLE cell 
00159         void Visit(unsigned long, floatTriangleCell* t)
00160         {
00161                 m_Cells->InsertNextCell(3,  (vtkIdType*)t->PointIdsBegin());
00162                 m_TypeArray[*m_LastCell] = VTK_TRIANGLE;
00163                 (*m_LastCell)++;
00164         }
00165         // Visit a triangle and create the VTK_QUAD cell 
00166         void Visit(unsigned long, floatQuadrilateralCell* t)
00167         {
00168                 m_Cells->InsertNextCell(4,  (vtkIdType*)t->PointIdsBegin());
00169                 m_TypeArray[*m_LastCell] = VTK_QUAD;
00170                 (*m_LastCell)++;
00171         }
00172 };
00173 
00174 
00175 #endif

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