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=1f02c5b739ed3375621f99826ff0b710ac8366ad;hpb=21c2226cf3dcad1daf3fb04818583b559694fa81;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasIRMViewManager.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasIRMViewManager.cxx index 1f02c5b..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/09 13:58:38 $ - Version: $Revision: 1.2 $ + Date: $Date: 2009/05/29 14:25:26 $ + Version: $Revision: 1.6 $ Copyright: (c) 2002, 2003 License: @@ -16,6 +16,8 @@ =========================================================================*/ #include "wxMaracasIRMViewManager.h" +#include "wxMaracasIRMViewManagerDataMhd.h" + /** ** Start of the manager class **/ @@ -35,7 +37,7 @@ void wxMaracasIRMViewManager::setRenderer(vtkRenderer* renderer){ /** ** Adds a prop3D to the manager and returns the identifier **/ -int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D, std::string dataname) throw(...){ +int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D, std::string dataname) throw(char*){ checkInvariant(); if(prop3D != NULL){ wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerData(prop3D, dataname); @@ -49,11 +51,11 @@ int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D, std::string dataname) } return -1; } -int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname){ +int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){ checkInvariant(); if(imagedata != NULL){ - wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerData(imagedata, dataname); + wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerDataMhd(imagedata, dataname); prop3Dvect.push_back(data); _renderer->AddActor(data->getProp3D()); data->setId(_idCount); @@ -68,7 +70,7 @@ int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dat /** ** adds or removes an actor depending of the bool value **/ -void wxMaracasIRMViewManager::addRemoveActor(int propid, bool addremove) throw(...){ +void wxMaracasIRMViewManager::addRemoveActor(int propid, bool addremove) throw(char*){ checkInvariant(); wxMaracasIRMViewManagerData* data = this->getViewData(propid); @@ -85,7 +87,7 @@ void wxMaracasIRMViewManager::addRemoveActor(int propid, bool addremove) throw( /** ** Changes the opacity in a prop3D **/ -void wxMaracasIRMViewManager::changeOpacity(int propid, int value) throw(...){ +void wxMaracasIRMViewManager::changeOpacity(int propid, int value) throw(char*){ checkInvariant(); @@ -98,14 +100,14 @@ void wxMaracasIRMViewManager::changeOpacity(int propid, int value) throw(...){ /** ** changes the isovalue in a prop3D **/ -void wxMaracasIRMViewManager::changeIsoValue(int propid, int value )throw (...){ +void wxMaracasIRMViewManager::changeIsoValue(int propid, double value )throw(char*){ checkInvariant(); wxMaracasIRMViewManagerData* data = this->getViewData(propid); - _renderer->RemoveViewProp(data->getProp3D()); - data->changeIsoValue(value); - _renderer->AddViewProp(data->getProp3D()); + //_renderer->RemoveActor(data->getProp3D()); + ((wxMaracasIRMViewManagerDataMhd*)data)->changeIsoValue(value); + //_renderer->AddActor(data->getProp3D()); _renderer->Render(); } @@ -141,15 +143,15 @@ vtkImageData* wxMaracasIRMViewManager::getImageData(std::string filename){ return NULL; } -void wxMaracasIRMViewManager::checkInvariant() throw(...){ +void wxMaracasIRMViewManager::checkInvariant() throw(char*){ if(this->_renderer==NULL){ throw "Renderer not set"; } } -wxMaracasIRMViewManagerData* wxMaracasIRMViewManager::getViewData(int id) throw(...){ +wxMaracasIRMViewManagerData* wxMaracasIRMViewManager::getViewData(int id) throw(char*){ int i; - for(i = 0; i < prop3Dvect.size();i++){ + for(i = 0; i < (int)(prop3Dvect.size());i++){ if(prop3Dvect[i]->getId() == id){ return prop3Dvect[i]; } @@ -159,165 +161,47 @@ wxMaracasIRMViewManagerData* wxMaracasIRMViewManager::getViewData(int id) throw( return NULL; } -int wxMaracasIRMViewManager::getMaxIsoValue(int propid){ +int wxMaracasIRMViewManager::getMaxIsoValue(int propid) throw(char*){ - return this->getViewData(propid)->getMaxGreyLevel(); + return ((wxMaracasIRMViewManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel(); } -void wxMaracasIRMViewManager::changeColor(int propid, double red, double green, double blue) throw (...){ +void wxMaracasIRMViewManager::changeColor(int propid, double red, double green, double blue) throw(char*){ checkInvariant(); this->getViewData(propid)->changeColor(red, green, blue); + _renderer->Render(); } -/******************************************************************************************** -** 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; +void wxMaracasIRMViewManager::deleteActor(int propid) throw (char *){ + checkInvariant(); - this->changeIsoValue(this->_maxgreylevel); -} -/** -** changes the isovalue in a prop3D -**/ -void wxMaracasIRMViewManagerData::changeIsoValue(int value){ - + this->addRemoveActor(propid, false); - if(_prop3D!=NULL){ - _prop3D->Delete(); - _polydata->Delete(); - _dataMapper->Delete(); + 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"; } - 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); -}