1 /*=========================================================================
4 Module: $RCSfile: CutModelMainPanel.cxx,v $
6 Date: $Date: 2010/02/24 13:56:06 $
7 Version: $Revision: 1.6 $
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),"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("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("Contour saved! Click on Execute Cut");
178 cutmanager->UpdatePolygon(_isCheck);
184 void CutModelMainPanel::onExecuteCutPolygon(){
186 cutmanager->ExecuteCutPolygon(_radioinsideout->GetSelection());
187 lblMessagePolygon->SetLabel("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());
207 void CutModelMainPanel::ShowCurrentPanel(int id){
208 for(int i = 0; i < viewpanels.size();i++){
209 if(viewpanels[i]->getId()==id){
210 _wxauimanager->GetPane(viewpanels[i]).Show(true);
211 cutmanager->RefreshActor(id);
213 _wxauimanager->GetPane(viewpanels[i]).Show(false);
216 _wxauimanager->Update();
218 int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
220 CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
222 wxAuiPaneInfo paneinfo0;
223 _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre());
225 viewpanel->setId(_panelid);
226 viewpanels.push_back(viewpanel);
228 return viewpanel->getId();
232 CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException){
234 CutModelView* current = NULL;
235 for(int i = 0; i < viewpanels.size();i++){
236 if(viewpanels[i]->getId()==id){
237 current = viewpanels[i];
241 std::string s = "Id not found";
242 throw CutModelException(s);
246 void CutModelMainPanel::onUndo(){
249 int result = cutmanager->Undo();
251 }catch(CutModelException e){
252 showErrorDialog(e.getCause());
257 void CutModelMainPanel::onRedo(){
261 int result = cutmanager->Redo();
263 }catch(CutModelException e){
264 showErrorDialog(e.getCause());
269 void CutModelMainPanel::changeOpacity(int id,int opacity){
272 cutmanager->changeOpacity(id, opacity);
274 }catch(CutModelException e){
275 showErrorDialog(e.getCause());
279 void CutModelMainPanel::ShowViewBox(int id,bool check){
282 cutmanager->ShowViewBox(id, check);
284 }catch(CutModelException e){
285 showErrorDialog(e.getCause());
288 void CutModelMainPanel::ShowPopUpMenu(int id){
289 showErrorDialog("test");
291 void CutModelMainPanel::changeColor(int id,double r,double g,double b){
295 cutmanager->changeColor(id, r, g, b);
297 }catch(CutModelException e){
298 showErrorDialog(e.getCause());
302 void CutModelMainPanel::ChangeShape(int id,int selection){
306 cutmanager->ChangeShape(id, selection);
308 }catch(CutModelException e){
309 showErrorDialog(e.getCause());
312 void CutModelMainPanel::updateActorDirection(int id){
316 cutmanager->updateActorDirection(id);
318 }catch(CutModelException e){
319 showErrorDialog(e.getCause());
323 void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){
327 cutmanager->ExecuteCut(id, range, isinside);
328 }catch(CutModelException e){
329 showErrorDialog(e.getCause());
333 void CutModelMainPanel::ExecuteAll(){
334 for(int i = 0; i < viewpanels.size(); i++){
335 viewpanels[i]->ExecuteCut();
339 vtkImageData* CutModelMainPanel::GetResultImage(){
342 return cutmanager->GetResultImage();
343 }catch(CutModelException e){
344 showErrorDialog(e.getCause());
349 void CutModelMainPanel::ShowStatistics(int id){
352 HistogramDialog *histo = new HistogramDialog(this, _T("Statistics"));
354 histo->initializeHistogram(cutmanager->GetResultImage());
361 void CutModelMainPanel::SaveCutModelData(std::string filename){
362 cutmanager->SaveCutModelData(filename);
365 void CutModelMainPanel::LoadCutModelData(std::string filename){
366 cutmanager->LoadCutModelData(filename);
369 void CutModelMainPanel::SetType(int type){
373 int CutModelMainPanel::GetType(){
377 void CutModelMainPanel::addPolygonCutterTab(){
378 wxPanel *panel = new wxPanel(_notebook);
379 panel->SetAutoLayout(true);
380 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
381 panel->SetSizer(sizer);
382 sizer->AddSpacer(20);
384 wxCheckBox *item = new wxCheckBox(panel,10,"Draw Polygon",wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,"");
385 item->SetValue(false);
386 Connect(item->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onCheckChanged));
387 sizer->Add(item, 0, wxALIGN_LEFT);
389 lblMessagePolygon = new wxStaticText(panel,30,"No contour drawed",wxDefaultPosition,wxDefaultSize,0,"");
390 sizer->Add(lblMessagePolygon, 0, wxALIGN_LEFT);
392 wxString choices0[2];
393 choices0[0] = _T("inside");
394 choices0[1] = _T("outside");
395 _radioinsideout = new wxRadioBox(panel,-1,_T(""), wxDefaultPosition, wxDefaultSize,2,choices0);
396 sizer->Add(_radioinsideout, wxALIGN_LEFT);
398 btnExecutePolygonCut = new wxButton(panel,20,"Execute Cut",wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,"");
399 Connect(btnExecutePolygonCut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onExecuteCutPolygon));
400 sizer->Add(btnExecutePolygonCut, 0, wxALIGN_LEFT);
403 _notebook->AddPage(panel, "Polygon Cutter", false);
408 void PolygonCutterEventHandlerCutModel::onCheckChanged(wxCommandEvent& event){
409 CutModelMainPanel::getInstance()->onCheckChanged();
412 void PolygonCutterEventHandlerCutModel::onExecuteCutPolygon(wxCommandEvent& event){
413 CutModelMainPanel::getInstance()->onExecuteCutPolygon();
421 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
422 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
424 wxBitmap bitmap10(Add_xpm);
425 this->AddTool(10, wxString(_T("Add")),bitmap10);
427 this->AddSeparator();
429 wxBitmap bitmap20(Undo_xpm);
430 this->AddTool(20, wxString(_T("Undo")),bitmap20);
432 wxBitmap bitmap30(Redo_xpm);
433 this->AddTool(30, wxString(_T("Redo")),bitmap30);
435 this->AddSeparator();
437 wxBitmap bitmap40(OkAll_xpm);
438 this->AddTool(40, wxString(_T("Ok All")),bitmap40);
442 _evthand = new ToolBarEventHandlerCutModel();
443 this->SetEventHandler(_evthand);
447 ToolBarCutModel::~ToolBarCutModel(void){
450 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
453 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
456 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
457 CutModelMainPanel::getInstance()->onAddCutModel();
460 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
461 CutModelMainPanel::getInstance()->onUndo();
464 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
465 CutModelMainPanel::getInstance()->onRedo();
468 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
469 CutModelMainPanel::getInstance()->ExecuteAll();
473 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
474 EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
475 EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
476 EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
477 EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)