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