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:
=========================================================================*/
#include "wxMaracasIRMViewManager.h"
+#include "wxMaracasIRMViewManagerDataMhd.h"
+
/**
** Start of the manager class
**/
/**
** 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);
}
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);
/**
** 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);
/**
** Changes the opacity in a prop3D
**/
-void wxMaracasIRMViewManager::changeOpacity(int propid, int value) throw(...){
+void wxMaracasIRMViewManager::changeOpacity(int propid, int value) throw(char*){
checkInvariant();
/**
** 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();
}
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];
}
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);
-}