00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "wxMaracasMultipleVolumeRendererView.h"
00023
00024
00025 #include <wx/colordlg.h>
00026 #include <wx/bmpbuttn.h>
00027
00028 #include <OpenImage.xpm>
00029 #include <Color.xpm>
00030
00031 wxMaracasMultipleVolumeRendererView* wxMaracasMultipleVolumeRendererView::instance=NULL;
00032
00033 wxMaracasMultipleVolumeRendererView::wxMaracasMultipleVolumeRendererView( wxWindow* parent,std::string path)
00034 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
00035
00036 wxauimanager = new wxAuiManager(this);
00037
00038 _path = path;
00039
00040 volmanager = new wxMaracasMultipleVolumeRendererManager();
00041 std::string iconsdir = path;
00042 iconsdir+="/data/Icons";
00043 this->_toolb = new ToolBarMultipleVolumeRenderer(this,iconsdir);
00044 wxAuiPaneInfo paneinfo;
00045 wxauimanager->AddPane(_toolb,paneinfo.ToolbarPane().Top());
00046
00047 wxauimanager->Update();
00048
00049 }
00050 wxMaracasMultipleVolumeRendererView::~wxMaracasMultipleVolumeRendererView( ){
00051
00052 delete _toolb;
00053
00054 }
00055
00056 std::string wxMaracasMultipleVolumeRendererView::getPath(){
00057 return _path;
00058 }
00059
00060 wxMaracasMultipleVolumeRendererView* wxMaracasMultipleVolumeRendererView::getInstance(wxWindow* parent,std::string path){
00061 if(instance==NULL){
00062 instance = new wxMaracasMultipleVolumeRendererView(parent,path);
00063 }
00064 return instance;
00065 }
00066
00067 wxMaracasMultipleVolumeRendererView* wxMaracasMultipleVolumeRendererView::getInstance(){
00068 return instance;
00069 }
00070
00071 void wxMaracasMultipleVolumeRendererView::setRenderer(vtkRenderer* renderer){
00072 volmanager->setRenderer(renderer);
00073 }
00074
00075 void wxMaracasMultipleVolumeRendererView::addRemoveActor(int id, bool addremove){
00076 volmanager->addRemoveActor(id, addremove);
00077 }
00078
00079 void wxMaracasMultipleVolumeRendererView::onLoadImageFile(){
00080
00081 wxString mhd(_T("mhd"));
00082
00083 wxFileDialog* fildial = new wxFileDialog(this, wxString(_T("Select a MHD file")),wxString(_T("")),
00084 wxString(_T("")),wxString(_T("MHD files (*.mhd)|*.mhd")) );
00085
00086 if(fildial->ShowModal()==wxID_OK){
00087 wxString filename = fildial->GetFilename();
00088 wxString pathfile(fildial->GetDirectory() + _T("/") + filename);
00089 if(filename.EndsWith(mhd)){
00090 loadVolume(pathfile,filename);
00091 }
00092 }
00093 delete fildial;
00094
00095 }
00096
00097 void wxMaracasMultipleVolumeRendererView::addVolumeViewPanel(wxMaracasMultipleVolumeRendererPanel* irmview, std::string dataname){
00098
00099 wxString s(dataname.c_str(),wxConvUTF8 );
00100 wxAuiPaneInfo paneinfo;
00101 wxauimanager->AddPane(irmview, paneinfo.DefaultPane().Centre().DestroyOnClose().Caption(s));
00102 wxauimanager->Update();
00103
00104
00105 }
00106
00107 void wxMaracasMultipleVolumeRendererView::addVolume(vtkImageData* img, std::string dataname){
00108
00109 try{
00110 int id = volmanager->addVolume(img,dataname);
00111 if(id!=-1){
00112 wxMaracasMultipleVolumeRendererPanel* controlpan = new wxMaracasMultipleVolumeRendererPanel(this, id,img);
00113 addVolumeViewPanel(controlpan, dataname);
00114 controlpan->updateVolume();
00115 }
00116 }catch(char* str){
00117 std::cout << "Exception : " << str << '\n';
00118 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
00119 diag->ShowModal();
00120 }
00121 }
00122
00123 void wxMaracasMultipleVolumeRendererView::loadVolume(wxString filename, wxString dataname){
00124
00125 std::string s = std::string(filename.mb_str());
00126 vtkImageData* img = volmanager->getImageData(s);
00127 if(img!=NULL){
00128 s = std::string(dataname.mb_str());
00129 addVolume(img, s);
00130 }
00131
00132 }
00133
00134 void wxMaracasMultipleVolumeRendererView::deleteVolume(int volid){
00135 volmanager->deleteActor(volid);
00136 }
00137
00138 void wxMaracasMultipleVolumeRendererView::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue){
00139 volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
00140 }
00141 void wxMaracasMultipleVolumeRendererView::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values){
00142 volmanager->setVolumeOpacity(volid, greylevel, values);
00143 }
00144
00145 vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererView::GetTransferFunction(int volumeid){
00146 return volmanager->GetTransferFunction(volumeid);
00147 }
00148 vtkColorTransferFunction* wxMaracasMultipleVolumeRendererView::GetColorFunction(int volumeid){
00149 return volmanager->GetColorFunction(volumeid);
00150 }
00155 ToolBarMultipleVolumeRenderer::ToolBarMultipleVolumeRenderer(wxWindow * parent,std::string iconsdir)
00156 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
00157 {
00158
00159
00160 std::string iconfil = iconsdir;
00161
00162
00163
00164 wxBitmap bitmap0(OpenImage_xpm);
00165 this->AddTool(1, wxString(_T("test")),bitmap0);
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176 this->Realize();
00177
00178 _evthand = new ToolBarEventHandlerMultipleVolumeRenderer();
00179 this->SetEventHandler(_evthand);
00180
00181 }
00182
00183 ToolBarMultipleVolumeRenderer::~ToolBarMultipleVolumeRenderer(void){
00184 }
00185
00186 ToolBarEventHandlerMultipleVolumeRenderer::ToolBarEventHandlerMultipleVolumeRenderer()
00187 : wxEvtHandler(){
00188 }
00189 ToolBarEventHandlerMultipleVolumeRenderer::~ToolBarEventHandlerMultipleVolumeRenderer(){
00190 }
00191
00192 void ToolBarEventHandlerMultipleVolumeRenderer::onLoadImageFile(wxCommandEvent& event){
00193 wxMaracasMultipleVolumeRendererView::getInstance()->onLoadImageFile();
00194 }
00195
00196
00197
00198 BEGIN_EVENT_TABLE(ToolBarEventHandlerMultipleVolumeRenderer, wxEvtHandler)
00199 EVT_MENU(1, ToolBarEventHandlerMultipleVolumeRenderer::onLoadImageFile)
00200 END_EVENT_TABLE()
00201
00202