00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "wxMaracasIRMViewManager.h"
00018
00019 #include "wxMaracasIRMViewManagerDataMhd.h"
00020
00024 wxMaracasIRMViewManager::wxMaracasIRMViewManager(){
00025 _renderer = NULL;
00026 _idCount=0;
00027 }
00028 wxMaracasIRMViewManager::~wxMaracasIRMViewManager(){
00029 }
00030
00034 void wxMaracasIRMViewManager::setRenderer(vtkRenderer* renderer){
00035 _renderer = renderer;
00036 }
00040 int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D, std::string dataname) throw(char*){
00041 checkInvariant();
00042 if(prop3D != NULL){
00043 wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerData(prop3D, dataname);
00044 prop3Dvect.push_back(data);
00045 _renderer->AddActor(data->getProp3D());
00046 data->setId(_idCount);
00047 _idCount++;
00048 return data->getId();
00049 }else{
00050 throw "Check vtkProp3D file or input";
00051 }
00052 return -1;
00053 }
00054 int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){
00055
00056 checkInvariant();
00057 if(imagedata != NULL){
00058 wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerDataMhd(imagedata, dataname);
00059 prop3Dvect.push_back(data);
00060 _renderer->AddActor(data->getProp3D());
00061 data->setId(_idCount);
00062 _idCount++;
00063 return data->getId();
00064 }else{
00065 throw "Check ImageData file or input";
00066 }
00067 return -1;
00068
00069 }
00073 void wxMaracasIRMViewManager::addRemoveActor(int propid, bool addremove) throw(char*){
00074 checkInvariant();
00075
00076 wxMaracasIRMViewManagerData* data = this->getViewData(propid);
00077 if(data->getProp3D()!=NULL){
00078 if(addremove){
00079 _renderer->AddViewProp(data->getProp3D());
00080 }else{
00081 _renderer->RemoveViewProp(data->getProp3D());
00082 }
00083 _renderer->Render();
00084 }
00085
00086 }
00090 void wxMaracasIRMViewManager::changeOpacity(int propid, int value) throw(char*){
00091 checkInvariant();
00092
00093
00094 this->getViewData(propid)->changeOpacity(value);
00095
00096 _renderer->Render();
00097
00098 }
00099
00103 void wxMaracasIRMViewManager::changeIsoValue(int propid, double value )throw(char*){
00104 checkInvariant();
00105
00106 wxMaracasIRMViewManagerData* data = this->getViewData(propid);
00107
00108
00109 ((wxMaracasIRMViewManagerDataMhd*)data)->changeIsoValue(value);
00110
00111
00112 _renderer->Render();
00113 }
00114
00115 vtkProp3D* wxMaracasIRMViewManager:: getProp3D(std::string filename){
00116 if(filename.compare("")!= 0){
00117 vtkSTLReader *STLReader=vtkSTLReader::New();
00118 STLReader->SetFileName(filename.c_str());
00119 STLReader->Update();
00120 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
00121 dataMapper->SetInput(STLReader->GetOutput());
00122
00123 vtkActor* dataActor = vtkActor::New();
00124 dataActor->SetMapper(dataMapper);
00125 dataActor->GetProperty()->SetOpacity(1);
00126
00127 return dataActor;
00128 }
00129 return NULL;
00130 }
00131
00132 vtkImageData* wxMaracasIRMViewManager::getImageData(std::string filename){
00133 if(filename.compare("")!= 0){
00134
00135
00136 vtkMetaImageReader* reader = vtkMetaImageReader::New();
00137 reader->SetFileName(filename.c_str());
00138 reader->Update();
00139 vtkImageData* img = reader->GetOutput();
00140
00141 return img;
00142 }
00143 return NULL;
00144 }
00145
00146 void wxMaracasIRMViewManager::checkInvariant() throw(char*){
00147 if(this->_renderer==NULL){
00148 throw "Renderer not set";
00149 }
00150 }
00151
00152 wxMaracasIRMViewManagerData* wxMaracasIRMViewManager::getViewData(int id) throw(char*){
00153 int i;
00154 for(i = 0; i < (int)(prop3Dvect.size());i++){
00155 if(prop3Dvect[i]->getId() == id){
00156 return prop3Dvect[i];
00157 }
00158 }
00159 throw "id not found in the data";
00160
00161 return NULL;
00162 }
00163
00164 int wxMaracasIRMViewManager::getMaxIsoValue(int propid) throw(char*){
00165
00166 return ((wxMaracasIRMViewManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
00167
00168 }
00169
00170 void wxMaracasIRMViewManager::changeColor(int propid, double red, double green, double blue) throw(char*){
00171 checkInvariant();
00172 this->getViewData(propid)->changeColor(red, green, blue);
00173
00174 _renderer->Render();
00175 }
00176
00177 void wxMaracasIRMViewManager::deleteActor(int propid) throw (char *){
00178 checkInvariant();
00179
00180 this->addRemoveActor(propid, false);
00181
00182 int i,n;
00183 bool exit = false;
00184 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
00185 if(prop3Dvect[i]->getId() == propid){
00186 n=i;
00187 exit = true;
00188 }
00189 }
00190 if(exit){
00191 wxMaracasIRMViewManagerData* data = prop3Dvect[n];
00192 int j;
00193 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
00194 prop3Dvect[j] = prop3Dvect[j+1];
00195 }
00196 delete data;
00197 prop3Dvect.pop_back();
00198 }else{
00199 throw "id not found in the data";
00200 }
00201
00202
00203
00204
00205 }
00206
00207