CutModelMainPanel.cxx

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003 Program:   wxMaracas
00004 Module:    $RCSfile: CutModelMainPanel.cxx,v $
00005 Language:  C++
00006 Date:      $Date: 2010/03/05 17:54:39 $
00007 Version:   $Revision: 1.7 $
00008 
00009 Copyright: (c) 2002, 2003
00010 License:
00011 
00012 This software is distributed WITHOUT ANY WARRANTY; without even
00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00014 PURPOSE.  See the above copyright notice for more information.
00015 
00016 =========================================================================*/
00017 
00018 
00019 
00020 // EOF - wxMaracasMPR.cxx
00021 
00022 #include "CutModelMainPanel.h"
00023 #include "HistogramDialog.h"
00024 #include "creaSystem.h"
00025 
00026 #include <wx/colordlg.h>
00027 #include <wx/bmpbuttn.h>
00028 
00029 #include <Add.xpm>
00030 #include <Undo.xpm>
00031 #include <Redo.xpm>
00032 #include <OkAll.xpm>
00033 
00034 
00035 
00036 CutModelMainPanel* CutModelMainPanel::instance=NULL;
00037 
00038 CutModelMainPanel::CutModelMainPanel( wxWindow* parent, std::string path)
00039 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
00040 
00041         cutmanager=NULL;
00042         _isCheck=false;
00043         _isFirstTime=true;
00044         initialize(path);
00045 
00046 }
00047 CutModelMainPanel::~CutModelMainPanel( ){       
00048         viewpanels.clear();
00049         delete cutmanager;
00050 }
00051 
00052 void CutModelMainPanel::initialize(std::string path){
00053         cutmanager = new CutModelManager(path);
00054         _panelid = 0;
00055         _wxauimanager = new wxAuiManager(this); 
00056 
00057         wxAuiPaneInfo paneinfo;
00058 
00059         //RaC 5-02-2010 Add tabs
00060         _notebook = new wxAuiNotebook(this,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxAUI_NB_TOP |wxAUI_NB_TAB_MOVE | wxAUI_NB_SCROLL_BUTTONS);
00061 
00062         _notebook->AddPage(new ToolBarCutModel(_notebook),_T("Cutter"),true);
00063         //_wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top());       
00064         _wxauimanager->AddPane(_notebook,paneinfo.Center());
00065         addPolygonCutterTab();
00066         _notebook->Update();
00067 
00068         _wxauimanager->Update();
00069 }
00070 
00071 CutModelMainPanel* CutModelMainPanel::getInstance(wxWindow* parent, std::string path){
00072         if(instance==NULL){
00073                 if(parent == NULL){
00074                         parent = new wxFrame();
00075                 }
00076                 instance = new CutModelMainPanel(parent, path);
00077         }
00078         return instance;
00079 }
00080 
00081 /*CutModelMainPanel* CutModelMainPanel::getInstance(){
00082 return instance;
00083 }*/
00084 
00085 
00086 void CutModelMainPanel::setImageData(vtkImageData* img){
00087         try{
00088                 checkInvariant();
00089                 cutmanager->setImageData(img);
00090         }catch(CutModelException e){
00091                 showErrorDialog(e.getCause());
00092         }
00093 }
00094 
00095 void CutModelMainPanel::setInteractor(vtkRenderWindowInteractor* interactor){
00096         try{
00097                 checkInvariant();
00098                 cutmanager->setInteractor(interactor);
00099         }catch(CutModelException e){
00100                 showErrorDialog(e.getCause());
00101         }
00102 }
00103 
00104 void CutModelMainPanel::setRenderer(vtkRenderer* renderer){
00105         try{
00106                 checkInvariant();
00107                 cutmanager->setRenderer(renderer);
00108         }catch(CutModelException e){
00109                 showErrorDialog(e.getCause());
00110         }
00111 }
00112 
00113 void CutModelMainPanel::checkInvariant()throw (CutModelException){
00114         if(cutmanager==NULL){
00115                 throw CutModelException("The manager is not initialize");
00116         }       
00117 }
00118 
00119 void CutModelMainPanel::showErrorDialog(std::string str){       
00120         wxMessageDialog* diag = new wxMessageDialog(this, wxString(str.c_str(),wxConvUTF8 ), wxString(str.c_str(),wxConvUTF8 ), wxICON_ERROR);
00121         diag->ShowModal();
00122 }
00123 
00124 void CutModelMainPanel::RemoveActor(int id){
00125         try{
00126                 checkInvariant();
00127 
00128                 if(!this->IsBeingDeleted()){
00129                         for(int i = 0; i < viewpanels.size()-1;i++){
00130                                 CutModelView* view = viewpanels[i];
00131                                 if(view->getId()==id){
00132                                         for(int j = i; j < viewpanels.size()-1;j++){
00133                                                 viewpanels[j]=viewpanels[j+1];
00134                                         }
00135                                         i = viewpanels.size();
00136                                 }
00137                         }
00138                         viewpanels.pop_back();
00139                         cutmanager->RemoveActor(id);
00140                 }       
00141 
00142         }catch(CutModelException e){
00143                 showErrorDialog(e.getCause());
00144         }
00145 }
00146 
00147 //RaC
00148 void CutModelMainPanel::onCheckChanged(){
00149 
00150         if(_isFirstTime==true){
00151                 _isFirstTime=false;
00152                 cutmanager->InitializePolygonInteractorStyle();
00153         }
00154 
00155         if(_isCheck==false)
00156         {       
00157                 _isCheck=true;
00158                 //Draw Polygon
00159 
00160                 cutmanager->ParallelProjectionOn();
00161                 btnExecutePolygonCut->Enable(false);
00162                 _notebook->GetPage(0)->Enable(false);
00163                 _radioinsideout->Enable(false);
00164                 lblMessagePolygon->SetLabel(_T("Drawing polygon..."));
00165         }
00166         else
00167         {       
00168                 _isCheck=false;
00169                 //Finish Drawing
00170                 cout<<"Finish Drawing"<<endl;
00171                 cutmanager->ParallelProjectionOff();
00172                 btnExecutePolygonCut->Enable(true);
00173                 _notebook->GetPage(0)->Enable(true);
00174                 _radioinsideout->Enable(true);
00175                 lblMessagePolygon->SetLabel(_T("Contour saved! Click on Execute Cut"));
00176         }
00177 
00178         cutmanager->UpdatePolygon(_isCheck);
00179 
00180 }
00181 
00182 
00183 //RaC
00184 void CutModelMainPanel::onExecuteCutPolygon()
00185 {
00186         //Cuts Polygon
00187         cutmanager->ExecuteCutPolygon(_radioinsideout->GetSelection());
00188         lblMessagePolygon->SetLabel(_T("No contour drawed"));
00189 }
00190 
00191 
00192 void CutModelMainPanel::onAddCutModel(){
00193         try{
00194                 checkInvariant();
00195 
00196                 int id = addNewViewPanel();             
00197                 cutmanager->onAddCutModel(id, getModelView(id));
00198 
00199                 _panelid++;
00200 
00201                 ShowCurrentPanel(id);
00202 
00203         }catch(CutModelException e){
00204                 showErrorDialog(e.getCause());
00205         }
00206 }
00207 
00208 void CutModelMainPanel::ShowCurrentPanel(int id)
00209 {
00210         int i;
00211         for(i = 0; i < (int) viewpanels.size();i++){            
00212                 if(viewpanels[i]->getId()==id){
00213                         _wxauimanager->GetPane(viewpanels[i]).Show(true);
00214                         cutmanager->RefreshActor(id);
00215                 }else{
00216                         _wxauimanager->GetPane(viewpanels[i]).Show(false);
00217                 }
00218         }
00219         _wxauimanager->Update();
00220 }
00221 int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
00222 
00223         CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
00224 
00225         wxAuiPaneInfo paneinfo0;
00226         _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre());   
00227 
00228         viewpanel->setId(_panelid);
00229         viewpanels.push_back(viewpanel);        
00230 
00231         return viewpanel->getId();
00232 
00233 
00234 }
00235 CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException)
00236 {
00237         CutModelView* current = NULL;
00238         int i;
00239         for(i = 0; i < (int)viewpanels.size();i++)
00240         {
00241                 if(viewpanels[i]->getId()==id)
00242                 {
00243                         current = viewpanels[i];
00244                 }
00245         }
00246         if(current == NULL)
00247         {
00248                 std::string s = "Id not found";
00249                 throw CutModelException(s);
00250         }
00251         return current;
00252 }
00253 
00254 void CutModelMainPanel::onUndo()
00255         {
00256         try{
00257                 checkInvariant();               
00258                 int result = cutmanager->Undo();
00259 
00260         }catch(CutModelException e){
00261                 showErrorDialog(e.getCause());
00262         }
00263 
00264 }
00265 
00266 void CutModelMainPanel::onRedo(){
00267 
00268         try{
00269                 checkInvariant();               
00270                 int result = cutmanager->Redo();
00271 
00272         }catch(CutModelException e){
00273                 showErrorDialog(e.getCause());
00274         }
00275 
00276 }
00277 
00278 void CutModelMainPanel::changeOpacity(int id,int opacity){
00279         try{
00280                 checkInvariant();               
00281                 cutmanager->changeOpacity(id, opacity);
00282 
00283         }catch(CutModelException e){
00284                 showErrorDialog(e.getCause());
00285         }
00286 }
00287 
00288 void CutModelMainPanel::ShowViewBox(int id,bool check){
00289         try{
00290                 checkInvariant();               
00291                 cutmanager->ShowViewBox(id, check);
00292 
00293         }catch(CutModelException e){
00294                 showErrorDialog(e.getCause());
00295         }
00296 }
00297 void CutModelMainPanel::ShowPopUpMenu(int id){
00298         showErrorDialog("test");
00299 }
00300 void CutModelMainPanel::changeColor(int id,double r,double g,double b){
00301 
00302         try{
00303                 checkInvariant();               
00304                 cutmanager->changeColor(id, r, g, b);
00305 
00306         }catch(CutModelException e){
00307                 showErrorDialog(e.getCause());
00308         }
00309 
00310 }
00311 void CutModelMainPanel::ChangeShape(int id,int selection){
00312         try{
00313                 checkInvariant();
00314 
00315                 cutmanager->ChangeShape(id, selection);
00316 
00317         }catch(CutModelException e){
00318                 showErrorDialog(e.getCause());
00319         }
00320 }
00321 void CutModelMainPanel::updateActorDirection(int id){
00322         try{
00323                 checkInvariant();
00324 
00325                 cutmanager->updateActorDirection(id);
00326 
00327         }catch(CutModelException e){
00328                 showErrorDialog(e.getCause());
00329         }
00330 }
00331 
00332 void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){
00333         try{
00334                 checkInvariant();               
00335 
00336                 cutmanager->ExecuteCut(id, range, isinside);
00337         }catch(CutModelException e){
00338                 showErrorDialog(e.getCause());
00339         }
00340 }
00341 
00342 void CutModelMainPanel::ExecuteAll(){
00343         int i;
00344         for(i = 0; i < (int)viewpanels.size(); i++){
00345                 viewpanels[i]->ExecuteCut();
00346         }
00347 
00348 }
00349 vtkImageData* CutModelMainPanel::GetResultImage(){
00350         try{
00351                 checkInvariant();
00352                 return cutmanager->GetResultImage();
00353         }catch(CutModelException e){
00354                 showErrorDialog(e.getCause());
00355         }
00356         return NULL;
00357 }
00358 
00359 void CutModelMainPanel::ShowStatistics(int id){
00360 
00361         checkInvariant();
00362         HistogramDialog *histo = new HistogramDialog(this, _T("Statistics"));
00363 
00364         histo->initializeHistogram(cutmanager->GetResultImage());
00365 
00366         histo->ShowModal();
00367 
00368         delete histo;
00369 }
00370 
00371 void CutModelMainPanel::SaveCutModelData(std::string filename){
00372         cutmanager->SaveCutModelData(filename);
00373 }
00374 
00375 void CutModelMainPanel::LoadCutModelData(std::string filename){
00376         cutmanager->LoadCutModelData(filename);
00377 }
00378 
00379 void CutModelMainPanel::SetType(int type){
00380         _type = type;
00381 }
00382 
00383 int CutModelMainPanel::GetType(){
00384         return _type;
00385 }
00386 
00387 void CutModelMainPanel::addPolygonCutterTab(){
00388         wxPanel *panel = new wxPanel(_notebook);
00389         panel->SetAutoLayout(true);
00390         wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); 
00391         panel->SetSizer(sizer);
00392         sizer->AddSpacer(20);
00393 
00394         wxCheckBox *item = new wxCheckBox(panel,10,_T("Draw Polygon"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("") );
00395         item->SetValue(false);
00396         Connect(item->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onCheckChanged));
00397         sizer->Add(item, 0, wxALIGN_LEFT);
00398 
00399         lblMessagePolygon = new wxStaticText(panel,30,_T("No contour drawed"),wxDefaultPosition,wxDefaultSize,0,_T("") );
00400         sizer->Add(lblMessagePolygon, 0, wxALIGN_LEFT);
00401 
00402         wxString choices0[2];
00403         choices0[0] = _T("inside");
00404         choices0[1] = _T("outside");
00405         _radioinsideout = new  wxRadioBox(panel,-1,_T(""), wxDefaultPosition, wxDefaultSize,2,choices0);
00406         sizer->Add(_radioinsideout, wxALIGN_LEFT);
00407 
00408         btnExecutePolygonCut = new wxButton(panel,20,_T("Execute Cut"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("") );
00409         Connect(btnExecutePolygonCut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onExecuteCutPolygon));  
00410         sizer->Add(btnExecutePolygonCut, 0, wxALIGN_LEFT);
00411 
00412 
00413         _notebook->AddPage(panel, _T("Polygon Cutter"), false);
00414 
00415 }
00416 
00417 
00418 void PolygonCutterEventHandlerCutModel::onCheckChanged(wxCommandEvent& event){
00419         CutModelMainPanel::getInstance()->onCheckChanged();
00420 }
00421 
00422 void PolygonCutterEventHandlerCutModel::onExecuteCutPolygon(wxCommandEvent& event){
00423         CutModelMainPanel::getInstance()->onExecuteCutPolygon();
00424 }
00425 
00426 
00427 
00431 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
00432 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
00433 {
00434         wxBitmap bitmap10(Add_xpm);
00435         this->AddTool(10, wxString(_T("Add")),bitmap10);
00436 
00437         this->AddSeparator();
00438 
00439         wxBitmap bitmap20(Undo_xpm);
00440         this->AddTool(20, wxString(_T("Undo")),bitmap20);
00441 
00442         wxBitmap bitmap30(Redo_xpm);
00443         this->AddTool(30, wxString(_T("Redo")),bitmap30);       
00444 
00445         this->AddSeparator();
00446 
00447         wxBitmap bitmap40(OkAll_xpm);
00448         this->AddTool(40, wxString(_T("Ok All")),bitmap40);     
00449 
00450         this->Realize();
00451 
00452         _evthand = new ToolBarEventHandlerCutModel();
00453         this->SetEventHandler(_evthand);
00454 
00455 }
00456 
00457 ToolBarCutModel::~ToolBarCutModel(void){
00458 }
00459 
00460 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
00461 : wxEvtHandler(){
00462 }
00463 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
00464 }
00465 
00466 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
00467         CutModelMainPanel::getInstance()->onAddCutModel();
00468 }
00469 
00470 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
00471         CutModelMainPanel::getInstance()->onUndo();     
00472 }
00473 
00474 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
00475         CutModelMainPanel::getInstance()->onRedo();
00476 }
00477 
00478 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
00479         CutModelMainPanel::getInstance()->ExecuteAll();
00480 }
00481 
00482 
00483 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
00484         EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
00485         EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
00486         EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
00487         EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)
00488 END_EVENT_TABLE()
00489 

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1