1 /*=========================================================================
4 Module: $RCSfile: CutModelMainPanel.cxx,v $
6 Date: $Date: 2010/03/05 17:54:39 $
7 Version: $Revision: 1.7 $
9 Copyright: (c) 2002, 2003
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.
16 =========================================================================*/
20 // EOF - wxMaracasMPR.cxx
22 #include "CutModelMainPanel.h"
23 #include "HistogramDialog.h"
24 #include "creaSystem.h"
26 #include <wx/colordlg.h>
27 #include <wx/bmpbuttn.h>
36 CutModelMainPanel* CutModelMainPanel::instance=NULL;
38 CutModelMainPanel::CutModelMainPanel( wxWindow* parent, std::string path)
39 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
47 CutModelMainPanel::~CutModelMainPanel( ){
52 void CutModelMainPanel::initialize(std::string path){
53 cutmanager = new CutModelManager(path);
55 _wxauimanager = new wxAuiManager(this);
57 wxAuiPaneInfo paneinfo;
59 //RaC 5-02-2010 Add tabs
60 _notebook = new wxAuiNotebook(this,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxAUI_NB_TOP |wxAUI_NB_TAB_MOVE | wxAUI_NB_SCROLL_BUTTONS);
62 _notebook->AddPage(new ToolBarCutModel(_notebook),_T("Cutter"),true);
63 //_wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top());
64 _wxauimanager->AddPane(_notebook,paneinfo.Center());
65 addPolygonCutterTab();
68 _wxauimanager->Update();
71 CutModelMainPanel* CutModelMainPanel::getInstance(wxWindow* parent, std::string path){
74 parent = new wxFrame();
76 instance = new CutModelMainPanel(parent, path);
81 /*CutModelMainPanel* CutModelMainPanel::getInstance(){
86 void CutModelMainPanel::setImageData(vtkImageData* img){
89 cutmanager->setImageData(img);
90 }catch(CutModelException e){
91 showErrorDialog(e.getCause());
95 void CutModelMainPanel::setInteractor(vtkRenderWindowInteractor* interactor){
98 cutmanager->setInteractor(interactor);
99 }catch(CutModelException e){
100 showErrorDialog(e.getCause());
104 void CutModelMainPanel::setRenderer(vtkRenderer* renderer){
107 cutmanager->setRenderer(renderer);
108 }catch(CutModelException e){
109 showErrorDialog(e.getCause());
113 void CutModelMainPanel::checkInvariant()throw (CutModelException){
114 if(cutmanager==NULL){
115 throw CutModelException("The manager is not initialize");
119 void CutModelMainPanel::showErrorDialog(std::string str){
120 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str.c_str(),wxConvUTF8 ), wxString(str.c_str(),wxConvUTF8 ), wxICON_ERROR);
124 void CutModelMainPanel::RemoveActor(int id){
128 if(!this->IsBeingDeleted()){
129 for(int i = 0; i < viewpanels.size()-1;i++){
130 CutModelView* view = viewpanels[i];
131 if(view->getId()==id){
132 for(int j = i; j < viewpanels.size()-1;j++){
133 viewpanels[j]=viewpanels[j+1];
135 i = viewpanels.size();
138 viewpanels.pop_back();
139 cutmanager->RemoveActor(id);
142 }catch(CutModelException e){
143 showErrorDialog(e.getCause());
148 void CutModelMainPanel::onCheckChanged(){
150 if(_isFirstTime==true){
152 cutmanager->InitializePolygonInteractorStyle();
160 cutmanager->ParallelProjectionOn();
161 btnExecutePolygonCut->Enable(false);
162 _notebook->GetPage(0)->Enable(false);
163 _radioinsideout->Enable(false);
164 lblMessagePolygon->SetLabel(_T("Drawing polygon..."));
170 cout<<"Finish Drawing"<<endl;
171 cutmanager->ParallelProjectionOff();
172 btnExecutePolygonCut->Enable(true);
173 _notebook->GetPage(0)->Enable(true);
174 _radioinsideout->Enable(true);
175 lblMessagePolygon->SetLabel(_T("Contour saved! Click on Execute Cut"));
178 cutmanager->UpdatePolygon(_isCheck);
184 void CutModelMainPanel::onExecuteCutPolygon()
187 cutmanager->ExecuteCutPolygon(_radioinsideout->GetSelection());
188 lblMessagePolygon->SetLabel(_T("No contour drawed"));
192 void CutModelMainPanel::onAddCutModel(){
196 int id = addNewViewPanel();
197 cutmanager->onAddCutModel(id, getModelView(id));
201 ShowCurrentPanel(id);
203 }catch(CutModelException e){
204 showErrorDialog(e.getCause());
208 void CutModelMainPanel::ShowCurrentPanel(int id)
211 for(i = 0; i < (int) viewpanels.size();i++){
212 if(viewpanels[i]->getId()==id){
213 _wxauimanager->GetPane(viewpanels[i]).Show(true);
214 cutmanager->RefreshActor(id);
216 _wxauimanager->GetPane(viewpanels[i]).Show(false);
219 _wxauimanager->Update();
221 int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
223 CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
225 wxAuiPaneInfo paneinfo0;
226 _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre());
228 viewpanel->setId(_panelid);
229 viewpanels.push_back(viewpanel);
231 return viewpanel->getId();
235 CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException)
237 CutModelView* current = NULL;
239 for(i = 0; i < (int)viewpanels.size();i++)
241 if(viewpanels[i]->getId()==id)
243 current = viewpanels[i];
248 std::string s = "Id not found";
249 throw CutModelException(s);
254 void CutModelMainPanel::onUndo()
258 int result = cutmanager->Undo();
260 }catch(CutModelException e){
261 showErrorDialog(e.getCause());
266 void CutModelMainPanel::onRedo(){
270 int result = cutmanager->Redo();
272 }catch(CutModelException e){
273 showErrorDialog(e.getCause());
278 void CutModelMainPanel::changeOpacity(int id,int opacity){
281 cutmanager->changeOpacity(id, opacity);
283 }catch(CutModelException e){
284 showErrorDialog(e.getCause());
288 void CutModelMainPanel::ShowViewBox(int id,bool check){
291 cutmanager->ShowViewBox(id, check);
293 }catch(CutModelException e){
294 showErrorDialog(e.getCause());
297 void CutModelMainPanel::ShowPopUpMenu(int id){
298 showErrorDialog("test");
300 void CutModelMainPanel::changeColor(int id,double r,double g,double b){
304 cutmanager->changeColor(id, r, g, b);
306 }catch(CutModelException e){
307 showErrorDialog(e.getCause());
311 void CutModelMainPanel::ChangeShape(int id,int selection){
315 cutmanager->ChangeShape(id, selection);
317 }catch(CutModelException e){
318 showErrorDialog(e.getCause());
321 void CutModelMainPanel::updateActorDirection(int id){
325 cutmanager->updateActorDirection(id);
327 }catch(CutModelException e){
328 showErrorDialog(e.getCause());
332 void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){
336 cutmanager->ExecuteCut(id, range, isinside);
337 }catch(CutModelException e){
338 showErrorDialog(e.getCause());
342 void CutModelMainPanel::ExecuteAll(){
344 for(i = 0; i < (int)viewpanels.size(); i++){
345 viewpanels[i]->ExecuteCut();
349 vtkImageData* CutModelMainPanel::GetResultImage(){
352 return cutmanager->GetResultImage();
353 }catch(CutModelException e){
354 showErrorDialog(e.getCause());
359 void CutModelMainPanel::ShowStatistics(int id){
362 HistogramDialog *histo = new HistogramDialog(this, _T("Statistics"));
364 histo->initializeHistogram(cutmanager->GetResultImage());
371 void CutModelMainPanel::SaveCutModelData(std::string filename){
372 cutmanager->SaveCutModelData(filename);
375 void CutModelMainPanel::LoadCutModelData(std::string filename){
376 cutmanager->LoadCutModelData(filename);
379 void CutModelMainPanel::SetType(int type){
383 int CutModelMainPanel::GetType(){
387 void CutModelMainPanel::addPolygonCutterTab(){
388 wxPanel *panel = new wxPanel(_notebook);
389 panel->SetAutoLayout(true);
390 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
391 panel->SetSizer(sizer);
392 sizer->AddSpacer(20);
394 wxCheckBox *item = new wxCheckBox(panel,10,_T("Draw Polygon"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("") );
395 item->SetValue(false);
396 Connect(item->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onCheckChanged));
397 sizer->Add(item, 0, wxALIGN_LEFT);
399 lblMessagePolygon = new wxStaticText(panel,30,_T("No contour drawed"),wxDefaultPosition,wxDefaultSize,0,_T("") );
400 sizer->Add(lblMessagePolygon, 0, wxALIGN_LEFT);
402 wxString choices0[2];
403 choices0[0] = _T("inside");
404 choices0[1] = _T("outside");
405 _radioinsideout = new wxRadioBox(panel,-1,_T(""), wxDefaultPosition, wxDefaultSize,2,choices0);
406 sizer->Add(_radioinsideout, wxALIGN_LEFT);
408 btnExecutePolygonCut = new wxButton(panel,20,_T("Execute Cut"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("") );
409 Connect(btnExecutePolygonCut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onExecuteCutPolygon));
410 sizer->Add(btnExecutePolygonCut, 0, wxALIGN_LEFT);
413 _notebook->AddPage(panel, _T("Polygon Cutter"), false);
418 void PolygonCutterEventHandlerCutModel::onCheckChanged(wxCommandEvent& event){
419 CutModelMainPanel::getInstance()->onCheckChanged();
422 void PolygonCutterEventHandlerCutModel::onExecuteCutPolygon(wxCommandEvent& event){
423 CutModelMainPanel::getInstance()->onExecuteCutPolygon();
431 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
432 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
434 wxBitmap bitmap10(Add_xpm);
435 this->AddTool(10, wxString(_T("Add")),bitmap10);
437 this->AddSeparator();
439 wxBitmap bitmap20(Undo_xpm);
440 this->AddTool(20, wxString(_T("Undo")),bitmap20);
442 wxBitmap bitmap30(Redo_xpm);
443 this->AddTool(30, wxString(_T("Redo")),bitmap30);
445 this->AddSeparator();
447 wxBitmap bitmap40(OkAll_xpm);
448 this->AddTool(40, wxString(_T("Ok All")),bitmap40);
452 _evthand = new ToolBarEventHandlerCutModel();
453 this->SetEventHandler(_evthand);
457 ToolBarCutModel::~ToolBarCutModel(void){
460 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
463 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
466 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
467 CutModelMainPanel::getInstance()->onAddCutModel();
470 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
471 CutModelMainPanel::getInstance()->onUndo();
474 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
475 CutModelMainPanel::getInstance()->onRedo();
478 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
479 CutModelMainPanel::getInstance()->ExecuteAll();
483 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
484 EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
485 EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
486 EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
487 EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)