1 /*=========================================================================
4 Module: $RCSfile: CutModelMainPanel.cxx,v $
6 Date: $Date: 2009/09/01 14:01:34 $
7 Version: $Revision: 1.2 $
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"
25 #include <wx/colordlg.h>
26 #include <wx/bmpbuttn.h>
33 CutModelMainPanel* CutModelMainPanel::instance=NULL;
35 CutModelMainPanel::CutModelMainPanel( wxWindow* parent)
36 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
43 CutModelMainPanel::~CutModelMainPanel( ){
48 void CutModelMainPanel::initialize(){
49 cutmanager = new CutModelManager();
52 _wxauimanager = new wxAuiManager(this);
54 wxAuiPaneInfo paneinfo;
55 _wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top());
57 _wxauimanager->Update();
60 CutModelMainPanel* CutModelMainPanel::getInstance(wxWindow* parent){
62 instance = new CutModelMainPanel(parent);
67 CutModelMainPanel* CutModelMainPanel::getInstance(){
71 void CutModelMainPanel::setImageData(vtkImageData* img){
74 cutmanager->setImageData(img);
75 }catch(CutModelException e){
76 showErrorDialog(e.getCause());
80 void CutModelMainPanel::setInteractor(vtkRenderWindowInteractor* interactor){
83 cutmanager->setInteractor(interactor);
84 }catch(CutModelException e){
85 showErrorDialog(e.getCause());
89 void CutModelMainPanel::setRenderer(vtkRenderer* renderer){
92 cutmanager->setRenderer(renderer);
93 }catch(CutModelException e){
94 showErrorDialog(e.getCause());
98 void CutModelMainPanel::checkInvariant()throw (CutModelException){
100 throw CutModelException("The manager is not initialize");
104 void CutModelMainPanel::showErrorDialog(std::string str){
105 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str.c_str(),wxConvUTF8 ), wxString(str.c_str(),wxConvUTF8 ), wxICON_ERROR);
109 void CutModelMainPanel::RemoveActor(int id){
113 for(int i = 0; i < viewpanels.size()-1;i++){
114 if(viewpanels[i]->getId()==id){
115 for(int j = i; j < viewpanels.size()-1;j++){
116 viewpanels[j]=viewpanels[j+1];
118 i = viewpanels.size();
121 viewpanels.pop_back();
124 cutmanager->RemoveActor(id);
126 }catch(CutModelException e){
127 showErrorDialog(e.getCause());
131 void CutModelMainPanel::onAddCutModel(){
135 int id = addNewViewPanel();
136 cutmanager->onAddCutModel(id, getModelView(id));
140 ShowCurrentPanel(id);
142 }catch(CutModelException e){
143 showErrorDialog(e.getCause());
146 void CutModelMainPanel::ShowCurrentPanel(int id){
147 for(int i = 0; i < viewpanels.size();i++){
148 if(viewpanels[i]->getId()==id){
149 _wxauimanager->GetPane(viewpanels[i]).Show(true);
150 cutmanager->RefreshActor(id);
152 _wxauimanager->GetPane(viewpanels[i]).Show(false);
155 _wxauimanager->Update();
157 int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
159 CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
161 wxAuiPaneInfo paneinfo0;
162 _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre());
164 viewpanel->setId(_panelid);
165 viewpanels.push_back(viewpanel);
167 return viewpanel->getId();
171 CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException){
173 CutModelView* current = NULL;
174 for(int i = 0; i < viewpanels.size();i++){
175 if(viewpanels[i]->getId()==id){
176 current = viewpanels[i];
180 std::string s = "Id not found";
181 throw CutModelException(s);
185 void CutModelMainPanel::onUndo(){
189 void CutModelMainPanel::onRedo(){
193 void CutModelMainPanel::changeOpacity(int id,int opacity){
196 cutmanager->changeOpacity(id, opacity);
198 }catch(CutModelException e){
199 showErrorDialog(e.getCause());
203 void CutModelMainPanel::ShowViewBox(int id,bool check){
206 cutmanager->ShowViewBox(id, check);
208 }catch(CutModelException e){
209 showErrorDialog(e.getCause());
212 void CutModelMainPanel::ShowPopUpMenu(int id){
213 showErrorDialog("test");
215 void CutModelMainPanel::changeColor(int id,double r,double g,double b){
219 cutmanager->changeColor(id, r, g, b);
221 }catch(CutModelException e){
222 showErrorDialog(e.getCause());
226 void CutModelMainPanel::ChangeShape(int id,int selection){
230 cutmanager->ChangeShape(id, selection);
232 }catch(CutModelException e){
233 showErrorDialog(e.getCause());
236 void CutModelMainPanel::updateActorDirection(int id){
240 cutmanager->updateActorDirection(id);
242 }catch(CutModelException e){
243 showErrorDialog(e.getCause());
247 void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){
250 cutmanager->ExecuteCut(id, range, isinside);
251 }catch(CutModelException e){
252 showErrorDialog(e.getCause());
256 void CutModelMainPanel::ExecuteAll(){
257 for(int i = 0; i < viewpanels.size();i++){
258 viewpanels[i]->ExecuteCut();
262 vtkImageData* CutModelMainPanel::GetResultImage(){
265 return cutmanager->GetResultImage();
266 }catch(CutModelException e){
267 showErrorDialog(e.getCause());
272 void CutModelMainPanel::ShowStatistics(int id){
279 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
280 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
283 wxBitmap bitmap10(Add_xpm);
284 this->AddTool(10, wxString(_T("Add")),bitmap10);
286 this->AddSeparator();
288 wxBitmap bitmap20(Undo_xpm);
289 this->AddTool(20, wxString(_T("Undo")),bitmap20);
291 wxBitmap bitmap30(Redo_xpm);
292 this->AddTool(30, wxString(_T("Redo")),bitmap30);
294 this->AddSeparator();
296 wxBitmap bitmap40(OkAll_xpm);
297 this->AddTool(40, wxString(_T("Ok All")),bitmap40);
301 _evthand = new ToolBarEventHandlerCutModel();
302 this->SetEventHandler(_evthand);
306 ToolBarCutModel::~ToolBarCutModel(void){
309 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
312 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
315 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
316 CutModelMainPanel::getInstance()->onAddCutModel();
319 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
320 CutModelMainPanel::getInstance()->onUndo();
323 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
324 CutModelMainPanel::getInstance()->onRedo();
327 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
328 CutModelMainPanel::getInstance()->ExecuteAll();
332 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
333 EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
334 EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
335 EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
336 EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)