X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxMaracasIRMViewManager.cxx;h=90f581c979072546c21a6b783cc11ef9f6fe2e1d;hb=096822cf3513065cfa25e378679339a5ae4684cf;hp=56360295dfdc9bab685c25ff1b555f529561606d;hpb=bf59a58c8e18d27d491ce9681c06e50c8213cb23;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasIRMViewManager.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasIRMViewManager.cxx index 5636029..90f581c 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasIRMViewManager.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasIRMViewManager.cxx @@ -3,8 +3,8 @@ Program: wxMaracas Module: $RCSfile: wxMaracasIRMViewManager.cxx,v $ Language: C++ - Date: $Date: 2009/04/01 16:16:59 $ - Version: $Revision: 1.1 $ + Date: $Date: 2009/05/29 14:25:26 $ + Version: $Revision: 1.6 $ Copyright: (c) 2002, 2003 License: @@ -16,11 +16,14 @@ =========================================================================*/ #include "wxMaracasIRMViewManager.h" +#include "wxMaracasIRMViewManagerDataMhd.h" + /** ** Start of the manager class **/ wxMaracasIRMViewManager::wxMaracasIRMViewManager(){ _renderer = NULL; + _idCount=0; } wxMaracasIRMViewManager::~wxMaracasIRMViewManager(){ } @@ -34,40 +37,79 @@ void wxMaracasIRMViewManager::setRenderer(vtkRenderer* renderer){ /** ** Adds a prop3D to the manager and returns the identifier **/ -int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D){ +int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D, std::string dataname) throw(char*){ + checkInvariant(); if(prop3D != NULL){ - prop3Dvect.push_back(prop3D); - - if(_renderer!=NULL){ - _renderer->AddActor(prop3D); - }else{ - throw "Imposible to add actor, check renderer"; - } - + wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerData(prop3D, dataname); + prop3Dvect.push_back(data); + _renderer->AddActor(data->getProp3D()); + data->setId(_idCount); + _idCount++; + return data->getId(); + }else{ + throw "Check vtkProp3D file or input"; + } + return -1; +} +int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){ - return prop3Dvect.size()-1; + checkInvariant(); + if(imagedata != NULL){ + wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerDataMhd(imagedata, dataname); + prop3Dvect.push_back(data); + _renderer->AddActor(data->getProp3D()); + data->setId(_idCount); + _idCount++; + return data->getId(); }else{ - return -1; + throw "Check ImageData file or input"; } + return -1; + } /** -** Changes the opacity in a prop3D +** adds or removes an actor depending of the bool value **/ -void wxMaracasIRMViewManager::changeOpacity(int propid, int value){ - if(propid < prop3Dvect.size()){ - vtkActor* actor = (vtkActor*)prop3Dvect[propid]; - actor->GetProperty()->SetOpacity((double)value/100.0); +void wxMaracasIRMViewManager::addRemoveActor(int propid, bool addremove) throw(char*){ + checkInvariant(); + + wxMaracasIRMViewManagerData* data = this->getViewData(propid); + if(data->getProp3D()!=NULL){ + if(addremove){ + _renderer->AddViewProp(data->getProp3D()); + }else{ + _renderer->RemoveViewProp(data->getProp3D()); + } _renderer->Render(); } + +} +/** +** Changes the opacity in a prop3D +**/ +void wxMaracasIRMViewManager::changeOpacity(int propid, int value) throw(char*){ + checkInvariant(); + + + this->getViewData(propid)->changeOpacity(value); + + _renderer->Render(); + } /** ** changes the isovalue in a prop3D **/ -void wxMaracasIRMViewManager::changeIsoValue(int propid, int value){ - if(propidgetViewData(propid); + + //_renderer->RemoveActor(data->getProp3D()); + ((wxMaracasIRMViewManagerDataMhd*)data)->changeIsoValue(value); + //_renderer->AddActor(data->getProp3D()); + + _renderer->Render(); } vtkProp3D* wxMaracasIRMViewManager:: getProp3D(std::string filename){ @@ -86,3 +128,80 @@ vtkProp3D* wxMaracasIRMViewManager:: getProp3D(std::string filename){ } return NULL; } + +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(char*){ + if(this->_renderer==NULL){ + throw "Renderer not set"; + } +} + +wxMaracasIRMViewManagerData* wxMaracasIRMViewManager::getViewData(int id) throw(char*){ + int i; + for(i = 0; i < (int)(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) throw(char*){ + + return ((wxMaracasIRMViewManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel(); + +} + +void wxMaracasIRMViewManager::changeColor(int propid, double red, double green, double blue) throw(char*){ + checkInvariant(); + this->getViewData(propid)->changeColor(red, green, blue); + + _renderer->Render(); +} + +void wxMaracasIRMViewManager::deleteActor(int propid) throw (char *){ + checkInvariant(); + + this->addRemoveActor(propid, false); + + int i,n; + bool exit = false; + for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){ + if(prop3Dvect[i]->getId() == propid){ + n=i; + exit = true; + } + } + if(exit){ + wxMaracasIRMViewManagerData* data = prop3Dvect[n]; + int j; + for(j = i; j < (int)(prop3Dvect.size())-1;j++){ + prop3Dvect[j] = prop3Dvect[j+1]; + } + delete data; + prop3Dvect.pop_back(); + }else{ + throw "id not found in the data"; + } + + + + +} + +