Program: wxMaracas
Module: $RCSfile: wxMaracasIRMViewManager.cxx,v $
Language: C++
- Date: $Date: 2009/04/01 16:16:59 $
- Version: $Revision: 1.1 $
+ Date: $Date: 2009/04/14 12:47:30 $
+ Version: $Revision: 1.3 $
Copyright: (c) 2002, 2003
License:
**/
wxMaracasIRMViewManager::wxMaracasIRMViewManager(){
_renderer = NULL;
+ _idCount=0;
}
wxMaracasIRMViewManager::~wxMaracasIRMViewManager(){
}
/**
** 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){
- return prop3Dvect.size()-1;
+ checkInvariant();
+ if(imagedata != NULL){
+ wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerData(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(propid<prop3Dvect.size()){
+void wxMaracasIRMViewManager::changeIsoValue(int propid, int value )throw(char*){
+ checkInvariant();
- }
+ wxMaracasIRMViewManagerData* data = this->getViewData(propid);
+
+ _renderer->RemoveViewProp(data->getProp3D());
+ data->changeIsoValue(value);
+ _renderer->AddViewProp(data->getProp3D());
+
+ _renderer->Render();
}
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 < 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 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);
+
+}
+
+/********************************************************************************************
+** 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);
+}