]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererView.cxx
dc3ee24af95088b0b22099c955a05040fe8a3587
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasMultipleVolumeRendererView.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracasMultipleVolumeRendererView.cxx,v $
5   Language:  C++
6   Date:      $Date: 2009/11/20 17:09:05 $
7   Version:   $Revision: 1.9 $
8
9   Copyright: (c) 2002, 2003
10   License:
11
12      This software is distributed WITHOUT ANY WARRANTY; without even
13      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14      PURPOSE.  See the above copyright notice for more information.
15
16 =========================================================================*/
17
18
19
20 // EOF - wxMaracasMPR.cxx
21
22 #include "wxMaracasMultipleVolumeRendererView.h"
23
24
25 #include <wx/colordlg.h>
26 #include <wx/bmpbuttn.h>
27
28 #include <OpenImage.xpm>
29 #include <Color.xpm>
30
31 wxMaracasMultipleVolumeRendererView* wxMaracasMultipleVolumeRendererView::instance=NULL;
32
33 wxMaracasMultipleVolumeRendererView::wxMaracasMultipleVolumeRendererView( wxWindow* parent,std::string path)
34 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
35
36         wxauimanager = new wxAuiManager(this);
37
38         _path = path;
39
40         volmanager = new wxMaracasMultipleVolumeRendererManager();
41         std::string iconsdir = path;
42         iconsdir+="/data/Icons";
43         this->_toolb = new ToolBarMultipleVolumeRenderer(this,iconsdir);
44         wxStaticText* txt = new wxStaticText(this, -1, wxString(_T("  Volume Rendering  ")));
45         wxAuiPaneInfo paneinfo;
46         wxauimanager->AddPane(txt,paneinfo.ToolbarPane().Top());
47         wxauimanager->AddPane(_toolb,paneinfo.ToolbarPane().Top());
48
49         wxauimanager->Update(); 
50
51 }
52 wxMaracasMultipleVolumeRendererView::~wxMaracasMultipleVolumeRendererView( ){
53
54         delete _toolb;
55 }
56
57 std::string wxMaracasMultipleVolumeRendererView::getPath(){
58         return _path;
59 }
60
61 wxMaracasMultipleVolumeRendererView* wxMaracasMultipleVolumeRendererView::getInstance(wxWindow* parent,std::string path){
62         if(instance==NULL)
63 {
64                 instance = new wxMaracasMultipleVolumeRendererView(parent,path);
65         }
66         return instance;
67 }
68
69 wxMaracasMultipleVolumeRendererView* wxMaracasMultipleVolumeRendererView::getInstance(){
70         return instance;
71 }
72
73 void wxMaracasMultipleVolumeRendererView::changeCompositeMIPFunction(int id, int function){
74         try{
75                 volmanager->changeCompositeMIPFunction(id, function);
76         }
77         catch(char* str){
78                 std::cout << "Exception : " << str << '\n';
79                 wxMessageDialog* diag = new wxMessageDialog(this, wxString( str,wxConvUTF8 ), wxString( str,wxConvUTF8 ), wxICON_ERROR);
80                 diag->ShowModal();
81         }
82 }
83
84 void wxMaracasMultipleVolumeRendererView::setRenderer(vtkRenderer*  renderer){
85         volmanager->setRenderer(renderer);
86 }
87
88 void wxMaracasMultipleVolumeRendererView::addRemoveActor(int id, bool addremove){
89         try{
90                 volmanager->addRemoveActor(id, addremove);
91         }
92         catch(char* str){
93                 std::cout << "Exception : " << str << '\n';
94                 wxMessageDialog* diag = new wxMessageDialog(this, wxString( str,wxConvUTF8 ), wxString( str,wxConvUTF8 ), wxICON_ERROR);
95                 diag->ShowModal();
96         }
97         
98 }
99
100 void wxMaracasMultipleVolumeRendererView::onLoadImageFile(){
101
102         wxString mhd(_T("mhd"));        
103
104         wxFileDialog* fildial = new wxFileDialog(this, wxString(_T("Select a MHD file")),wxString(_T("")),
105                 wxString(_T("")),wxString(_T("MHD files (*.mhd)|*.mhd")) );
106
107         if(fildial->ShowModal()==wxID_OK){
108         wxString filename = fildial->GetFilename();
109                 wxString pathfile(fildial->GetDirectory() + _T("/") + filename);
110                 if(filename.EndsWith(mhd)){
111                         loadVolume(pathfile,filename);
112                 }
113         }
114         delete fildial;
115
116 }
117
118 void wxMaracasMultipleVolumeRendererView::addVolumeViewPanel(wxMaracasMultipleVolumeRendererPanel* irmview, std::string dataname){
119
120         wxString s(dataname.c_str(),wxConvUTF8 );
121         wxAuiPaneInfo paneinfo;
122         wxauimanager->AddPane(irmview, paneinfo.DefaultPane().Centre().DestroyOnClose().Caption(s));
123         wxauimanager->Update();
124 }
125         
126 void wxMaracasMultipleVolumeRendererView::addVolume(vtkImageData* img, std::string dataname){
127
128         try{
129                 int id = volmanager->addVolume(-1, img,dataname);               
130                 if(id!=-1){
131                         wxMaracasMultipleVolumeRendererPanel* controlpan = new wxMaracasMultipleVolumeRendererPanel(this, id,img, false);
132                         addVolumeViewPanel(controlpan, dataname);
133                         controlpan->updateVolume();
134                 }
135         }catch(char* str){
136                 std::cout << "Exception : " << str << '\n';
137                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
138                 diag->ShowModal();
139         }
140 }
141
142 void wxMaracasMultipleVolumeRendererView::loadVolume(wxString filename, wxString dataname){
143
144         std::string s = std::string(filename.mb_str());
145         vtkImageData* img = volmanager->getImageData(s);
146         imgVect.push_back(img);
147
148         if(img!=NULL){
149                 s = std::string(dataname.mb_str());
150                 addVolume(img, s);
151         }
152 }
153
154 void wxMaracasMultipleVolumeRendererView::deleteVolume(int volid)
155 {
156         try{
157                 volmanager->deleteActor(volid);
158         }
159
160         catch(char* str){
161                 std::cout << "Exception : " << str << '\n';
162                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
163                 diag->ShowModal();
164         }
165 }
166
167 void wxMaracasMultipleVolumeRendererView::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue){
168         volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
169 }
170 void wxMaracasMultipleVolumeRendererView::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values){
171         volmanager->setVolumeOpacity(volid, greylevel, values);
172 }
173
174 vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererView::GetTransferFunction(int volumeid){
175         return volmanager->GetTransferFunction(volumeid);
176 }
177 vtkColorTransferFunction* wxMaracasMultipleVolumeRendererView::GetColorFunction(int volumeid){
178     return volmanager->GetColorFunction(volumeid);
179 }
180
181 std::vector<vtkImageData*> wxMaracasMultipleVolumeRendererView::GetOutputImages(){
182         return imgVect;
183 }
184
185 /**
186 **
187 **/
188
189 ToolBarMultipleVolumeRenderer::ToolBarMultipleVolumeRenderer(wxWindow * parent,std::string iconsdir)
190 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
191 {
192
193
194         std::string iconfil = iconsdir;
195
196         //iconfil+= "/OpenImage.png";
197         //wxBitmap* bitmap0 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
198         wxBitmap bitmap0(OpenImage_xpm);
199         this->AddTool(1, wxString(_T("test")),bitmap0, NULL, wxITEM_NORMAL, wxString(_T("Open File")));
200
201         /*iconfil+= "/Open.png";
202         wxBitmap* bitmap2 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
203         this->AddTool(2, wxString(_T("test")),*bitmap2);        */
204
205         /*iconfil = iconsdir;
206         iconfil+= "/Open.png";
207         wxBitmap* bitmap30 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
208         this->AddTool(30, wxString(_T("test")),*bitmap30);*/
209
210         this->Realize();
211
212         _evthand = new ToolBarEventHandlerMultipleVolumeRenderer();
213         this->SetEventHandler(_evthand);
214
215 }
216
217 ToolBarMultipleVolumeRenderer::~ToolBarMultipleVolumeRenderer(void){
218 }
219
220 ToolBarEventHandlerMultipleVolumeRenderer::ToolBarEventHandlerMultipleVolumeRenderer()
221 : wxEvtHandler(){
222 }
223 ToolBarEventHandlerMultipleVolumeRenderer::~ToolBarEventHandlerMultipleVolumeRenderer(){
224 }
225
226 void ToolBarEventHandlerMultipleVolumeRenderer::onLoadImageFile(wxCommandEvent& event){
227         wxMaracasMultipleVolumeRendererView::getInstance()->onLoadImageFile();
228 }
229
230
231
232 BEGIN_EVENT_TABLE(ToolBarEventHandlerMultipleVolumeRenderer, wxEvtHandler)
233         EVT_MENU(1, ToolBarEventHandlerMultipleVolumeRenderer::onLoadImageFile)
234 END_EVENT_TABLE()
235
236