X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2FCutModule%2Finterface%2FCutModelMainPanel.cxx;h=f917adc1129203c094a8b35be586354b61d173b0;hb=5ee06060d12cfbb4096989a2c320fed39b898bde;hp=2991814153232b6e0f4aa64d6e9c9f253a093b6d;hpb=7efcf8b7c62b77ababdaf2c52c2b862597b0b129;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/CutModule/interface/CutModelMainPanel.cxx b/lib/maracasVisuLib/src/CutModule/interface/CutModelMainPanel.cxx index 2991814..f917adc 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/08 08:14:25 $ - Version: $Revision: 1.3 $ +Program: wxMaracas +Module: $RCSfile: CutModelMainPanel.cxx,v $ +Language: C++ +Date: $Date: 2010/09/29 21:21:03 $ +Version: $Revision: 1.11 $ - 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. =========================================================================*/ @@ -39,24 +39,31 @@ CutModelMainPanel::CutModelMainPanel( wxWindow* parent, std::string path) : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){ cutmanager=NULL; - + _isCheck=false; + _isFirstTime=true; initialize(path); } -CutModelMainPanel::~CutModelMainPanel( ){ - +CutModelMainPanel::~CutModelMainPanel( ){ + viewpanels.clear(); delete cutmanager; } 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(); } @@ -72,9 +79,10 @@ CutModelMainPanel* CutModelMainPanel::getInstance(wxWindow* parent, std::string } /*CutModelMainPanel* CutModelMainPanel::getInstance(){ - return instance; +return instance; }*/ + void CutModelMainPanel::setImageData(vtkImageData* img){ try{ checkInvariant(); @@ -94,7 +102,7 @@ void CutModelMainPanel::setInteractor(vtkRenderWindowInteractor* interactor){ } void CutModelMainPanel::setRenderer(vtkRenderer* renderer){ - try{ + try{ checkInvariant(); cutmanager->setRenderer(renderer); }catch(CutModelException e){ @@ -114,29 +122,76 @@ 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()){ + int i,j; + for(i = 0; i < (int)viewpanels.size()-1;i++){ + CutModelView* view = viewpanels[i]; + if(view->getId()==id){ + for(j = i; j < (int)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(); @@ -150,11 +205,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); } @@ -162,54 +220,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(); + /*int result = */ cutmanager->Undo(); // result unused// JPR }catch(CutModelException e){ showErrorDialog(e.getCause()); } - } void CutModelMainPanel::onRedo(){ - try{ checkInvariant(); - int result = cutmanager->Redo(); + /*int result = */ cutmanager->Redo(); }catch(CutModelException e){ showErrorDialog(e.getCause()); } - } void CutModelMainPanel::changeOpacity(int id,int opacity){ @@ -223,7 +284,7 @@ void CutModelMainPanel::changeOpacity(int id,int opacity){ } void CutModelMainPanel::ShowViewBox(int id,bool check){ - try{ + try{ checkInvariant(); cutmanager->ShowViewBox(id, check); @@ -231,9 +292,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{ @@ -243,12 +306,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){ @@ -256,9 +319,9 @@ void CutModelMainPanel::ChangeShape(int id,int selection){ } } void CutModelMainPanel::updateActorDirection(int id){ - try{ + try{ checkInvariant(); - + cutmanager->updateActorDirection(id); }catch(CutModelException e){ @@ -277,13 +340,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){ @@ -309,16 +373,59 @@ void CutModelMainPanel::SaveCutModelData(std::string filename){ } void CutModelMainPanel::LoadCutModelData(std::string filename){ - cutmanager->LoadCutModelData(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); @@ -339,7 +446,6 @@ ToolBarCutModel::ToolBarCutModel(wxWindow * parent) _evthand = new ToolBarEventHandlerCutModel(); this->SetEventHandler(_evthand); - } ToolBarCutModel::~ToolBarCutModel(void){ @@ -367,11 +473,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() -