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
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
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 );
00101 void PopulateVtkImage(vtkImageImport* vtkImporter );
00102 void PopulateVtkUnstructuredGrid(vtkUnstructuredGrid* vtkGrid );
00103 void PopulateItkScene(itkScenePointer itkScene );
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
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
00144 void SetCellArray(vtkCellArray* a)
00145 {
00146 m_Cells = a;
00147 }
00148
00149 void SetCellCounter(int* i)
00150 {
00151 m_LastCell = i;
00152 }
00153
00154 void SetTypeArray(int* i)
00155 {
00156 m_TypeArray = i;
00157 }
00158
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
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