#include "BasicDefOrg_DefOrgViewerAdapter.h" BasicDefOrg_DefOrgViewerAdapter::BasicDefOrg_DefOrgViewerAdapter(){ geomLayerPointer = new GeometricType(); AddOrganismProperty("Sigma",0,10,1.0,0.1,"Sigma for Gradient Sensor"); AddOrganismProperty("Chu",0,100,50); } int BasicDefOrg_DefOrgViewerAdapter::MaxNumberOfOutputItkSpatialObjects(){ return 1; } int BasicDefOrg_DefOrgViewerAdapter::MaxNumberOfOutputImages(){ return 1; } void BasicDefOrg_DefOrgViewerAdapter::PopulateItkScene(){ itkScenePointer itkScene = m_OutputItkSpatialObjects[0].theItkScene; m_OutputItkSpatialObjects[0].isModified=true; /*itkScenePointer itkScene2 = m_OutputItkSpatialObjects[1].theItkScene; m_OutputItkSpatialObjects[1].isModified=true;*/ geomLayerPointer->readTopologyFromFile( m_MeshFileName ); itkScene->AddSpatialObject(geomLayerPointer->theMeshSpatialObject); //itkScene2->AddSpatialObject(geomLayerPointer->theMeshSpatialObject); } void BasicDefOrg_DefOrgViewerAdapter::PopulateVtkImage(){ vtkImageImport* vtkImporter = m_OutputImages[0].first; m_OutputImages[0].second=true; m_InputImageReader = ImageFileReader::New(); m_InputImageReader->SetFileName(m_ImageFileName.c_str()); m_InputImageReader->Update(); ImageType::Pointer image = m_InputImageReader->GetOutput(); PopulateVtkImageHelper(image, vtkImporter); } void BasicDefOrg_DefOrgViewerAdapter::UpdateOrganism(){ itkScenePointer itkScene = m_OutputItkSpatialObjects[0].theItkScene; m_OutputItkSpatialObjects[0].isModified=true; testOrg->run(); itkScene->AddSpatialObject(geomLayerPointer->theMeshSpatialObject); } void BasicDefOrg_DefOrgViewerAdapter::SetupOrganism() { m_Initialized=true; //TODO:: make this robust (i.e. flag errors if image not set, geom not set etc). // Instantiate the organism: testOrg = OrganismType::New(); std::cout << "Organism created..." << std::endl; //Setup the sensor GradientSensorType::sensorIn input; input.sigma = GetOrganismProperty("Sigma"); this->m_InputImageReader->Update(); input.imageIn = this->m_InputImageReader->GetOutput(); gradientSensor.run((void *)&input); std::cout << "Gradient sensor setup complete..." << std::endl; GradientSensorType::sensorOut * output = (GradientSensorType::sensorOut *) gradientSensor.getOuput(); //Instantiate geomtery and physics layers eulerPhysLayerPointer = new EulerPhysicsType(0,0,10); //physLayer.setInput(reader->GetOutput()); eulerPhysLayerPointer->setExternalForces((void *) &(output->imageOut)); eulerPhysLayerPointer->setGeometry(geomLayerPointer); testOrg->setPhysicsLayer(eulerPhysLayerPointer); testOrg->setGeometricLayer(geomLayerPointer); std::cout << "Physics layer added..." << std::endl; //TEST BEHAVIOR //TODO figure out how to make sure it gets deleted. //TODO should we attach things by value instead by ref? cognitiveLayerPointer = new CognitiveType(5); beh1 = new Beh_TranslateAllType(); def1 = new Def_TranslateAllType(); cognitiveLayerPointer->setSchedule(m_ScheduleFileName); //Beh_TranslateAll beh1; //Def_Translation def1; this->testOrg->setCognitiveLayer(cognitiveLayerPointer); this->testOrg->addBehaviour(beh1); this->testOrg->addDeformation(def1); //Pass the output of the reader to the filter, then to the writer. testOrg->SetInput(m_InputImageReader->GetOutput()); } void BasicDefOrg_DefOrgViewerAdapter::PopulateVtkUnstructuredGrid(vtkUnstructuredGrid* vtkGrid /*in/out*/){ geomLayerPointer->readTopologyFromFile( m_MeshFileName ); MeshToUnstructuredGrid( geomLayerPointer->theMesh, vtkGrid/*in/out*/ ); }