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 }
00040 int wxMaracasMultipleVolumeRendererManager::addVolume(vtkImageData* vol, std::string dataname) throw(char*){
00041 checkInvariant();
00042 if(vol != NULL){
00043 wxMaracasMultipleVolumeRendererManagerData* data = new wxMaracasMultipleVolumeRendererManagerData(vol, 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 mhd imagefile file or input";
00051 }
00052 return -1;
00053 }
00058 void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool addremove) throw(char*){
00059 checkInvariant();
00060
00061 wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(propid);
00062 if(data->getProp3D()!=NULL){
00063 if(addremove){
00064 _renderer->AddViewProp(data->getProp3D());
00065 }else{
00066 _renderer->RemoveViewProp(data->getProp3D());
00067 }
00068 _renderer->Render();
00069 }
00070
00071 }
00075 void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::vector<double> greylevel,std::vector<double> value) throw(char*){
00076 checkInvariant();
00077
00078 this->getViewData(propid)->setVolumeOpacity(greylevel, value);
00079
00080 _renderer->Render();
00081
00082 }
00083
00087 void wxMaracasMultipleVolumeRendererManager::setVolumeColor(int volid, std::vector<double> greylevel,
00088 std::vector<double> red,
00089 std::vector<double> green,
00090 std::vector<double> blue)
00091 {
00092 checkInvariant();
00093
00094 this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue);
00095
00096 _renderer->Render();
00097 }
00098
00099 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(std::string filename){
00100 if(filename.compare("")!= 0){
00101
00102 vtkMetaImageReader* reader = vtkMetaImageReader::New();
00103 reader->SetFileName(filename.c_str());
00104 reader->Update();
00105 vtkImageData* img = reader->GetOutput();
00106
00107 vtkImageCast* cast = vtkImageCast::New();
00108 cast->SetInput(img);
00109 cast->SetOutputScalarTypeToUnsignedShort();
00110 cast->Update();
00111
00112
00113 return cast->GetOutput();
00114
00115 }
00116 return NULL;
00117 }
00118
00119 void wxMaracasMultipleVolumeRendererManager::checkInvariant() throw(char*){
00120 if(this->_renderer==NULL){
00121 throw "Renderer not set";
00122 }
00123 }
00124
00125 wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManager::getViewData(int id) throw(char*){
00126 int i;
00127 for(i = 0; i < (int)(prop3Dvect.size());i++){
00128 if(prop3Dvect[i]->getId() == id){
00129 return prop3Dvect[i];
00130 }
00131 }
00132 throw "id not found in the data";
00133
00134 return NULL;
00135 }
00136
00137 void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char *){
00138 checkInvariant();
00139
00140 this->addRemoveActor(propid, false);
00141
00142 int i,n;
00143 bool exit = false;
00144 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
00145 if(prop3Dvect[i]->getId() == propid){
00146 n=i;
00147 exit = true;
00148 }
00149 }
00150 if(exit){
00151 wxMaracasMultipleVolumeRendererManagerData* data = prop3Dvect[n];
00152 int j;
00153 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
00154 prop3Dvect[j] = prop3Dvect[j+1];
00155 }
00156 delete data;
00157 prop3Dvect.pop_back();
00158 }else{
00159 throw "id not found in the data";
00160 }
00161
00162 }
00163
00164 vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererManager::GetTransferFunction(int volumeid){
00165 return getViewData(volumeid)->GetTransferFunction();
00166 }
00167 vtkColorTransferFunction* wxMaracasMultipleVolumeRendererManager::GetColorFunction(int volumeid){
00168
00169 return getViewData(volumeid)->GetColorFunction();
00170 }