]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/CutModule/interface/CutModelMainPanel.cxx
Machète detruction viewer
[creaMaracasVisu.git] / lib / maracasVisuLib / src / CutModule / interface / CutModelMainPanel.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: CutModelMainPanel.cxx,v $
5   Language:  C++
6   Date:      $Date: 2009/11/25 16:35:36 $
7   Version:   $Revision: 1.4 $
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 "CutModelMainPanel.h"
23 #include "HistogramDialog.h"
24 #include "creaSystem.h"
25
26 #include <wx/colordlg.h>
27 #include <wx/bmpbuttn.h>
28
29 #include <Add.xpm>
30 #include <Undo.xpm>
31 #include <Redo.xpm>
32 #include <OkAll.xpm>
33
34
35
36 CutModelMainPanel* CutModelMainPanel::instance=NULL;
37
38 CutModelMainPanel::CutModelMainPanel( wxWindow* parent, std::string path)
39 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
40
41         cutmanager=NULL;
42
43         initialize(path);
44
45 }
46 CutModelMainPanel::~CutModelMainPanel( ){       
47         viewpanels.clear();
48         delete cutmanager;
49 }
50
51 void CutModelMainPanel::initialize(std::string path){
52         
53         cutmanager = new CutModelManager(path);
54
55         _panelid = 0;
56         _wxauimanager = new wxAuiManager(this); 
57         
58         wxAuiPaneInfo paneinfo;
59         _wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top());         
60
61         _wxauimanager->Update();
62 }
63
64 CutModelMainPanel* CutModelMainPanel::getInstance(wxWindow* parent, std::string path){
65         if(instance==NULL){
66                 if(parent == NULL){
67                         parent = new wxFrame();
68                 }
69                 instance = new CutModelMainPanel(parent, path);
70         }
71         return instance;
72 }
73
74 /*CutModelMainPanel* CutModelMainPanel::getInstance(){
75         return instance;
76 }*/
77
78 void CutModelMainPanel::setImageData(vtkImageData* img){
79         try{
80                 checkInvariant();
81                 cutmanager->setImageData(img);
82         }catch(CutModelException e){
83                 showErrorDialog(e.getCause());
84         }
85 }
86
87 void CutModelMainPanel::setInteractor(vtkRenderWindowInteractor* interactor){
88         try{
89                 checkInvariant();
90                 cutmanager->setInteractor(interactor);
91         }catch(CutModelException e){
92                 showErrorDialog(e.getCause());
93         }
94 }
95
96 void CutModelMainPanel::setRenderer(vtkRenderer* renderer){
97     try{
98                 checkInvariant();
99                 cutmanager->setRenderer(renderer);
100         }catch(CutModelException e){
101                 showErrorDialog(e.getCause());
102         }
103 }
104
105 void CutModelMainPanel::checkInvariant()throw (CutModelException){
106         if(cutmanager==NULL){
107                 throw CutModelException("The manager is not initialize");
108         }       
109 }
110
111 void CutModelMainPanel::showErrorDialog(std::string str){       
112         wxMessageDialog* diag = new wxMessageDialog(this, wxString(str.c_str(),wxConvUTF8 ), wxString(str.c_str(),wxConvUTF8 ), wxICON_ERROR);
113         diag->ShowModal();
114 }
115
116 void CutModelMainPanel::RemoveActor(int id){
117      try{
118                 checkInvariant();
119
120                 if(!this->IsBeingDeleted()){
121                         for(int i = 0; i < viewpanels.size()-1;i++){
122                                 CutModelView* view = viewpanels[i];
123                                 if(view->getId()==id){
124                                         for(int j = i; j < viewpanels.size()-1;j++){
125                                                 viewpanels[j]=viewpanels[j+1];
126                                         }
127                                         i = viewpanels.size();
128                                 }
129                         }
130                         viewpanels.pop_back();
131                         cutmanager->RemoveActor(id);
132                 }       
133
134         }catch(CutModelException e){
135                 showErrorDialog(e.getCause());
136         }
137 }
138
139 void CutModelMainPanel::onAddCutModel(){
140     try{
141                 checkInvariant();
142
143                 int id = addNewViewPanel();             
144                 cutmanager->onAddCutModel(id, getModelView(id));
145
146                 _panelid++;
147
148                 ShowCurrentPanel(id);
149
150         }catch(CutModelException e){
151                 showErrorDialog(e.getCause());
152         }
153 }
154 void CutModelMainPanel::ShowCurrentPanel(int id){
155         for(int i = 0; i < viewpanels.size();i++){              
156                 if(viewpanels[i]->getId()==id){
157                         _wxauimanager->GetPane(viewpanels[i]).Show(true);
158             cutmanager->RefreshActor(id);
159                 }else{
160                         _wxauimanager->GetPane(viewpanels[i]).Show(false);
161                 }
162         }
163         _wxauimanager->Update();
164 }
165 int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
166         
167         CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
168
169         wxAuiPaneInfo paneinfo0;
170         _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre());   
171         
172         viewpanel->setId(_panelid);
173         viewpanels.push_back(viewpanel);        
174
175         return viewpanel->getId();
176         
177         
178 }
179 CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException){
180
181         CutModelView* current = NULL;
182         for(int i = 0; i < viewpanels.size();i++){
183                 if(viewpanels[i]->getId()==id){
184             current = viewpanels[i];
185                 }
186         }
187         if(current == NULL){
188                 std::string s = "Id not found";
189                 throw CutModelException(s);
190         }
191         return current;
192 }
193 void CutModelMainPanel::onUndo(){
194         try{
195                 checkInvariant();               
196                 int result = cutmanager->Undo();
197
198         }catch(CutModelException e){
199                 showErrorDialog(e.getCause());
200         }
201         
202 }
203
204 void CutModelMainPanel::onRedo(){
205
206         try{
207                 checkInvariant();               
208                 int result = cutmanager->Redo();
209
210         }catch(CutModelException e){
211                 showErrorDialog(e.getCause());
212         }
213         
214 }
215
216 void CutModelMainPanel::changeOpacity(int id,int opacity){
217         try{
218                 checkInvariant();               
219                 cutmanager->changeOpacity(id, opacity);
220
221         }catch(CutModelException e){
222                 showErrorDialog(e.getCause());
223         }
224 }
225
226 void CutModelMainPanel::ShowViewBox(int id,bool check){
227     try{
228                 checkInvariant();               
229                 cutmanager->ShowViewBox(id, check);
230
231         }catch(CutModelException e){
232                 showErrorDialog(e.getCause());
233         }
234 }
235 void CutModelMainPanel::ShowPopUpMenu(int id){
236         showErrorDialog("test");
237 }
238 void CutModelMainPanel::changeColor(int id,double r,double g,double b){
239
240         try{
241                 checkInvariant();               
242                 cutmanager->changeColor(id, r, g, b);
243
244         }catch(CutModelException e){
245                 showErrorDialog(e.getCause());
246         }
247         
248 }
249 void CutModelMainPanel::ChangeShape(int id,int selection){
250         try{
251                 checkInvariant();
252                 
253                 cutmanager->ChangeShape(id, selection);
254
255         }catch(CutModelException e){
256                 showErrorDialog(e.getCause());
257         }
258 }
259 void CutModelMainPanel::updateActorDirection(int id){
260     try{
261                 checkInvariant();
262                 
263                 cutmanager->updateActorDirection(id);
264
265         }catch(CutModelException e){
266                 showErrorDialog(e.getCause());
267         }
268 }
269
270 void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){
271         try{
272                 checkInvariant();               
273
274                 cutmanager->ExecuteCut(id, range, isinside);
275         }catch(CutModelException e){
276                 showErrorDialog(e.getCause());
277         }
278 }
279
280 void CutModelMainPanel::ExecuteAll(){
281         for(int i = 0; i < viewpanels.size();i++){
282                 viewpanels[i]->ExecuteCut();
283         }
284
285 }
286 vtkImageData* CutModelMainPanel::GetResultImage(){
287     try{
288                 checkInvariant();
289                 return cutmanager->GetResultImage();
290         }catch(CutModelException e){
291                 showErrorDialog(e.getCause());
292         }
293         return NULL;
294 }
295
296 void CutModelMainPanel::ShowStatistics(int id){
297
298         checkInvariant();
299         HistogramDialog *histo = new HistogramDialog(this, _T("Statistics"));
300
301         histo->initializeHistogram(cutmanager->GetResultImage());
302
303         histo->ShowModal();
304
305         delete histo;
306 }
307
308 void CutModelMainPanel::SaveCutModelData(std::string filename){
309         cutmanager->SaveCutModelData(filename);
310 }
311
312 void CutModelMainPanel::LoadCutModelData(std::string filename){
313     cutmanager->LoadCutModelData(filename);
314 }
315 /**
316 **
317 **/
318
319 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
320 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
321 {
322
323         wxBitmap bitmap10(Add_xpm);
324         this->AddTool(10, wxString(_T("Add")),bitmap10);
325
326         this->AddSeparator();
327
328         wxBitmap bitmap20(Undo_xpm);
329         this->AddTool(20, wxString(_T("Undo")),bitmap20);
330
331         wxBitmap bitmap30(Redo_xpm);
332         this->AddTool(30, wxString(_T("Redo")),bitmap30);       
333
334         this->AddSeparator();
335
336         wxBitmap bitmap40(OkAll_xpm);
337         this->AddTool(40, wxString(_T("Ok All")),bitmap40);     
338
339         this->Realize();
340
341         _evthand = new ToolBarEventHandlerCutModel();
342         this->SetEventHandler(_evthand);
343
344 }
345
346 ToolBarCutModel::~ToolBarCutModel(void){
347 }
348
349 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
350 : wxEvtHandler(){
351 }
352 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
353 }
354
355 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
356         CutModelMainPanel::getInstance()->onAddCutModel();
357 }
358
359 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
360         CutModelMainPanel::getInstance()->onUndo();     
361 }
362
363 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
364         CutModelMainPanel::getInstance()->onRedo();
365 }
366
367 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
368         CutModelMainPanel::getInstance()->ExecuteAll();
369 }
370
371
372 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
373         EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
374         EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
375         EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
376         EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)
377 END_EVENT_TABLE()
378