Program: wxMaracas
Module: $RCSfile: wxMaracasSurfaceRenderingManager.cxx,v $
Language: C++
- Date: $Date: 2011/06/28 16:56:13 $
- Version: $Revision: 1.1 $
+ Date: $Date: 2011/10/05 16:26:55 $
+ Version: $Revision: 1.2 $
Copyright: (c) 2002, 2003
License:
#include "wxMaracasSurfaceRenderingManager.h"
#include "wxMaracasSurfaceRenderingManagerDataMhd.h"
+
+#include "vtkPLYReader.h"
+#include "vtkSmartPointer.h"
+
/**
** Start of the manager class
**/
** Adds a prop3D to the manager and returns the identifier
**/
int wxMaracasSurfaceRenderingManager::addProp3D(int idTP, vtkProp3D* prop3D, std::string dataname) throw(char*){
- checkInvariant();
+ //checkInvariant();
if(prop3D != NULL){
wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(prop3D, dataname, _interactor);
prop3Dvect.push_back(data);
}
int wxMaracasSurfaceRenderingManager::addPropMHD(int idTP, vtkImageData* imagedata, std::string dataname) throw(char*){
checkInvariant();
- if(imagedata != NULL){
+ if(imagedata != NULL){
image = imagedata;
wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname, _interactor);
prop3Dvect.push_back(data);
void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove) throw(char*){
checkInvariant();
- wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
- if(data->getProp3D()!=NULL){
+ wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
+ if(data && data->getProp3D()!=NULL){
if(addremove){
_renderer->AddViewProp(data->getProp3D());
}else{
_renderer->RemoveViewProp(data->getProp3D());
}
_renderer->Render();
- }
+ }else {
+ if(addremove && propid == 0 && image){
+ addPropMHD(0, image, "id0");
+ }
+ return;
+ }
}
/**
** adds or removes the surface box depending of the bool value
vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
if(filename.compare("")!= 0){
- vtkSTLReader *STLReader=vtkSTLReader::New();
+
+ vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
+ std::string ext = filename.substr(filename.find_last_of("."), 4);
+ if(ext.compare(STL)==0){
+ vtkSmartPointer<vtkSTLReader> STLReader=vtkSmartPointer<vtkSTLReader>::New();
STLReader->SetFileName(filename.c_str());
STLReader->Update();
- vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
- dataMapper->SetInput(STLReader->GetOutput());
-
- vtkActor* dataActor = vtkActor::New();
- dataActor->SetMapper(dataMapper);
- dataActor->GetProperty()->SetOpacity(1);
-
- return dataActor;
+ polydata->DeepCopy(STLReader->GetOutput());
+
+ }else if(ext.compare(PLY)==0){
+ vtkSmartPointer<vtkPLYReader> plyreader =vtkSmartPointer<vtkPLYReader>::New();
+ plyreader->SetFileName(filename.c_str());
+ plyreader->Update();
+ polydata->DeepCopy(plyreader->GetOutput());
+ }
+
+ vtkSmartPointer<vtkPolyDataMapper> dataMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
+ dataMapper->SetInput(polydata);
+
+ vtkActor* dataActor = vtkActor::New();
+ dataActor->SetMapper(dataMapper);
+ dataActor->GetProperty()->SetOpacity(1);
+ return dataActor;
}
return NULL;
}
return image;
}
+void wxMaracasSurfaceRenderingManager::setImageData(vtkImageData* img){
+ image = img;
+}
+
void wxMaracasSurfaceRenderingManager::checkInvariant() throw(char*){
if(this->_renderer==NULL){
throw "Renderer not set";
wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::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";
+ for(i = 0; i < (int)(prop3Dvect.size());i++){
+ if(prop3Dvect[i]->getId() == id){
+ return prop3Dvect[i];
+ }
+ }
+ return 0;
+#ifndef USE_QT
+ throw "id not found in the data";
+#else
+ return NULL;
+#endif
+
- return NULL;
}
int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
delete data;
prop3Dvect.pop_back();
}else{
+#ifndef USE_QT
+ throw "id not found in the data";
+#endif
- throw "id not found in the data";
}
}
wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
- data->enableBoxWidget(enable);
+ if(data)
+ data->enableBoxWidget(enable);
}
void wxMaracasSurfaceRenderingManager::Transform(vtkMatrix4x4* tmatrix){
data->saveProp3DSTL(filename);
}
}
+
+void wxMaracasSurfaceRenderingManager::loadProp3DSTL(const char* filename){
+ this->addProp3D(-1, this->getProp3D(filename), filename);
+}