]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRendererView.cxx
4ed1749f4052ef7ccde201418da578ec55ad7024
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasRendererView.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracasRendererView.cxx,v $
5   Language:  C++
6
7 =========================================================================*/
8
9 #include "wxMaracasRendererView.h"
10
11 #include <wx/colordlg.h>
12 #include <wx/bmpbuttn.h>
13
14 #include <OpenImage.xpm>
15 #include <Color.xpm>
16
17 wxMaracasRendererView* wxMaracasRendererView::instance=NULL;
18
19 /**
20 **
21 **/
22 wxMaracasRendererView::wxMaracasRendererView(wxWindow* parent,std::string path)
23 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
24
25         wxauimanager = new wxAuiManager(this);
26
27         _path = path;
28
29         volmanager = new wxMaracasMultipleVolumeRendererManager();
30         surrendmanager1 = new wxMaracasSurfaceRenderingManager();
31         surrendmanager2 = new wxMaracasSurfaceRenderingManager();
32         surrendmanager3 = new wxMaracasSurfaceRenderingManager();
33
34         std::string iconsdir = path;
35         iconsdir+="/data/Icons";
36         this->_toolb = new ToolBarRenderer(this,iconsdir);
37         wxStaticText* txt = new wxStaticText(this, -1, wxString(_T("  Open File  ")));
38         wxAuiPaneInfo paneinfo;
39         wxauimanager->AddPane(txt,paneinfo.ToolbarPane().Top());
40         wxauimanager->AddPane(_toolb,paneinfo.ToolbarPane().Top());
41
42         wxauimanager->Update(); 
43 }
44
45 /**
46 **
47 **/
48 wxMaracasRendererView::~wxMaracasRendererView( )
49 {
50         delete _toolb;
51 }
52
53 /**
54 **
55 **/
56 std::string wxMaracasRendererView::getPath()
57 {
58         return _path;
59 }
60
61 /**
62 **
63 **/
64 wxMaracasRendererView* wxMaracasRendererView::getInstance(wxWindow* parent,std::string path)
65 {
66         if(instance==NULL)
67         {
68                 instance = new wxMaracasRendererView(parent,path);
69         }
70         return instance;
71 }
72
73 /**
74 **
75 **/
76 wxMaracasRendererView* wxMaracasRendererView::getInstance()
77 {
78         return instance;
79 }
80
81 /**
82 **
83 **/
84 void wxMaracasRendererView::setRenderer(vtkRenderer*  renderer)
85 {
86         volmanager->setRenderer(renderer);
87         surrendmanager1->setRenderer(renderer);
88         surrendmanager2->setRenderer(renderer);
89         surrendmanager3->setRenderer(renderer);
90 }
91
92 /**
93 ** Adds or removes a volume rendering actor
94 **/
95 void wxMaracasRendererView::addRemoveActorVol(int id, bool addremove)
96 {
97         volmanager->addRemoveActor(id, addremove);
98 }
99
100 /**
101 ** Adds or removes a surface rendering actor
102 **/
103 void wxMaracasRendererView::addRemoveSurf1Actor(int id, bool addremove)
104 {
105         surrendmanager1->addRemoveActor(id, addremove);
106 }
107
108 /**
109 ** Adds or removes a surface rendering actor
110 **/
111 void wxMaracasRendererView::addRemoveSurf2Actor(int id, bool addremove)
112 {
113         surrendmanager2->addRemoveActor(id, addremove);
114 }
115
116 /**
117 ** Adds or removes a surface rendering actor
118 **/
119 void wxMaracasRendererView::addRemoveSurf3Actor(int id, bool addremove)
120 {
121         surrendmanager3->addRemoveActor(id, addremove);
122 }
123
124 /**
125 **
126 **/
127 void wxMaracasRendererView::onLoadImageFile()
128 {
129         wxString mhd(_T("mhd"));        
130
131         wxFileDialog* fildial = new wxFileDialog(this, wxString(_T("Select a MHD file")),wxString(_T("")),
132                 wxString(_T("")),wxString(_T("MHD files (*.mhd)|*.mhd")) );
133
134         if(fildial->ShowModal()==wxID_OK)
135         {
136         wxString filename = fildial->GetFilename();
137                 wxString pathfile(fildial->GetDirectory() + _T("/") + filename);
138                 if(filename.EndsWith(mhd))
139                 {
140                         loadVolume(pathfile,filename);
141                 }
142         }
143         delete fildial;
144 }
145
146 /*
147 *
148 */
149 void wxMaracasRendererView::addPanels(wxString filename, wxString dataname)
150 {
151         wxString s(dataname.c_str(),wxConvUTF8 );
152         
153         wxtabs = new wxMaracasRenderTabbedPanel(this, volmanager, surrendmanager1, surrendmanager2, surrendmanager3, filename, dataname);
154         
155         wxAuiPaneInfo paneinfo;
156         wxauimanager->AddPane(wxtabs, paneinfo.DefaultPane().Centre().DestroyOnClose().Caption(s));
157         wxauimanager->Update();
158 }
159
160
161 wxMaracasRenderTabbedPanel* wxMaracasRendererView::getTabbedPanel()
162 {
163         return wxtabs;
164 }
165 /*
166 *
167 */
168 /*wxMaracasMultipleVolumeRendererPanel* wxMaracasRendererView::addVolume(vtkImageData* img, std::string dataname)
169 {
170
171         try
172         {
173                 int id = volmanager->addVolume(img, dataname);
174                 if(id!=-1)
175                 {
176                         wxMaracasMultipleVolumeRendererPanel* controlpan = new wxMaracasMultipleVolumeRendererPanel(this, id,img);
177                         //controlpan->updateVolume();
178
179                         return controlpan;
180                 }
181         }
182         catch(char* str)
183         {
184                 std::cout << "Exception : " << str << '\n';
185                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
186                 diag->ShowModal();
187         }
188 }
189
190 wxMaracasSurfaceRenderingPanel* wxMaracasRendererView::addSurface1(vtkImageData* img, std::string dataname)
191 {
192         try
193         {
194                 int id = surrendmanager1->addPropMHD(img, dataname);
195                 
196                 if(id!=-1)
197                 {
198                         wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(this, id);
199                         //int maxiso = surrendmanager1->getMaxIsoValue(id);
200                         //((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso);
201                         
202                         return controlpan;
203                 }
204         }
205         catch(char* str)
206         {
207                 std::cout << "Exception : " << str << '\n';
208                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
209                 diag->ShowModal();
210         }
211 }
212
213 wxMaracasSurfaceRenderingPanel* wxMaracasRendererView::addSurface2(vtkImageData* img, std::string dataname)
214 {
215         try
216         {
217                 int id = surrendmanager2->addPropMHD(img, dataname);
218                 if(id!=-1)
219                 {
220                         wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(this, id);
221                         //int maxiso = surrendmanager2->getMaxIsoValue(id);
222                         //((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso);
223
224                         return controlpan;
225                 }
226         }
227         catch(char* str)
228         {
229                 std::cout << "Exception : " << str << '\n';
230                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
231                 diag->ShowModal();
232         }
233 }
234
235 wxMaracasSurfaceRenderingPanel* wxMaracasRendererView::addSurface3(vtkImageData* img, std::string dataname)
236 {
237         try
238         {
239                 int id = surrendmanager3->addPropMHD(img, dataname);
240                 if(id!=-1)
241                 {
242                         wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(this, id);
243                         //int maxiso = surrendmanager3->getMaxIsoValue(id);
244                         //((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso);
245                         
246                         return controlpan;
247                 }
248         }
249         catch(char* str)
250         {
251                 std::cout << "Exception : " << str << '\n';
252                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
253                 diag->ShowModal();
254         }
255 }
256 */
257 void wxMaracasRendererView::loadVolume(wxString filename, wxString dataname)
258 {
259         
260         addPanels(filename, dataname);
261         
262 }
263
264 void wxMaracasRendererView::deleteVolume(int volid)
265 {
266         volmanager->deleteActor(volid);
267         surrendmanager1->deleteActor(volid);
268         surrendmanager2->deleteActor(volid);
269         surrendmanager3->deleteActor(volid);
270 }
271
272 void wxMaracasRendererView::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue){
273         volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
274 }
275 void wxMaracasRendererView::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values){
276         volmanager->setVolumeOpacity(volid, greylevel, values);
277 }
278
279 vtkPiecewiseFunction* wxMaracasRendererView::GetTransferFunction(int volumeid){
280         return volmanager->GetTransferFunction(volumeid);
281 }
282 vtkColorTransferFunction* wxMaracasRendererView::GetColorFunction(int volumeid){
283     return volmanager->GetColorFunction(volumeid);
284 }
285
286 /**
287 **
288 **/
289 ToolBarRenderer::ToolBarRenderer(wxWindow * parent,std::string iconsdir)
290 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
291 {
292         std::string iconfil = iconsdir;
293
294         //iconfil+= "/OpenImage.png";
295         //wxBitmap* bitmap0 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
296         wxBitmap bitmap0(OpenImage_xpm);
297         this->AddTool(1, wxString(_T("test")),bitmap0, NULL, wxITEM_NORMAL, wxString(_T("Open File")));
298
299         /*iconfil+= "/Open.png";
300         wxBitmap* bitmap2 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
301         this->AddTool(2, wxString(_T("test")),*bitmap2);        */
302
303         /*iconfil = iconsdir;
304         iconfil+= "/Open.png";
305         wxBitmap* bitmap30 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
306         this->AddTool(30, wxString(_T("test")),*bitmap30);*/
307
308         this->Realize();
309
310         _evthand = new ToolBarEventHandlerRenderer();
311         this->SetEventHandler(_evthand);
312
313 }
314
315 ToolBarRenderer::~ToolBarRenderer(void){
316 }
317
318 ToolBarEventHandlerRenderer::ToolBarEventHandlerRenderer()
319 : wxEvtHandler(){
320 }
321 ToolBarEventHandlerRenderer::~ToolBarEventHandlerRenderer(){
322 }
323
324 void ToolBarEventHandlerRenderer::onLoadImageFile(wxCommandEvent& event){
325         wxMaracasRendererView::getInstance()->onLoadImageFile();
326 }
327
328
329 BEGIN_EVENT_TABLE(ToolBarEventHandlerRenderer, wxEvtHandler)
330         EVT_MENU(1, ToolBarEventHandlerRenderer::onLoadImageFile)
331 END_EVENT_TABLE()
332
333