wxMaracasSurfaceRenderingManager.cxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "wxMaracasSurfaceRenderingManager.h"
00018 #include "wxMaracasSurfaceRenderingManagerDataMhd.h"
00019
00023 wxMaracasSurfaceRenderingManager::wxMaracasSurfaceRenderingManager(){
00024 _renderer = NULL;
00025 _interactor = NULL;
00026 _idCount=0;
00027 }
00028 wxMaracasSurfaceRenderingManager::~wxMaracasSurfaceRenderingManager(){
00029 }
00030
00034 void wxMaracasSurfaceRenderingManager::setRenderer(vtkRenderer* renderer){
00035 _renderer = renderer;
00036 }
00037
00041 void wxMaracasSurfaceRenderingManager::setInteractor(vtkRenderWindowInteractor* interactor){
00042 _interactor = interactor;
00043 }
00044
00045
00049 vtkRenderer* wxMaracasSurfaceRenderingManager::getRenderer(){
00050 return _renderer;
00051 }
00052
00056 void wxMaracasSurfaceRenderingManager::Update(int pid)throw(char*){
00057 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(pid);
00058 ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->UpdateSurface();
00059 _renderer->Render();
00060 }
00061
00065 int wxMaracasSurfaceRenderingManager::addProp3D(int idTP, vtkProp3D* prop3D, std::string dataname) throw(char*){
00066 checkInvariant();
00067 if(prop3D != NULL){
00068 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(prop3D, dataname, _interactor);
00069 prop3Dvect.push_back(data);
00070 _renderer->AddActor(data->getProp3D());
00071 if(idTP == -1)
00072 {
00073 data->setId(_idCount);
00074 _idCount++;
00075 }
00076 else
00077 {
00078 data->setId(idTP);
00079 }
00080 return data->getId();
00081 }else{
00082 throw "Check vtkProp3D file or input";
00083 }
00084 return -1;
00085 }
00086 int wxMaracasSurfaceRenderingManager::addPropMHD(int idTP, vtkImageData* imagedata, std::string dataname) throw(char*){
00087 checkInvariant();
00088 if(imagedata != NULL){
00089 image = imagedata;
00090 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname, _interactor);
00091 prop3Dvect.push_back(data);
00092 _renderer->AddActor(data->getProp3D());
00093 if(idTP == -1)
00094 {
00095 data->setId(_idCount);
00096 _idCount++;
00097 }
00098 else
00099 {
00100 data->setId(idTP);
00101 }
00102 printf("wxMaracasSurfaceRenderingManager::addPropMHD->idSurfaceRender: %i\n", data->getId());
00103 return data->getId();
00104 }else{
00105 throw "Check ImageData file or input";
00106 }
00107 return -1;
00108 }
00112 void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove) throw(char*){
00113 checkInvariant();
00114
00115 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
00116 if(data->getProp3D()!=NULL){
00117 if(addremove){
00118 _renderer->AddViewProp(data->getProp3D());
00119 }else{
00120 _renderer->RemoveViewProp(data->getProp3D());
00121 }
00122 _renderer->Render();
00123 }
00124 }
00128 void wxMaracasSurfaceRenderingManager::addRemoveSurfaceBox(int propid, bool addremove) throw(char*){
00129 checkInvariant();
00130
00131 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
00132 if(data->getProp3D()!=NULL){
00133 data->addRemoveSurfaceBox(addremove);
00134
00135
00136
00137
00138
00139
00140
00141 }
00142
00143 }
00144
00148 void wxMaracasSurfaceRenderingManager::changeOpacity(int propid, int value) throw(char*){
00149 checkInvariant();
00150
00151
00152 this->getViewData(propid)->changeOpacity(value);
00153
00154 _renderer->Render();
00155
00156 }
00157
00161 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double value )throw(char*){
00162 checkInvariant();
00163
00164 wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
00165
00166
00167 ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(value);
00168
00169
00170 _renderer->Render();
00171 }
00172
00173 vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
00174 if(filename.compare("")!= 0){
00175 vtkSTLReader *STLReader=vtkSTLReader::New();
00176 STLReader->SetFileName(filename.c_str());
00177 STLReader->Update();
00178 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
00179 dataMapper->SetInput(STLReader->GetOutput());
00180
00181 vtkActor* dataActor = vtkActor::New();
00182 dataActor->SetMapper(dataMapper);
00183 dataActor->GetProperty()->SetOpacity(1);
00184
00185 return dataActor;
00186 }
00187 return NULL;
00188 }
00189
00190 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(std::string filename){
00191 if(filename.compare("")!= 0){
00192
00193 vtkMetaImageReader* reader = vtkMetaImageReader::New();
00194 reader->SetFileName(filename.c_str());
00195 reader->Update();
00196 vtkImageData* img = reader->GetOutput();
00197
00198 return img;
00199 }
00200 return NULL;
00201 }
00202
00203 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(){
00204 return image;
00205 }
00206
00207 void wxMaracasSurfaceRenderingManager::checkInvariant() throw(char*){
00208 if(this->_renderer==NULL){
00209 throw "Renderer not set";
00210 }
00211 }
00212
00213 wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::getViewData(int id) throw(char*){
00214 int i;
00215 for(i = 0; i < (int)(prop3Dvect.size());i++){
00216 if(prop3Dvect[i]->getId() == id){
00217 return prop3Dvect[i];
00218 }
00219 }
00220 throw "id not found in the data";
00221
00222 return NULL;
00223 }
00224
00225 int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
00226
00227 return ((wxMaracasSurfaceRenderingManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
00228
00229 }
00230
00231 void wxMaracasSurfaceRenderingManager::changeColor(int propid, double red, double green, double blue) throw(char*){
00232 checkInvariant();
00233 this->getViewData(propid)->changeColor(red, green, blue);
00234
00235 _renderer->Render();
00236 }
00237
00238 void wxMaracasSurfaceRenderingManager::deleteActor(int propid) throw (char *){
00239 checkInvariant();
00240
00241 this->addRemoveActor(propid, false);
00242
00243 int i,n;
00244 bool exit = false;
00245 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
00246 if(prop3Dvect[i]->getId() == propid){
00247 n=i;
00248 exit = true;
00249 }
00250 }
00251 if(exit){
00252 wxMaracasSurfaceRenderingManagerData* data = prop3Dvect[n];
00253 int j;
00254 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
00255 prop3Dvect[j] = prop3Dvect[j+1];
00256 }
00257 delete data;
00258 prop3Dvect.pop_back();
00259 }else{
00260
00261 throw "id not found in the data";
00262 }
00263 }
00264
00265 void wxMaracasSurfaceRenderingManager::Transform(vtkMatrix4x4* tmatrix){
00266
00267 }
00268
00269 bool wxMaracasSurfaceRenderingManager::interactorSet(){
00270 return _interactor? true:false;
00271 }