X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2FCutModule%2Finterface%2FCutModelMainPanel.cxx;h=a2265195ca2e5833ce948caaa851f6a48b04b4b0;hb=1e68cd7b706bf3b775b959d51f2fd5d83299220c;hp=f29854d71a5f14001294134947cdf6778fdf0712;hpb=0949d9991131d8fde35ab5fdd41a50a43a0dfd7f;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/CutModule/interface/CutModelMainPanel.cxx b/lib/maracasVisuLib/src/CutModule/interface/CutModelMainPanel.cxx index f29854d..a226519 100644 --- a/lib/maracasVisuLib/src/CutModule/interface/CutModelMainPanel.cxx +++ b/lib/maracasVisuLib/src/CutModule/interface/CutModelMainPanel.cxx @@ -1,17 +1,17 @@ /*========================================================================= - Program: wxMaracas - Module: $RCSfile: CutModelMainPanel.cxx,v $ - Language: C++ - Date: $Date: 2009/09/01 14:01:34 $ - Version: $Revision: 1.2 $ +Program: wxMaracas +Module: $RCSfile: CutModelMainPanel.cxx,v $ +Language: C++ +Date: $Date: 2010/04/29 16:05:33 $ +Version: $Revision: 1.10 $ - Copyright: (c) 2002, 2003 - License: +Copyright: (c) 2002, 2003 +License: - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notice for more information. =========================================================================*/ @@ -20,7 +20,8 @@ // EOF - wxMaracasMPR.cxx #include "CutModelMainPanel.h" - +#include "HistogramDialog.h" +#include "creaSystem.h" #include #include @@ -30,43 +31,57 @@ #include #include + + CutModelMainPanel* CutModelMainPanel::instance=NULL; -CutModelMainPanel::CutModelMainPanel( wxWindow* parent) +CutModelMainPanel::CutModelMainPanel( wxWindow* parent, std::string path) : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){ cutmanager=NULL; - - initialize(); + _isCheck=false; + _isFirstTime=true; + initialize(path); } -CutModelMainPanel::~CutModelMainPanel( ){ - - +CutModelMainPanel::~CutModelMainPanel( ){ + viewpanels.clear(); + delete cutmanager; } -void CutModelMainPanel::initialize(){ - cutmanager = new CutModelManager(); - +void CutModelMainPanel::initialize(std::string path){ + cutmanager = new CutModelManager(path); _panelid = 0; _wxauimanager = new wxAuiManager(this); - + wxAuiPaneInfo paneinfo; - _wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top()); + + //RaC 5-02-2010 Add tabs + _notebook = new wxAuiNotebook(this,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxAUI_NB_TOP |wxAUI_NB_TAB_MOVE | wxAUI_NB_SCROLL_BUTTONS); + + _notebook->AddPage(new ToolBarCutModel(_notebook),_T("Cutter"),true); + //_wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top()); + _wxauimanager->AddPane(_notebook,paneinfo.Center()); + addPolygonCutterTab(); + _notebook->Update(); _wxauimanager->Update(); } -CutModelMainPanel* CutModelMainPanel::getInstance(wxWindow* parent){ +CutModelMainPanel* CutModelMainPanel::getInstance(wxWindow* parent, std::string path){ if(instance==NULL){ - instance = new CutModelMainPanel(parent); + if(parent == NULL){ + parent = new wxFrame(); + } + instance = new CutModelMainPanel(parent, path); } return instance; } -CutModelMainPanel* CutModelMainPanel::getInstance(){ - return instance; -} +/*CutModelMainPanel* CutModelMainPanel::getInstance(){ +return instance; +}*/ + void CutModelMainPanel::setImageData(vtkImageData* img){ try{ @@ -87,7 +102,7 @@ void CutModelMainPanel::setInteractor(vtkRenderWindowInteractor* interactor){ } void CutModelMainPanel::setRenderer(vtkRenderer* renderer){ - try{ + try{ checkInvariant(); cutmanager->setRenderer(renderer); }catch(CutModelException e){ @@ -107,29 +122,75 @@ void CutModelMainPanel::showErrorDialog(std::string str){ } void CutModelMainPanel::RemoveActor(int id){ - try{ + try{ checkInvariant(); - for(int i = 0; i < viewpanels.size()-1;i++){ - if(viewpanels[i]->getId()==id){ - for(int j = i; j < viewpanels.size()-1;j++){ - viewpanels[j]=viewpanels[j+1]; + if(!this->IsBeingDeleted()){ + for(int i = 0; i < viewpanels.size()-1;i++){ + CutModelView* view = viewpanels[i]; + if(view->getId()==id){ + for(int j = i; j < viewpanels.size()-1;j++){ + viewpanels[j]=viewpanels[j+1]; + } + i = viewpanels.size(); } - i = viewpanels.size(); } - } - viewpanels.pop_back(); - - - cutmanager->RemoveActor(id); + viewpanels.pop_back(); + cutmanager->RemoveActor(id); + } }catch(CutModelException e){ showErrorDialog(e.getCause()); } } +//RaC +void CutModelMainPanel::onCheckChanged(){ + + if(_isFirstTime==true){ + _isFirstTime=false; + cutmanager->InitializePolygonInteractorStyle(); + } + + if(_isCheck==false) + { + _isCheck=true; + //Draw Polygon + + cutmanager->ParallelProjectionOn(); + btnExecutePolygonCut->Enable(false); + _notebook->GetPage(0)->Enable(false); + _radioinsideout->Enable(false); + lblMessagePolygon->SetLabel(_T("Drawing polygon...")); + } + else + { + _isCheck=false; + //Finish Drawing + cout<<"Finish Drawing"<ParallelProjectionOff(); + btnExecutePolygonCut->Enable(true); + _notebook->GetPage(0)->Enable(true); + _radioinsideout->Enable(true); + lblMessagePolygon->SetLabel(_T("Contour saved! Click on Execute Cut")); + } + + cutmanager->UpdatePolygon(_isCheck); + +} + + +//RaC +void CutModelMainPanel::onExecuteCutPolygon() +{ + //Cuts Polygon + cutmanager->ExecuteCutPolygon(_radioinsideout->GetSelection()); + lblMessagePolygon->SetLabel(_T("No contour drawed")); +} + + void CutModelMainPanel::onAddCutModel(){ - try{ + try{ checkInvariant(); int id = addNewViewPanel(); @@ -143,11 +204,14 @@ void CutModelMainPanel::onAddCutModel(){ showErrorDialog(e.getCause()); } } -void CutModelMainPanel::ShowCurrentPanel(int id){ - for(int i = 0; i < viewpanels.size();i++){ + +void CutModelMainPanel::ShowCurrentPanel(int id) +{ + int i; + for(i = 0; i < (int) viewpanels.size();i++){ if(viewpanels[i]->getId()==id){ _wxauimanager->GetPane(viewpanels[i]).Show(true); - cutmanager->RefreshActor(id); + cutmanager->RefreshActor(id); }else{ _wxauimanager->GetPane(viewpanels[i]).Show(false); } @@ -155,39 +219,57 @@ void CutModelMainPanel::ShowCurrentPanel(int id){ _wxauimanager->Update(); } int CutModelMainPanel::addNewViewPanel()throw( CutModelException){ - + CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange()); wxAuiPaneInfo paneinfo0; _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre()); - + viewpanel->setId(_panelid); viewpanels.push_back(viewpanel); return viewpanel->getId(); - - -} -CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException){ + +} +CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException) +{ CutModelView* current = NULL; - for(int i = 0; i < viewpanels.size();i++){ - if(viewpanels[i]->getId()==id){ - current = viewpanels[i]; + int i; + for(i = 0; i < (int)viewpanels.size();i++) + { + if(viewpanels[i]->getId()==id) + { + current = viewpanels[i]; } } - if(current == NULL){ + if(current == NULL) + { std::string s = "Id not found"; throw CutModelException(s); } return current; } -void CutModelMainPanel::onUndo(){ +void CutModelMainPanel::onUndo() + { + try{ + checkInvariant(); + /*int result = */ cutmanager->Undo(); // result unused// JPR + + }catch(CutModelException e){ + showErrorDialog(e.getCause()); + } } void CutModelMainPanel::onRedo(){ + try{ + checkInvariant(); + /*int result = */ cutmanager->Redo(); + }catch(CutModelException e){ + showErrorDialog(e.getCause()); + } } void CutModelMainPanel::changeOpacity(int id,int opacity){ @@ -201,7 +283,7 @@ void CutModelMainPanel::changeOpacity(int id,int opacity){ } void CutModelMainPanel::ShowViewBox(int id,bool check){ - try{ + try{ checkInvariant(); cutmanager->ShowViewBox(id, check); @@ -209,9 +291,11 @@ void CutModelMainPanel::ShowViewBox(int id,bool check){ showErrorDialog(e.getCause()); } } + void CutModelMainPanel::ShowPopUpMenu(int id){ showErrorDialog("test"); } + void CutModelMainPanel::changeColor(int id,double r,double g,double b){ try{ @@ -221,12 +305,12 @@ void CutModelMainPanel::changeColor(int id,double r,double g,double b){ }catch(CutModelException e){ showErrorDialog(e.getCause()); } - } + void CutModelMainPanel::ChangeShape(int id,int selection){ try{ checkInvariant(); - + cutmanager->ChangeShape(id, selection); }catch(CutModelException e){ @@ -234,9 +318,9 @@ void CutModelMainPanel::ChangeShape(int id,int selection){ } } void CutModelMainPanel::updateActorDirection(int id){ - try{ + try{ checkInvariant(); - + cutmanager->updateActorDirection(id); }catch(CutModelException e){ @@ -246,7 +330,8 @@ void CutModelMainPanel::updateActorDirection(int id){ void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){ try{ - checkInvariant(); + checkInvariant(); + cutmanager->ExecuteCut(id, range, isinside); }catch(CutModelException e){ showErrorDialog(e.getCause()); @@ -254,13 +339,14 @@ void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){ } void CutModelMainPanel::ExecuteAll(){ - for(int i = 0; i < viewpanels.size();i++){ + int i; + for(i = 0; i < (int)viewpanels.size(); i++){ viewpanels[i]->ExecuteCut(); } - } + vtkImageData* CutModelMainPanel::GetResultImage(){ - try{ + try{ checkInvariant(); return cutmanager->GetResultImage(); }catch(CutModelException e){ @@ -270,16 +356,75 @@ vtkImageData* CutModelMainPanel::GetResultImage(){ } void CutModelMainPanel::ShowStatistics(int id){ - + + checkInvariant(); + HistogramDialog *histo = new HistogramDialog(this, _T("Statistics")); + + histo->initializeHistogram(cutmanager->GetResultImage()); + + histo->ShowModal(); + + delete histo; +} + +void CutModelMainPanel::SaveCutModelData(std::string filename){ + cutmanager->SaveCutModelData(filename); +} + +void CutModelMainPanel::LoadCutModelData(std::string filename){ + cutmanager->LoadCutModelData(filename); +} + +void CutModelMainPanel::SetType(int type){ + _type = type; +} + +int CutModelMainPanel::GetType(){ + return _type; +} + +void CutModelMainPanel::addPolygonCutterTab(){ + wxPanel *panel = new wxPanel(_notebook); + panel->SetAutoLayout(true); + wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); + panel->SetSizer(sizer); + sizer->AddSpacer(20); + + wxCheckBox *item = new wxCheckBox(panel,10,_T("Draw Polygon"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("") ); + item->SetValue(false); + Connect(item->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onCheckChanged)); + sizer->Add(item, 0, wxALIGN_LEFT); + + lblMessagePolygon = new wxStaticText(panel,30,_T("No contour drawed"),wxDefaultPosition,wxDefaultSize,0,_T("") ); + sizer->Add(lblMessagePolygon, 0, wxALIGN_LEFT); + + wxString choices0[2]; + choices0[0] = _T("inside"); + choices0[1] = _T("outside"); + _radioinsideout = new wxRadioBox(panel,-1,_T(""), wxDefaultPosition, wxDefaultSize,2,choices0); + sizer->Add(_radioinsideout, wxALIGN_LEFT); + + btnExecutePolygonCut = new wxButton(panel,20,_T("Execute Cut"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("") ); + Connect(btnExecutePolygonCut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onExecuteCutPolygon)); + sizer->Add(btnExecutePolygonCut, 0, wxALIGN_LEFT); + + _notebook->AddPage(panel, _T("Polygon Cutter"), false); +} + +void PolygonCutterEventHandlerCutModel::onCheckChanged(wxCommandEvent& event){ + CutModelMainPanel::getInstance()->onCheckChanged(); +} + +void PolygonCutterEventHandlerCutModel::onExecuteCutPolygon(wxCommandEvent& event){ + CutModelMainPanel::getInstance()->onExecuteCutPolygon(); } + /** ** **/ - ToolBarCutModel::ToolBarCutModel(wxWindow * parent) : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize) { - wxBitmap bitmap10(Add_xpm); this->AddTool(10, wxString(_T("Add")),bitmap10); @@ -300,7 +445,6 @@ ToolBarCutModel::ToolBarCutModel(wxWindow * parent) _evthand = new ToolBarEventHandlerCutModel(); this->SetEventHandler(_evthand); - } ToolBarCutModel::~ToolBarCutModel(void){ @@ -328,11 +472,9 @@ void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){ CutModelMainPanel::getInstance()->ExecuteAll(); } - BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler) EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd) EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo) EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo) EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll) END_EVENT_TABLE() -