+
+vtkImageData* wxMaracasIRMViewManager::getImageData(std::string filename){
+ if(filename.compare("")!= 0){
+
+
+ vtkMetaImageReader* reader = vtkMetaImageReader::New();
+ reader->SetFileName(filename.c_str());
+ reader->Update();
+ vtkImageData* img = reader->GetOutput();
+ //reader->Delete();
+ return img;
+ }
+ return NULL;
+}
+
+void wxMaracasIRMViewManager::checkInvariant() throw(...){
+ if(this->_renderer==NULL){
+ throw "Renderer not set";
+ }
+}
+
+wxMaracasIRMViewManagerData* wxMaracasIRMViewManager::getViewData(int id) throw(...){
+ int i;
+ for(i = 0; i < prop3Dvect.size();i++){
+ if(prop3Dvect[i]->getId() == id){
+ return prop3Dvect[i];
+ }
+ }
+ throw "id not found in the data";
+
+ return NULL;
+}
+
+int wxMaracasIRMViewManager::getMaxIsoValue(int propid){
+
+ return this->getViewData(propid)->getMaxGreyLevel();
+
+}
+
+void wxMaracasIRMViewManager::changeColor(int propid, double red, double green, double blue) throw (...){
+ checkInvariant();
+ this->getViewData(propid)->changeColor(red, green, blue);
+
+}
+
+/********************************************************************************************
+** Start of data viewmanagerData
+*********************************************************************************************/
+
+wxMaracasIRMViewManagerData::wxMaracasIRMViewManagerData(vtkProp3D* prop3Dvect, std::string dataname){
+
+ _prop3D = prop3Dvect;
+ _dataname = dataname;
+ _maxgreylevel=-1;
+}
+wxMaracasIRMViewManagerData::wxMaracasIRMViewManagerData(vtkImageData* imagedata, std::string dataname){
+
+ this->setVtkImageData(imagedata);
+ _dataname = dataname;
+
+ _maxgreylevel = getMaxLevel(imagedata);
+ _prop3D=NULL;
+
+ this->changeIsoValue(this->_maxgreylevel);
+}
+/**
+** changes the isovalue in a prop3D
+**/
+void wxMaracasIRMViewManagerData::changeIsoValue(int value){
+
+
+ if(_prop3D!=NULL){
+ _prop3D->Delete();
+ _polydata->Delete();
+ _dataMapper->Delete();
+ }
+
+ vtkMarchingCubes *cubesFilter = vtkMarchingCubes::New();
+ cubesFilter->SetInput(this->_imagedata);
+ cubesFilter->SetValue(0,value);
+ cubesFilter->ComputeGradientsOn ();
+ cubesFilter->ComputeScalarsOn ();
+ cubesFilter->SetNumberOfContours( 1 );
+
+ // Unir puntos duplicados y remover primitivas degeneradas
+ vtkCleanPolyData *cleanFilter = vtkCleanPolyData::New();
+ cleanFilter->SetInput ( cubesFilter->GetOutput() );
+ cleanFilter->Update();
+
+ _polydata = vtkPolyData::New();
+ _polydata->DeepCopy(cleanFilter->GetOutput());
+
+ cubesFilter->Delete();
+ cleanFilter->Delete();
+
+
+ _dataMapper = vtkPolyDataMapper::New();
+ _dataMapper->SetInput(_polydata);
+
+ vtkActor* dataActor = vtkActor::New();
+ dataActor->SetMapper(_dataMapper);
+ _prop3D = dataActor;
+
+
+}
+int wxMaracasIRMViewManagerData::getMaxGreyLevel(){
+ return _maxgreylevel;
+}
+wxMaracasIRMViewManagerData::~wxMaracasIRMViewManagerData(){
+}
+/**
+** Adds a prop3D to the world of the application
+**/
+/**
+ ** Get's the max grey level of the image
+ **/
+int wxMaracasIRMViewManagerData::getMaxLevel(vtkImageData* img){
+
+ int ext[6], i, j, k,max=0;
+ img->GetExtent(ext);
+
+ for(i = ext[0]; i < ext[1];i++){
+ for(j = ext[2]; j < ext[3];j++){
+ for(k = ext[4]; k < ext[5];k++){
+ unsigned short* ptr = (unsigned short*)img->GetScalarPointer(i,j,k);
+ int temp = (int)*ptr;
+ if(temp > max){
+ max = temp;
+ }
+ }
+ }
+ }
+ return max;
+
+
+}
+void wxMaracasIRMViewManagerData::setVtkImageData(vtkImageData* imagedata){
+ _imagedata = imagedata;
+}
+/**
+** Adds a prop3D to the world of the application
+**/
+void wxMaracasIRMViewManagerData::setProp3D(vtkProp3D* prop3D){
+ _prop3D = prop3D;
+}
+/**
+** Changes the opacity in a prop3D
+**/
+void wxMaracasIRMViewManagerData::changeOpacity(int value){
+ vtkActor* actor = (vtkActor*)_prop3D;
+ actor->GetProperty()->SetOpacity((double)value/100.0);
+}
+
+/**
+** Check if the variables are setted correctly
+**/
+void wxMaracasIRMViewManagerData::checkInvariant(){
+
+}
+/**
+** get the prop3D
+**/
+vtkProp3D* wxMaracasIRMViewManagerData::getProp3D(){
+ return _prop3D;
+}
+/**
+** return the id from the daat
+**/
+int wxMaracasIRMViewManagerData::getId(){
+ return _id;
+}
+/**
+** set data id
+**/
+void wxMaracasIRMViewManagerData::setId(int propid){
+ _id = propid;
+}
+
+/**
+** Get the filanme
+**/
+std::string wxMaracasIRMViewManagerData::getDataname(){
+ return _dataname;
+}
+/**
+** Set the filanme
+**/
+void wxMaracasIRMViewManagerData::setDataname(std::string dataname){
+ _dataname = dataname;
+}
+
+void wxMaracasIRMViewManagerData::changeColor(double red, double green, double blue){
+ vtkActor* actor = (vtkActor*)_prop3D;
+ actor->GetProperty()->SetColor(red,green,blue);
+}