Program: wxMaracas
Module: $RCSfile: wxMaracasIRMViewManager.cxx,v $
Language: C++
- Date: $Date: 2009/04/14 12:47:30 $
- Version: $Revision: 1.3 $
+ Date: $Date: 2009/05/04 07:35:42 $
+ Version: $Revision: 1.4 $
Copyright: (c) 2002, 2003
License:
}
return -1;
}
-int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname){
+int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){
checkInvariant();
if(imagedata != NULL){
/**
** changes the isovalue in a prop3D
**/
-void wxMaracasIRMViewManager::changeIsoValue(int propid, int value )throw(char*){
+void wxMaracasIRMViewManager::changeIsoValue(int propid, double value )throw(char*){
checkInvariant();
wxMaracasIRMViewManagerData* data = this->getViewData(propid);
- _renderer->RemoveViewProp(data->getProp3D());
+ //_renderer->RemoveActor(data->getProp3D());
data->changeIsoValue(value);
- _renderer->AddViewProp(data->getProp3D());
+ //_renderer->AddActor(data->getProp3D());
_renderer->Render();
}
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 < 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 < prop3Dvect.size()-1;j++){
+ prop3Dvect[j] = prop3Dvect[j+1];
+ }
+ delete data;
+ prop3Dvect.pop_back();
+ }else{
+ throw "id not found in the data";
+ }
+
+
+
+
}
/********************************************************************************************
wxMaracasIRMViewManagerData::wxMaracasIRMViewManagerData(vtkProp3D* prop3Dvect, std::string dataname){
- _prop3D = prop3Dvect;
+ _prop3D = prop3Dvect;
_dataname = dataname;
_maxgreylevel=-1;
+
+ _cubesFilter=NULL;
+ _cleanFilter=NULL;
+ _dataMapper=NULL;
}
wxMaracasIRMViewManagerData::wxMaracasIRMViewManagerData(vtkImageData* imagedata, std::string 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 );
+ _cubesFilter = vtkMarchingCubes::New();
+ _cleanFilter = vtkCleanPolyData::New();
+ _dataMapper = vtkPolyDataMapper::New();
+ vtkActor* dataActor = vtkActor::New();
- // 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->SetInput(this->_imagedata);
+ _cubesFilter->ComputeGradientsOn ();
+ _cubesFilter->ComputeScalarsOn ();
+ _cubesFilter->SetNumberOfContours( 1 );
+ _cleanFilter->SetInput ( _cubesFilter->GetOutput() );
+ _dataMapper->SetInput(_cleanFilter->GetOutput());
+ _dataMapper->ScalarVisibilityOff();
+ _dataMapper->ImmediateModeRenderingOn();
+ dataActor->SetMapper(_dataMapper);
- cubesFilter->Delete();
- cleanFilter->Delete();
+ this->_prop3D = dataActor;
+ this->changeIsoValue(this->_maxgreylevel);
- _dataMapper = vtkPolyDataMapper::New();
- _dataMapper->SetInput(_polydata);
- vtkActor* dataActor = vtkActor::New();
- dataActor->SetMapper(_dataMapper);
- _prop3D = dataActor;
+}
+/**
+** changes the isovalue in a prop3D
+**/
+void wxMaracasIRMViewManagerData::changeIsoValue(double value){
+
+
+ _cubesFilter->SetValue(0,value);
+ _cubesFilter->Update();
+ _cleanFilter->Update();
+ _dataMapper->Update();
+
}
int wxMaracasIRMViewManagerData::getMaxGreyLevel(){
return _maxgreylevel;
}
-wxMaracasIRMViewManagerData::~wxMaracasIRMViewManagerData(){
+wxMaracasIRMViewManagerData::~wxMaracasIRMViewManagerData(){
+ if(_cubesFilter!=NULL){
+ _cubesFilter->Delete();
+ _cleanFilter->Delete();
+ _dataMapper->Delete();
+ }
+ _prop3D->Delete();
}
/**
** Adds a prop3D to the world of the application
** Changes the opacity in a prop3D
**/
void wxMaracasIRMViewManagerData::changeOpacity(int value){
- vtkActor* actor = (vtkActor*)_prop3D;
+ std::cout<<"chage op"<<value<<std::endl;
+ vtkActor* actor = (vtkActor*)this->_prop3D;
actor->GetProperty()->SetOpacity((double)value/100.0);
-}
+
+
+}
+void wxMaracasIRMViewManagerData::changeColor(double red, double green, double blue){
+ std::cout<<"chage col"<<red<<green<<blue<<std::endl;
+ vtkActor* actor = (vtkActor*)this->_prop3D;
+ actor->GetProperty()->SetColor(red,green,blue);
+}
/**
** Check if the variables are setted correctly
**/
** get the prop3D
**/
vtkProp3D* wxMaracasIRMViewManagerData::getProp3D(){
- return _prop3D;
+ return this->_prop3D;
}
/**
** return the id from the daat
_dataname = dataname;
}
-void wxMaracasIRMViewManagerData::changeColor(double red, double green, double blue){
- vtkActor* actor = (vtkActor*)_prop3D;
- actor->GetProperty()->SetColor(red,green,blue);
-}
+