wxMaracasMultipleVolumeRendererManager.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 "wxMaracasMultipleVolumeRendererManager.h"
00018
00019 #include <vtkMetaImageReader.h>
00020 #include <vtkImageCast.h>
00024 wxMaracasMultipleVolumeRendererManager::wxMaracasMultipleVolumeRendererManager(){
00025 _renderer = NULL;
00026 _idCount=0;
00027 }
00028 wxMaracasMultipleVolumeRendererManager::~wxMaracasMultipleVolumeRendererManager(){
00029 }
00030
00034 void wxMaracasMultipleVolumeRendererManager::setRenderer(vtkRenderer* renderer){
00035 _renderer = renderer;
00036 }
00037
00041 vtkRenderer* wxMaracasMultipleVolumeRendererManager::getRenderer(){
00042 return _renderer;
00043 }
00044
00048 void wxMaracasMultipleVolumeRendererManager::Update(int ppid){
00049 wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(ppid);
00050 data->Update();
00051 _renderer->Render();
00052 }
00053
00057 int wxMaracasMultipleVolumeRendererManager::addVolume(int idTP, vtkImageData* vol, std::string dataname) throw(char*){
00058 checkInvariant();
00059 image = vol;
00060 if(vol != NULL){
00061 wxMaracasMultipleVolumeRendererManagerData* data = new wxMaracasMultipleVolumeRendererManagerData(vol, dataname);
00062 prop3Dvect.push_back(data);
00063 _renderer->AddActor(data->getProp3D());
00064 if(idTP == -1)
00065 {
00066 data->setId(_idCount);
00067 _idCount++;
00068 }
00069 else
00070 {
00071 data->setId(idTP);
00072 }
00073 printf("wxMaracasMultipleVolumeRendererManager::addVolume->idVolumeRenderer: %i\n", data->getId());
00074 return data->getId();
00075 }else{
00076 throw "Check mhd imagefile file or input";
00077 }
00078 return -1;
00079 }
00084 void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool addremove) throw(char*){
00085 checkInvariant();
00086
00087 wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(propid);
00088 if(data->getProp3D()!=NULL){
00089 if(addremove){
00090 _renderer->AddViewProp(data->getProp3D());
00091 }else{
00092 _renderer->RemoveViewProp(data->getProp3D());
00093 }
00094 _renderer->Render();
00095 }
00096
00097 }
00101 void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::vector<double> greylevel,std::vector<double> value) throw(char*){
00102 checkInvariant();
00103
00104 this->getViewData(propid)->setVolumeOpacity(greylevel, value);
00105
00106 _renderer->Render();
00107
00108 }
00109
00113 void wxMaracasMultipleVolumeRendererManager::setVolumeColor(int volid, std::vector<double> greylevel,
00114 std::vector<double> red,
00115 std::vector<double> green,
00116 std::vector<double> blue)throw(char*){
00117 checkInvariant();
00118
00119 this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue);
00120
00121 _renderer->Render();
00122 }
00123
00124 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(std::string filename){
00125 if(filename.compare("")!= 0){
00126
00127 vtkMetaImageReader* reader = vtkMetaImageReader::New();
00128 reader->SetFileName(filename.c_str());
00129 reader->Update();
00130 vtkImageData* img = reader->GetOutput();
00131
00132 vtkImageCast* cast = vtkImageCast::New();
00133 cast->SetInput(img);
00134 cast->SetOutputScalarTypeToUnsignedShort();
00135 cast->Update();
00136
00137
00138 return cast->GetOutput();
00139
00140 }
00141 return NULL;
00142 }
00143
00144 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(){
00145 return image;
00146 }
00147
00148 void wxMaracasMultipleVolumeRendererManager::checkInvariant() throw(char*){
00149 if(this->_renderer==NULL){
00150 throw "Renderer not set";
00151 }
00152 }
00153
00154 wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManager::getViewData(int id) throw(char*){
00155 int i;
00156 for(i = 0; i < (int)(prop3Dvect.size());i++){
00157 if(prop3Dvect[i]->getId() == id){
00158 return prop3Dvect[i];
00159 }
00160 }
00161 throw "id not found in the data";
00162
00163 return NULL;
00164 }
00165
00166 void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char *){
00167 checkInvariant();
00168
00169 this->addRemoveActor(propid, false);
00170
00171 int i,n;
00172 bool exit = false;
00173 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
00174 if(prop3Dvect[i]->getId() == propid){
00175 n=i;
00176 exit = true;
00177 }
00178 }
00179 if(exit){
00180 wxMaracasMultipleVolumeRendererManagerData* data = prop3Dvect[n];
00181 int j;
00182 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
00183 prop3Dvect[j] = prop3Dvect[j+1];
00184 }
00185 delete data;
00186 prop3Dvect.pop_back();
00187 }else{
00188 throw "id not found in the data";
00189 }
00190
00191 }
00192
00193 vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererManager::GetTransferFunction(int volumeid){
00194 return getViewData(volumeid)->GetTransferFunction();
00195 }
00196 vtkColorTransferFunction* wxMaracasMultipleVolumeRendererManager::GetColorFunction(int volumeid){
00197
00198 return getViewData(volumeid)->GetColorFunction();
00199 }
00200
00201 void wxMaracasMultipleVolumeRendererManager::changeCompositeMIPFunction(int id, int function) throw (char *){
00202 getViewData(id)->changeCompositeMIPFunction(function);
00203 }