]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRendererView.cxx
no newline at end of file
[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 *
162 */
163 wxMaracasMultipleVolumeRendererPanel* wxMaracasRendererView::addVolume(vtkImageData* img, std::string dataname)
164 {
165
166         try
167         {
168                 int id = volmanager->addVolume(img, dataname);
169                 if(id!=-1)
170                 {
171                         wxMaracasMultipleVolumeRendererPanel* controlpan = new wxMaracasMultipleVolumeRendererPanel(this, id,img);
172                         //controlpan->updateVolume();
173
174                         return controlpan;
175                 }
176         }
177         catch(char* str)
178         {
179                 std::cout << "Exception : " << str << '\n';
180                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
181                 diag->ShowModal();
182         }
183 }
184
185 wxMaracasSurfaceRenderingPanel* wxMaracasRendererView::addSurface1(vtkImageData* img, std::string dataname)
186 {
187         try
188         {
189                 int id = surrendmanager1->addPropMHD(img, dataname);
190                 
191                 if(id!=-1)
192                 {
193                         wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(this, id);
194                         //int maxiso = surrendmanager1->getMaxIsoValue(id);
195                         //((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso);
196                         
197                         return controlpan;
198                 }
199         }
200         catch(char* str)
201         {
202                 std::cout << "Exception : " << str << '\n';
203                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
204                 diag->ShowModal();
205         }
206 }
207
208 wxMaracasSurfaceRenderingPanel* wxMaracasRendererView::addSurface2(vtkImageData* img, std::string dataname)
209 {
210         try
211         {
212                 int id = surrendmanager2->addPropMHD(img, dataname);
213                 if(id!=-1)
214                 {
215                         wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(this, id);
216                         //int maxiso = surrendmanager2->getMaxIsoValue(id);
217                         //((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso);
218
219                         return controlpan;
220                 }
221         }
222         catch(char* str)
223         {
224                 std::cout << "Exception : " << str << '\n';
225                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
226                 diag->ShowModal();
227         }
228 }
229
230 wxMaracasSurfaceRenderingPanel* wxMaracasRendererView::addSurface3(vtkImageData* img, std::string dataname)
231 {
232         try
233         {
234                 int id = surrendmanager3->addPropMHD(img, dataname);
235                 if(id!=-1)
236                 {
237                         wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(this, id);
238                         //int maxiso = surrendmanager3->getMaxIsoValue(id);
239                         //((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso);
240                         
241                         return controlpan;
242                 }
243         }
244         catch(char* str)
245         {
246                 std::cout << "Exception : " << str << '\n';
247                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
248                 diag->ShowModal();
249         }
250 }
251
252 void wxMaracasRendererView::loadVolume(wxString filename, wxString dataname)
253 {
254         
255         addPanels(filename, dataname);
256         
257 }
258
259 void wxMaracasRendererView::deleteVolume(int volid)
260 {
261         volmanager->deleteActor(volid);
262         surrendmanager1->deleteActor(volid);
263         surrendmanager2->deleteActor(volid);
264         surrendmanager3->deleteActor(volid);
265 }
266
267 void wxMaracasRendererView::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue){
268         volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
269 }
270 void wxMaracasRendererView::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values){
271         volmanager->setVolumeOpacity(volid, greylevel, values);
272 }
273
274 vtkPiecewiseFunction* wxMaracasRendererView::GetTransferFunction(int volumeid){
275         return volmanager->GetTransferFunction(volumeid);
276 }
277 vtkColorTransferFunction* wxMaracasRendererView::GetColorFunction(int volumeid){
278     return volmanager->GetColorFunction(volumeid);
279 }
280
281 /**
282 **
283 **/
284 ToolBarRenderer::ToolBarRenderer(wxWindow * parent,std::string iconsdir)
285 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
286 {
287         std::string iconfil = iconsdir;
288
289         //iconfil+= "/OpenImage.png";
290         //wxBitmap* bitmap0 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
291         wxBitmap bitmap0(OpenImage_xpm);
292         this->AddTool(1, wxString(_T("test")),bitmap0, NULL, wxITEM_NORMAL, wxString(_T("Open File")));
293
294         /*iconfil+= "/Open.png";
295         wxBitmap* bitmap2 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
296         this->AddTool(2, wxString(_T("test")),*bitmap2);        */
297
298         /*iconfil = iconsdir;
299         iconfil+= "/Open.png";
300         wxBitmap* bitmap30 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
301         this->AddTool(30, wxString(_T("test")),*bitmap30);*/
302
303         this->Realize();
304
305         _evthand = new ToolBarEventHandlerRenderer();
306         this->SetEventHandler(_evthand);
307
308 }
309
310 ToolBarRenderer::~ToolBarRenderer(void){
311 }
312
313 ToolBarEventHandlerRenderer::ToolBarEventHandlerRenderer()
314 : wxEvtHandler(){
315 }
316 ToolBarEventHandlerRenderer::~ToolBarEventHandlerRenderer(){
317 }
318
319 void ToolBarEventHandlerRenderer::onLoadImageFile(wxCommandEvent& event){
320         wxMaracasRendererView::getInstance()->onLoadImageFile();
321 }
322
323
324 BEGIN_EVENT_TABLE(ToolBarEventHandlerRenderer, wxEvtHandler)
325         EVT_MENU(1, ToolBarEventHandlerRenderer::onLoadImageFile)
326 END_EVENT_TABLE()
327
328