1 /*=========================================================================
4 Module: $RCSfile: CutModelMainPanel.cxx,v $
6 Date: $Date: 2011/02/07 09:16:28 $
7 Version: $Revision: 1.13 $
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().CloseButton(false));
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()){
130 for(i = 0; i < (int)viewpanels.size()-1;i++){
131 CutModelView* view = viewpanels[i];
132 if(view->getId()==id){
133 for(j = i; j < (int)viewpanels.size()-1;j++){
134 viewpanels[j]=viewpanels[j+1];
136 i = viewpanels.size();
139 viewpanels.pop_back();
140 cutmanager->RemoveActor(id);
143 }catch(CutModelException e){
144 showErrorDialog(e.getCause());
149 void CutModelMainPanel::onCheckChanged(){
151 if(_isFirstTime==true){
153 cutmanager->InitializePolygonInteractorStyle();
161 cutmanager->ParallelProjectionOn();
162 btnExecutePolygonCut->Enable(false);
163 _notebook->GetPage(0)->Enable(false);
164 _radioinsideout->Enable(false);
165 lblMessagePolygon->SetLabel(_T("Drawing polygon..."));
171 cout<<"Finish Drawing"<<endl;
172 cutmanager->ParallelProjectionOff();
173 btnExecutePolygonCut->Enable(true);
174 _notebook->GetPage(0)->Enable(true);
175 _radioinsideout->Enable(true);
176 lblMessagePolygon->SetLabel(_T("Contour saved! Click on Execute Cut"));
179 cutmanager->UpdatePolygon(_isCheck);
185 void CutModelMainPanel::onExecuteCutPolygon()
188 cutmanager->ExecuteCutPolygon(_radioinsideout->GetSelection());
189 lblMessagePolygon->SetLabel(_T("No contour drawed"));
193 void CutModelMainPanel::onAddCutModel(){
197 int id = addNewViewPanel();
198 cutmanager->onAddCutModel(id, getModelView(id));
202 ShowCurrentPanel(id);
204 }catch(CutModelException e){
205 showErrorDialog(e.getCause());
209 void CutModelMainPanel::ShowCurrentPanel(int id)
212 for(i = 0; i < (int) viewpanels.size();i++){
213 if(viewpanels[i]->getId()==id){
214 _wxauimanager->GetPane(viewpanels[i]).Show(true);
215 cutmanager->RefreshActor(id);
217 _wxauimanager->GetPane(viewpanels[i]).Show(false);
220 _wxauimanager->Update();
222 int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
224 CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
226 wxAuiPaneInfo paneinfo0;
227 _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre().Bottom());
229 viewpanel->setId(_panelid);
230 viewpanels.push_back(viewpanel);
232 return viewpanel->getId();
236 CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException)
238 CutModelView* current = NULL;
240 for(i = 0; i < (int)viewpanels.size();i++)
242 if(viewpanels[i]->getId()==id)
244 current = viewpanels[i];
249 std::string s = "Id not found";
250 throw CutModelException(s);
255 void CutModelMainPanel::onUndo()
259 /*int result = */ cutmanager->Undo(); // result unused// JPR
261 }catch(CutModelException e){
262 showErrorDialog(e.getCause());
266 void CutModelMainPanel::onRedo(){
269 /*int result = */ cutmanager->Redo();
271 }catch(CutModelException e){
272 showErrorDialog(e.getCause());
276 void CutModelMainPanel::changeOpacity(int id,int opacity){
279 cutmanager->changeOpacity(id, opacity);
281 }catch(CutModelException e){
282 showErrorDialog(e.getCause());
286 void CutModelMainPanel::ShowViewBox(int id,bool check){
289 cutmanager->ShowViewBox(id, check);
291 }catch(CutModelException e){
292 showErrorDialog(e.getCause());
296 void CutModelMainPanel::ShowPopUpMenu(int id){
297 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);
412 _notebook->AddPage(panel, _T("Polygon Cutter"), false);
415 void PolygonCutterEventHandlerCutModel::onCheckChanged(wxCommandEvent& event){
416 CutModelMainPanel::getInstance()->onCheckChanged();
419 void PolygonCutterEventHandlerCutModel::onExecuteCutPolygon(wxCommandEvent& event){
420 CutModelMainPanel::getInstance()->onExecuteCutPolygon();
426 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
427 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
429 wxBitmap bitmap10(Add_xpm);
430 this->AddTool(10, wxString(_T("Add")),bitmap10);
432 this->AddSeparator();
434 wxBitmap bitmap20(Undo_xpm);
435 this->AddTool(20, wxString(_T("Undo")),bitmap20);
437 wxBitmap bitmap30(Redo_xpm);
438 this->AddTool(30, wxString(_T("Redo")),bitmap30);
440 this->AddSeparator();
442 wxBitmap bitmap40(OkAll_xpm);
443 this->AddTool(40, wxString(_T("Ok All")),bitmap40);
447 _evthand = new ToolBarEventHandlerCutModel();
448 this->SetEventHandler(_evthand);
451 ToolBarCutModel::~ToolBarCutModel(void){
454 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
457 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
460 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
461 CutModelMainPanel::getInstance()->onAddCutModel();
464 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
465 CutModelMainPanel::getInstance()->onUndo();
468 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
469 CutModelMainPanel::getInstance()->onRedo();
472 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
473 CutModelMainPanel::getInstance()->ExecuteAll();
476 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
477 EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
478 EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
479 EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
480 EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)