Program: wxMaracas
Module: $RCSfile: wxMaracasSurfaceRenderingManager.cxx,v $
Language: C++
- Date: $Date: 2011/06/28 16:56:13 $
- Version: $Revision: 1.1 $
+ Date: $Date: 2012/05/11 11:46:37 $
+ Version: $Revision: 1.3 $
Copyright: (c) 2002, 2003
License:
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
+
#include "wxMaracasSurfaceRenderingManager.h"
#include "wxMaracasSurfaceRenderingManagerDataMhd.h"
_renderer = NULL;
_interactor = NULL;
_idCount=0;
+ image = 0;
}
wxMaracasSurfaceRenderingManager::~wxMaracasSurfaceRenderingManager(){
}
** 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);
}
return -1;
}
+
+/**
+** Adds a polydata and creates the prop3D (actor) to the manager and returns the identifier
+**/
+/**
+** Adds a polydata and creates the prop3D (actor) to the manager and returns the identifier
+**/
+int wxMaracasSurfaceRenderingManager::addProp3D(int idTP, std::string filename, std::string dataname){
+
+
+ wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(filename, _interactor);
+ if(dataname.compare("") != 0)
+ data->setDataname(dataname);
+
+ prop3Dvect.push_back(data);
+ _renderer->AddActor(data->getProp3D());
+ if(idTP == -1)
+ {
+ data->setId(_idCount);
+ _idCount++;
+ }
+ else
+ {
+ data->setId(idTP);
+ }
+ return data->getId();
+
+}
+
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);
/**
** adds or removes an actor depending of the bool value
**/
-void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove) throw(char*){
+bool 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();
- }
+ return true;
+ }else {
+ if(addremove && propid == 0 && image){
+ addPropMHD(0, image, "id0");
+ return true;
+ }
+ }
+ return false;
}
/**
** adds or removes the surface box depending of the bool value
_renderer->Render();
}
-vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
+/*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());
+ }else if(ext.compare(VTK)==0){
+ vtkSmartPointer<vtkPolyDataReader> polyreader =vtkSmartPointer<vtkPolyDataReader>::New();
+ polyreader->SetFileName(filename.c_str());
+ polyreader->Update();
+ polydata->DeepCopy(polyreader->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;
-}
+}*/
vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(std::string filename){
if(filename.compare("")!= 0){
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";
+ int i = 0;
+ for(i = 0; i < (int)(prop3Dvect.size());i++){
+ if(prop3Dvect[i]->getId() == id){
+ return prop3Dvect[i];
+ }
+ }
+#ifndef USE_QT
+ throw "id not found in the data";
+#else
+ return 0;
+#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, filename);
+}
+
+void wxMaracasSurfaceRenderingManager::exportImageStencil(int propid,const char* filename){
+ checkInvariant();
+
+ wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
+ if(data && data->getProp3D()!=NULL){
+ data->exportImageStencil(filename);
+ }
+}