1 /*=========================================================================
4 Module: $RCSfile: wxMaracasSurfaceRenderingManager.cxx,v $
6 Date: $Date: 2010/01/21 13:54:15 $
7 Version: $Revision: 1.7 $
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(){
28 wxMaracasSurfaceRenderingManager::~wxMaracasSurfaceRenderingManager(){
32 ** Sets the renderer to manage the prop3D from the surface render
34 void wxMaracasSurfaceRenderingManager::setRenderer(vtkRenderer* renderer){
39 ** Sets the renderer to manage the prop3D from the surface render
41 void wxMaracasSurfaceRenderingManager::setInteractor(vtkRenderWindowInteractor* interactor){
42 _interactor = interactor;
47 ** Gets the renderer to manage the prop3D from the surface render
49 vtkRenderer* wxMaracasSurfaceRenderingManager::getRenderer(){
56 void wxMaracasSurfaceRenderingManager::Update(int pid)throw(char*){
57 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(pid);
58 ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->UpdateSurface();
63 ** Adds a prop3D to the manager and returns the identifier
65 int wxMaracasSurfaceRenderingManager::addProp3D(int idTP, vtkProp3D* prop3D, std::string dataname) throw(char*){
68 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(prop3D, dataname, _interactor);
69 prop3Dvect.push_back(data);
70 _renderer->AddActor(data->getProp3D());
73 data->setId(_idCount);
82 throw "Check vtkProp3D file or input";
86 int wxMaracasSurfaceRenderingManager::addPropMHD(int idTP, vtkImageData* imagedata, std::string dataname) throw(char*){
88 if(imagedata != NULL){
90 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname, _interactor);
91 prop3Dvect.push_back(data);
92 _renderer->AddActor(data->getProp3D());
95 data->setId(_idCount);
102 printf("wxMaracasSurfaceRenderingManager::addPropMHD->idSurfaceRender: %i\n", data->getId());
103 return data->getId();
105 throw "Check ImageData file or input";
110 ** adds or removes an actor depending of the bool value
112 void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove) throw(char*){
115 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
116 if(data->getProp3D()!=NULL){
118 _renderer->AddViewProp(data->getProp3D());
120 _renderer->RemoveViewProp(data->getProp3D());
126 ** adds or removes the surface box depending of the bool value
128 void wxMaracasSurfaceRenderingManager::addRemoveSurfaceBox(int propid, bool addremove) throw(char*){
131 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
132 if(data->getProp3D()!=NULL){
133 data->addRemoveSurfaceBox(addremove);
136 _renderer->AddViewProp(data->getProp3D());
138 _renderer->RemoveViewProp(data->getProp3D());
140 _renderer->Render();*/
146 ** Changes the opacity in a prop3D
148 void wxMaracasSurfaceRenderingManager::changeOpacity(int propid, int value) throw(char*){
152 this->getViewData(propid)->changeOpacity(value);
159 ** changes the isovalue in a prop3D
161 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double value )throw(char*){
164 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
166 //_renderer->RemoveActor(data->getProp3D());
167 ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(value);
168 //_renderer->AddActor(data->getProp3D());
173 vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
174 if(filename.compare("")!= 0){
175 vtkSTLReader *STLReader=vtkSTLReader::New();
176 STLReader->SetFileName(filename.c_str());
178 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
179 dataMapper->SetInput(STLReader->GetOutput());
181 vtkActor* dataActor = vtkActor::New();
182 dataActor->SetMapper(dataMapper);
183 dataActor->GetProperty()->SetOpacity(1);
190 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(std::string filename){
191 if(filename.compare("")!= 0){
193 vtkMetaImageReader* reader = vtkMetaImageReader::New();
194 reader->SetFileName(filename.c_str());
196 vtkImageData* img = reader->GetOutput();
203 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(){
207 void wxMaracasSurfaceRenderingManager::checkInvariant() throw(char*){
208 if(this->_renderer==NULL){
209 throw "Renderer not set";
213 wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::getViewData(int id) throw(char*){
215 for(i = 0; i < (int)(prop3Dvect.size());i++){
216 if(prop3Dvect[i]->getId() == id){
217 return prop3Dvect[i];
220 throw "id not found in the data";
225 int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
227 return ((wxMaracasSurfaceRenderingManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
231 void wxMaracasSurfaceRenderingManager::changeColor(int propid, double red, double green, double blue) throw(char*){
233 this->getViewData(propid)->changeColor(red, green, blue);
238 void wxMaracasSurfaceRenderingManager::deleteActor(int propid) throw (char *){
241 this->addRemoveActor(propid, false);
245 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
246 if(prop3Dvect[i]->getId() == propid){
252 wxMaracasSurfaceRenderingManagerData* data = prop3Dvect[n];
254 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
255 prop3Dvect[j] = prop3Dvect[j+1];
258 prop3Dvect.pop_back();
261 throw "id not found in the data";
265 void wxMaracasSurfaceRenderingManager::Transform(vtkMatrix4x4* tmatrix){
269 bool wxMaracasSurfaceRenderingManager::interactorSet(){
270 return _interactor? true:false;