1 /*=========================================================================
4 Module: $RCSfile: wxMaracasIRMViewManager.cxx,v $
6 Date: $Date: 2009/05/29 14:25:26 $
7 Version: $Revision: 1.6 $
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 "wxMaracasIRMViewManager.h"
19 #include "wxMaracasIRMViewManagerDataMhd.h"
22 ** Start of the manager class
24 wxMaracasIRMViewManager::wxMaracasIRMViewManager(){
28 wxMaracasIRMViewManager::~wxMaracasIRMViewManager(){
32 ** Sets the renderer to manage the prop3D from the view
34 void wxMaracasIRMViewManager::setRenderer(vtkRenderer* renderer){
38 ** Adds a prop3D to the manager and returns the identifier
40 int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D, std::string dataname) throw(char*){
43 wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerData(prop3D, dataname);
44 prop3Dvect.push_back(data);
45 _renderer->AddActor(data->getProp3D());
46 data->setId(_idCount);
50 throw "Check vtkProp3D file or input";
54 int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){
57 if(imagedata != NULL){
58 wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerDataMhd(imagedata, dataname);
59 prop3Dvect.push_back(data);
60 _renderer->AddActor(data->getProp3D());
61 data->setId(_idCount);
65 throw "Check ImageData file or input";
71 ** adds or removes an actor depending of the bool value
73 void wxMaracasIRMViewManager::addRemoveActor(int propid, bool addremove) throw(char*){
76 wxMaracasIRMViewManagerData* data = this->getViewData(propid);
77 if(data->getProp3D()!=NULL){
79 _renderer->AddViewProp(data->getProp3D());
81 _renderer->RemoveViewProp(data->getProp3D());
88 ** Changes the opacity in a prop3D
90 void wxMaracasIRMViewManager::changeOpacity(int propid, int value) throw(char*){
94 this->getViewData(propid)->changeOpacity(value);
101 ** changes the isovalue in a prop3D
103 void wxMaracasIRMViewManager::changeIsoValue(int propid, double value )throw(char*){
106 wxMaracasIRMViewManagerData* data = this->getViewData(propid);
108 //_renderer->RemoveActor(data->getProp3D());
109 ((wxMaracasIRMViewManagerDataMhd*)data)->changeIsoValue(value);
110 //_renderer->AddActor(data->getProp3D());
115 vtkProp3D* wxMaracasIRMViewManager:: getProp3D(std::string filename){
116 if(filename.compare("")!= 0){
117 vtkSTLReader *STLReader=vtkSTLReader::New();
118 STLReader->SetFileName(filename.c_str());
120 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
121 dataMapper->SetInput(STLReader->GetOutput());
123 vtkActor* dataActor = vtkActor::New();
124 dataActor->SetMapper(dataMapper);
125 dataActor->GetProperty()->SetOpacity(1);
132 vtkImageData* wxMaracasIRMViewManager::getImageData(std::string filename){
133 if(filename.compare("")!= 0){
136 vtkMetaImageReader* reader = vtkMetaImageReader::New();
137 reader->SetFileName(filename.c_str());
139 vtkImageData* img = reader->GetOutput();
146 void wxMaracasIRMViewManager::checkInvariant() throw(char*){
147 if(this->_renderer==NULL){
148 throw "Renderer not set";
152 wxMaracasIRMViewManagerData* wxMaracasIRMViewManager::getViewData(int id) throw(char*){
154 for(i = 0; i < (int)(prop3Dvect.size());i++){
155 if(prop3Dvect[i]->getId() == id){
156 return prop3Dvect[i];
159 throw "id not found in the data";
164 int wxMaracasIRMViewManager::getMaxIsoValue(int propid) throw(char*){
166 return ((wxMaracasIRMViewManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
170 void wxMaracasIRMViewManager::changeColor(int propid, double red, double green, double blue) throw(char*){
172 this->getViewData(propid)->changeColor(red, green, blue);
177 void wxMaracasIRMViewManager::deleteActor(int propid) throw (char *){
180 this->addRemoveActor(propid, false);
184 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
185 if(prop3Dvect[i]->getId() == propid){
191 wxMaracasIRMViewManagerData* data = prop3Dvect[n];
193 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
194 prop3Dvect[j] = prop3Dvect[j+1];
197 prop3Dvect.pop_back();
199 throw "id not found in the data";