1 /*=========================================================================
4 Module: $RCSfile: wxMaracasSurfaceRenderingManager.cxx,v $
6 Date: $Date: 2011/10/05 16:26:55 $
7 Version: $Revision: 1.2 $
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 #include "vtkPLYReader.h"
22 #include "vtkSmartPointer.h"
25 ** Start of the manager class
27 wxMaracasSurfaceRenderingManager::wxMaracasSurfaceRenderingManager(){
32 wxMaracasSurfaceRenderingManager::~wxMaracasSurfaceRenderingManager(){
36 ** Sets the renderer to manage the prop3D from the surface render
38 void wxMaracasSurfaceRenderingManager::setRenderer(vtkRenderer* renderer){
43 ** Sets the renderer to manage the prop3D from the surface render
45 void wxMaracasSurfaceRenderingManager::setInteractor(vtkRenderWindowInteractor* interactor){
46 _interactor = interactor;
51 ** Gets the renderer to manage the prop3D from the surface render
53 vtkRenderer* wxMaracasSurfaceRenderingManager::getRenderer(){
60 void wxMaracasSurfaceRenderingManager::Update(int pid)throw(char*){
61 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(pid);
62 ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->UpdateSurface();
67 ** Adds a prop3D to the manager and returns the identifier
69 int wxMaracasSurfaceRenderingManager::addProp3D(int idTP, vtkProp3D* prop3D, std::string dataname) throw(char*){
72 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(prop3D, dataname, _interactor);
73 prop3Dvect.push_back(data);
74 _renderer->AddActor(data->getProp3D());
77 data->setId(_idCount);
86 throw "Check vtkProp3D file or input";
90 int wxMaracasSurfaceRenderingManager::addPropMHD(int idTP, vtkImageData* imagedata, std::string dataname) throw(char*){
92 if(imagedata != NULL){
94 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname, _interactor);
95 prop3Dvect.push_back(data);
96 _renderer->AddActor(data->getProp3D());
99 data->setId(_idCount);
106 printf("wxMaracasSurfaceRenderingManager::addPropMHD->idSurfaceRender: %i\n", data->getId());
107 return data->getId();
109 throw "Check ImageData file or input";
114 ** adds or removes an actor depending of the bool value
116 void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove) throw(char*){
119 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
120 if(data && data->getProp3D()!=NULL){
122 _renderer->AddViewProp(data->getProp3D());
124 _renderer->RemoveViewProp(data->getProp3D());
128 if(addremove && propid == 0 && image){
129 addPropMHD(0, image, "id0");
135 ** adds or removes the surface box depending of the bool value
137 void wxMaracasSurfaceRenderingManager::addRemoveSurfaceBox(int propid, bool addremove) throw(char*){
140 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
141 if(data->getProp3D()!=NULL){
142 data->addRemoveSurfaceBox(addremove);
145 _renderer->AddViewProp(data->getProp3D());
147 _renderer->RemoveViewProp(data->getProp3D());
149 _renderer->Render();*/
155 ** Changes the opacity in a prop3D
157 void wxMaracasSurfaceRenderingManager::changeOpacity(int propid, int value) throw(char*){
161 this->getViewData(propid)->changeOpacity(value);
168 ** changes the isovalue in a prop3D
170 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double value ){
173 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
175 //_renderer->RemoveActor(data->getProp3D());
176 ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(value);
177 //_renderer->AddActor(data->getProp3D());
183 ** changes the isovalue in a prop3D
185 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double min, double max ){
188 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
190 //_renderer->RemoveActor(data->getProp3D());
191 ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(min, max);
192 //_renderer->AddActor(data->getProp3D());
197 vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
198 if(filename.compare("")!= 0){
200 vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
201 std::string ext = filename.substr(filename.find_last_of("."), 4);
202 if(ext.compare(STL)==0){
203 vtkSmartPointer<vtkSTLReader> STLReader=vtkSmartPointer<vtkSTLReader>::New();
204 STLReader->SetFileName(filename.c_str());
206 polydata->DeepCopy(STLReader->GetOutput());
208 }else if(ext.compare(PLY)==0){
209 vtkSmartPointer<vtkPLYReader> plyreader =vtkSmartPointer<vtkPLYReader>::New();
210 plyreader->SetFileName(filename.c_str());
212 polydata->DeepCopy(plyreader->GetOutput());
215 vtkSmartPointer<vtkPolyDataMapper> dataMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
216 dataMapper->SetInput(polydata);
218 vtkActor* dataActor = vtkActor::New();
219 dataActor->SetMapper(dataMapper);
220 dataActor->GetProperty()->SetOpacity(1);
226 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(std::string filename){
227 if(filename.compare("")!= 0){
229 vtkMetaImageReader* reader = vtkMetaImageReader::New();
230 reader->SetFileName(filename.c_str());
232 vtkImageData* img = reader->GetOutput();
239 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(){
243 void wxMaracasSurfaceRenderingManager::setImageData(vtkImageData* img){
247 void wxMaracasSurfaceRenderingManager::checkInvariant() throw(char*){
248 if(this->_renderer==NULL){
249 throw "Renderer not set";
253 wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::getViewData(int id) throw(char*){
255 for(i = 0; i < (int)(prop3Dvect.size());i++){
256 if(prop3Dvect[i]->getId() == id){
257 return prop3Dvect[i];
262 throw "id not found in the data";
270 int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
272 return ((wxMaracasSurfaceRenderingManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
276 void wxMaracasSurfaceRenderingManager::changeColor(int propid, double red, double green, double blue) throw(char*){
278 this->getViewData(propid)->changeColor(red, green, blue);
283 void wxMaracasSurfaceRenderingManager::deleteActor(int propid) throw (char *){
286 this->addRemoveActor(propid, false);
290 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
291 if(prop3Dvect[i]->getId() == propid){
297 wxMaracasSurfaceRenderingManagerData* data = prop3Dvect[n];
299 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
300 prop3Dvect[j] = prop3Dvect[j+1];
303 prop3Dvect.pop_back();
306 throw "id not found in the data";
312 void wxMaracasSurfaceRenderingManager::enableBoundingBox(int propid, bool enable){
315 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
318 data->enableBoxWidget(enable);
320 void wxMaracasSurfaceRenderingManager::Transform(vtkMatrix4x4* tmatrix){
324 bool wxMaracasSurfaceRenderingManager::interactorSet(){
325 return _interactor? true:false;
328 void wxMaracasSurfaceRenderingManager::saveProp3DSTL(int propid,const char* filename){
331 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
332 if(data->getProp3D()!=NULL){
333 data->saveProp3DSTL(filename);
337 void wxMaracasSurfaceRenderingManager::loadProp3DSTL(const char* filename){
338 this->addProp3D(-1, this->getProp3D(filename), filename);