1 /*=========================================================================
4 Module: $RCSfile: CutModelMainPanel.cxx,v $
6 Date: $Date: 2009/08/31 08:46:09 $
7 Version: $Revision: 1.1 $
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);
151 _wxauimanager->GetPane(viewpanels[i]).Show(false);
154 _wxauimanager->Update();
156 int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
158 CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
160 wxAuiPaneInfo paneinfo0;
161 _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre());
163 viewpanel->setId(_panelid);
164 viewpanels.push_back(viewpanel);
166 return viewpanel->getId();
170 CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException){
172 CutModelView* current = NULL;
173 for(int i = 0; i < viewpanels.size();i++){
174 if(viewpanels[i]->getId()==id){
175 current = viewpanels[i];
179 std::string s = "Id not found";
180 throw CutModelException(s);
184 void CutModelMainPanel::onUndo(){
188 void CutModelMainPanel::onRedo(){
192 void CutModelMainPanel::changeOpacity(int id,int opacity){
195 cutmanager->changeOpacity(id, opacity);
197 }catch(CutModelException e){
198 showErrorDialog(e.getCause());
202 void CutModelMainPanel::ShowViewBox(int id,bool check){
205 cutmanager->ShowViewBox(id, check);
207 }catch(CutModelException e){
208 showErrorDialog(e.getCause());
211 void CutModelMainPanel::ShowPopUpMenu(int id){
212 showErrorDialog("test");
214 void CutModelMainPanel::changeColor(int id,double r,double g,double b){
218 cutmanager->changeColor(id, r, g, b);
220 }catch(CutModelException e){
221 showErrorDialog(e.getCause());
225 void CutModelMainPanel::ChangeShape(int id,int selection){
229 cutmanager->ChangeShape(id, selection);
231 }catch(CutModelException e){
232 showErrorDialog(e.getCause());
235 void CutModelMainPanel::updateActorDirection(int id){
239 cutmanager->updateActorDirection(id);
241 }catch(CutModelException e){
242 showErrorDialog(e.getCause());
246 void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){
249 cutmanager->ExecuteCut(id, range, isinside);
250 }catch(CutModelException e){
251 showErrorDialog(e.getCause());
255 void CutModelMainPanel::ExecuteAll(){
256 for(int i = 0; i < viewpanels.size();i++){
257 viewpanels[i]->ExecuteCut();
261 vtkImageData* CutModelMainPanel::GetResultImage(){
264 return cutmanager->GetResultImage();
265 }catch(CutModelException e){
266 showErrorDialog(e.getCause());
274 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
275 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
278 wxBitmap bitmap10(Add_xpm);
279 this->AddTool(10, wxString(_T("Add")),bitmap10);
281 this->AddSeparator();
283 wxBitmap bitmap20(Undo_xpm);
284 this->AddTool(20, wxString(_T("Undo")),bitmap20);
286 wxBitmap bitmap30(Redo_xpm);
287 this->AddTool(30, wxString(_T("Redo")),bitmap30);
289 this->AddSeparator();
291 wxBitmap bitmap40(OkAll_xpm);
292 this->AddTool(40, wxString(_T("Ok All")),bitmap40);
296 _evthand = new ToolBarEventHandlerCutModel();
297 this->SetEventHandler(_evthand);
301 ToolBarCutModel::~ToolBarCutModel(void){
304 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
307 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
310 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
311 CutModelMainPanel::getInstance()->onAddCutModel();
314 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
315 CutModelMainPanel::getInstance()->onUndo();
318 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
319 CutModelMainPanel::getInstance()->onRedo();
322 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
323 CutModelMainPanel::getInstance()->ExecuteAll();
327 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
328 EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
329 EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
330 EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
331 EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)