1 /*=========================================================================
4 Module: $RCSfile: CutModelMainPanel.cxx,v $
6 Date: $Date: 2010/04/29 15:39:43 $
7 Version: $Revision: 1.9 $
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(); // result unused// JPR
260 }catch(CutModelException e){
261 showErrorDialog(e.getCause());
265 void CutModelMainPanel::onRedo(){
268 int result = cutmanager->Redo();
270 }catch(CutModelException e){
271 showErrorDialog(e.getCause());
275 void CutModelMainPanel::changeOpacity(int id,int opacity){
278 cutmanager->changeOpacity(id, opacity);
280 }catch(CutModelException e){
281 showErrorDialog(e.getCause());
285 void CutModelMainPanel::ShowViewBox(int id,bool check){
288 cutmanager->ShowViewBox(id, check);
290 }catch(CutModelException e){
291 showErrorDialog(e.getCause());
295 void CutModelMainPanel::ShowPopUpMenu(int id){
296 showErrorDialog("test");
299 void CutModelMainPanel::changeColor(int id,double r,double g,double b){
303 cutmanager->changeColor(id, r, g, b);
305 }catch(CutModelException e){
306 showErrorDialog(e.getCause());
310 void CutModelMainPanel::ChangeShape(int id,int selection){
314 cutmanager->ChangeShape(id, selection);
316 }catch(CutModelException e){
317 showErrorDialog(e.getCause());
320 void CutModelMainPanel::updateActorDirection(int id){
324 cutmanager->updateActorDirection(id);
326 }catch(CutModelException e){
327 showErrorDialog(e.getCause());
331 void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){
335 cutmanager->ExecuteCut(id, range, isinside);
336 }catch(CutModelException e){
337 showErrorDialog(e.getCause());
341 void CutModelMainPanel::ExecuteAll(){
343 for(i = 0; i < (int)viewpanels.size(); i++){
344 viewpanels[i]->ExecuteCut();
348 vtkImageData* CutModelMainPanel::GetResultImage(){
351 return cutmanager->GetResultImage();
352 }catch(CutModelException e){
353 showErrorDialog(e.getCause());
358 void CutModelMainPanel::ShowStatistics(int id){
361 HistogramDialog *histo = new HistogramDialog(this, _T("Statistics"));
363 histo->initializeHistogram(cutmanager->GetResultImage());
370 void CutModelMainPanel::SaveCutModelData(std::string filename){
371 cutmanager->SaveCutModelData(filename);
374 void CutModelMainPanel::LoadCutModelData(std::string filename){
375 cutmanager->LoadCutModelData(filename);
378 void CutModelMainPanel::SetType(int type){
382 int CutModelMainPanel::GetType(){
386 void CutModelMainPanel::addPolygonCutterTab(){
387 wxPanel *panel = new wxPanel(_notebook);
388 panel->SetAutoLayout(true);
389 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
390 panel->SetSizer(sizer);
391 sizer->AddSpacer(20);
393 wxCheckBox *item = new wxCheckBox(panel,10,_T("Draw Polygon"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("") );
394 item->SetValue(false);
395 Connect(item->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onCheckChanged));
396 sizer->Add(item, 0, wxALIGN_LEFT);
398 lblMessagePolygon = new wxStaticText(panel,30,_T("No contour drawed"),wxDefaultPosition,wxDefaultSize,0,_T("") );
399 sizer->Add(lblMessagePolygon, 0, wxALIGN_LEFT);
401 wxString choices0[2];
402 choices0[0] = _T("inside");
403 choices0[1] = _T("outside");
404 _radioinsideout = new wxRadioBox(panel,-1,_T(""), wxDefaultPosition, wxDefaultSize,2,choices0);
405 sizer->Add(_radioinsideout, wxALIGN_LEFT);
407 btnExecutePolygonCut = new wxButton(panel,20,_T("Execute Cut"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("") );
408 Connect(btnExecutePolygonCut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onExecuteCutPolygon));
409 sizer->Add(btnExecutePolygonCut, 0, wxALIGN_LEFT);
411 _notebook->AddPage(panel, _T("Polygon Cutter"), false);
414 void PolygonCutterEventHandlerCutModel::onCheckChanged(wxCommandEvent& event){
415 CutModelMainPanel::getInstance()->onCheckChanged();
418 void PolygonCutterEventHandlerCutModel::onExecuteCutPolygon(wxCommandEvent& event){
419 CutModelMainPanel::getInstance()->onExecuteCutPolygon();
425 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
426 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
428 wxBitmap bitmap10(Add_xpm);
429 this->AddTool(10, wxString(_T("Add")),bitmap10);
431 this->AddSeparator();
433 wxBitmap bitmap20(Undo_xpm);
434 this->AddTool(20, wxString(_T("Undo")),bitmap20);
436 wxBitmap bitmap30(Redo_xpm);
437 this->AddTool(30, wxString(_T("Redo")),bitmap30);
439 this->AddSeparator();
441 wxBitmap bitmap40(OkAll_xpm);
442 this->AddTool(40, wxString(_T("Ok All")),bitmap40);
446 _evthand = new ToolBarEventHandlerCutModel();
447 this->SetEventHandler(_evthand);
450 ToolBarCutModel::~ToolBarCutModel(void){
453 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
456 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
459 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
460 CutModelMainPanel::getInstance()->onAddCutModel();
463 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
464 CutModelMainPanel::getInstance()->onUndo();
467 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
468 CutModelMainPanel::getInstance()->onRedo();
471 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
472 CutModelMainPanel::getInstance()->ExecuteAll();
475 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
476 EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
477 EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
478 EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
479 EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)