1 /*=========================================================================
4 Module: $RCSfile: wxMaracasSurfaceRenderingManager.cxx,v $
6 Date: $Date: 2009/11/13 09:34:10 $
7 Version: $Revision: 1.4 $
9 Copyright: (c) 2002, 2003
12 This software is distributed WITHOUT ANY WARRANTY; without even
13 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 PURPOSE. See the above copyright notice for more information.
16 =========================================================================*/
17 #include "wxMaracasSurfaceRenderingManager.h"
18 #include "wxMaracasSurfaceRenderingManagerDataMhd.h"
21 ** Start of the manager class
23 wxMaracasSurfaceRenderingManager::wxMaracasSurfaceRenderingManager(){
27 wxMaracasSurfaceRenderingManager::~wxMaracasSurfaceRenderingManager(){
31 ** Sets the renderer to manage the prop3D from the surface render
33 void wxMaracasSurfaceRenderingManager::setRenderer(vtkRenderer* renderer){
38 ** Gets the renderer to manage the prop3D from the surface render
40 vtkRenderer* wxMaracasSurfaceRenderingManager::getRenderer(){
47 void wxMaracasSurfaceRenderingManager::Update(int pid)throw(char*){
48 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(pid);
49 ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->UpdateSurface();
54 ** Adds a prop3D to the manager and returns the identifier
56 int wxMaracasSurfaceRenderingManager::addProp3D(vtkProp3D* prop3D, std::string dataname) throw(char*){
59 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(prop3D, dataname);
60 prop3Dvect.push_back(data);
61 _renderer->AddActor(data->getProp3D());
62 data->setId(_idCount);
66 throw "Check vtkProp3D file or input";
70 int wxMaracasSurfaceRenderingManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){
72 if(imagedata != NULL){
74 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname);
75 prop3Dvect.push_back(data);
76 _renderer->AddActor(data->getProp3D());
77 data->setId(_idCount);
81 throw "Check ImageData file or input";
87 ** adds or removes an actor depending of the bool value
89 void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove) throw(char*){
92 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
93 if(data->getProp3D()!=NULL){
95 _renderer->AddViewProp(data->getProp3D());
97 _renderer->RemoveViewProp(data->getProp3D());
103 ** Changes the opacity in a prop3D
105 void wxMaracasSurfaceRenderingManager::changeOpacity(int propid, int value) throw(char*){
109 this->getViewData(propid)->changeOpacity(value);
116 ** changes the isovalue in a prop3D
118 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double value )throw(char*){
121 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
123 //_renderer->RemoveActor(data->getProp3D());
124 ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(value);
125 //_renderer->AddActor(data->getProp3D());
130 vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
131 if(filename.compare("")!= 0){
132 vtkSTLReader *STLReader=vtkSTLReader::New();
133 STLReader->SetFileName(filename.c_str());
135 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
136 dataMapper->SetInput(STLReader->GetOutput());
138 vtkActor* dataActor = vtkActor::New();
139 dataActor->SetMapper(dataMapper);
140 dataActor->GetProperty()->SetOpacity(1);
147 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(std::string filename){
148 if(filename.compare("")!= 0){
150 vtkMetaImageReader* reader = vtkMetaImageReader::New();
151 reader->SetFileName(filename.c_str());
153 vtkImageData* img = reader->GetOutput();
160 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(){
164 void wxMaracasSurfaceRenderingManager::checkInvariant() throw(char*){
165 if(this->_renderer==NULL){
166 throw "Renderer not set";
170 wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::getViewData(int id) throw(char*){
172 for(i = 0; i < (int)(prop3Dvect.size());i++){
173 if(prop3Dvect[i]->getId() == id){
174 return prop3Dvect[i];
177 throw "id not found in the data";
182 int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
184 return ((wxMaracasSurfaceRenderingManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
188 void wxMaracasSurfaceRenderingManager::changeColor(int propid, double red, double green, double blue) throw(char*){
190 this->getViewData(propid)->changeColor(red, green, blue);
195 void wxMaracasSurfaceRenderingManager::deleteActor(int propid) throw (char *){
198 this->addRemoveActor(propid, false);
202 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
203 if(prop3Dvect[i]->getId() == propid){
209 wxMaracasSurfaceRenderingManagerData* data = prop3Dvect[n];
211 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
212 prop3Dvect[j] = prop3Dvect[j+1];
215 prop3Dvect.pop_back();
218 throw "id not found in the data";
222 void wxMaracasSurfaceRenderingManager::Transform(vtkMatrix4x4* tmatrix){