/*========================================================================= Program: wxMaracas Module: $RCSfile: wxMaracasSurfaceRendering.cxx,v $ Language: C++ Date: $Date: 2010/01/21 13:54:15 $ Version: $Revision: 1.11 $ 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. =========================================================================*/ // EOF - wxMaracasMPR.cxx #include "wxMaracasSurfaceRendering.h" #include "wxMaracasSurfaceRenderingProp3DMHD.h" #include "wxMaracasSurfaceRenderingProp3D.h" #include #include #include #include wxMaracasSurfaceRendering* wxMaracasSurfaceRendering::instance=NULL; wxMaracasSurfaceRendering::wxMaracasSurfaceRendering( wxWindow* parent,std::string path) : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){ surrendmanager = new wxMaracasSurfaceRenderingManager(); wxauimanager = new wxAuiManager(this); _path = path; std::string iconsdir = path; iconsdir+="/data/Icons"; this->_toolb = new ToolBar(this,iconsdir); wxStaticText* txt = new wxStaticText(this, -1, wxString(_T(" Surface Rendering "))); wxAuiPaneInfo paneinfo; wxauimanager->AddPane(txt,paneinfo.ToolbarPane().Top()); wxauimanager->AddPane(_toolb,paneinfo.ToolbarPane().Top()); wxauimanager->Update(); createFileChooser(); } wxMaracasSurfaceRendering::~wxMaracasSurfaceRendering( ){ delete _toolb; } std::string wxMaracasSurfaceRendering::getPath(){ return _path; } void wxMaracasSurfaceRendering::createFileChooser(){ } wxMaracasSurfaceRendering* wxMaracasSurfaceRendering::getInstance(wxWindow* parent,std::string path){ if(instance==NULL){ instance = new wxMaracasSurfaceRendering(parent,path); } return instance; } wxMaracasSurfaceRendering* wxMaracasSurfaceRendering::getInstance(){ return instance; } void wxMaracasSurfaceRendering::setRenderer(vtkRenderer* renderer){ surrendmanager->setRenderer(renderer); } void wxMaracasSurfaceRendering::setInteractor(vtkRenderWindowInteractor* interactor){ surrendmanager->setInteractor(interactor); } void wxMaracasSurfaceRendering::addRemoveActor(int propid, bool addremove){ try{ surrendmanager->addRemoveActor(propid, addremove); } catch(char* str){ std::cout << "Exception : " << str << '\n'; wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR); diag->ShowModal(); delete diag; } } void wxMaracasSurfaceRendering::addRemoveSurfaceBox(int propid, bool addremove){ try{ surrendmanager->addRemoveSurfaceBox(propid, addremove); } catch(char* str){ std::cout << "Exception : " << str << '\n'; wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR); diag->ShowModal(); delete diag; } } void wxMaracasSurfaceRendering::changeOpacity(int _propid, int value){ try{ surrendmanager->changeOpacity(_propid,value); } catch(char* str){ std::cout << "Exception : " << str << '\n'; wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR); diag->ShowModal(); delete diag; } } void wxMaracasSurfaceRendering::changeIsoValue(int propid, double value){ try{ surrendmanager->changeIsoValue(propid, value); } catch(char* str){ std::cout << "Exception : " << str << '\n'; wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR); diag->ShowModal(); delete diag; } } void wxMaracasSurfaceRendering::changeColor(int propid, double red, double green, double blue){ try{ surrendmanager->changeColor(propid, red, green, blue); }catch(char* str){ wxString s( str,wxConvUTF8 ); wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR); diag->ShowModal(); delete diag; } } void wxMaracasSurfaceRendering::onLoadImageFile(){ wxString mhd(_T("mhd")); wxString stl(_T("stl")); wxFileDialog* fildial = new wxFileDialog(this, wxString(_T("Select a STL file")),wxString(_T("")), wxString(_T("")),wxString(_T("STL files (*.stl)|*.stl|MHD files (*.mhd)|*.mhd")) ); if(fildial->ShowModal()==wxID_OK){ wxString filename = fildial->GetFilename(); wxString pathfile(fildial->GetDirectory() + _T("/") + filename); if(filename.EndsWith(mhd)) { loadPropMHD(pathfile,filename); } else if(filename.EndsWith(stl)){ loadProp3D(pathfile,filename); } } delete fildial; } void wxMaracasSurfaceRendering::loadPropMHD(wxString filename, wxString dataname){ std::string s = std::string(filename.mb_str()); vtkImageData* img = surrendmanager->getImageData(s); if(img!=NULL){ s = std::string(dataname.mb_str()); addPropMHD(img, s); } } void wxMaracasSurfaceRendering::addPropMHD(vtkImageData* imgdata, std::string dataname){ try{ int id = surrendmanager->addPropMHD(-1, imgdata,dataname); if(id!=-1){ wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(this, id, false, -1); int maxiso = surrendmanager->getMaxIsoValue(id); ((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso); addSurfaceRenderingPanel(controlpan, dataname); } }catch(char* str){ std::cout << "Exception : " << str << '\n'; wxMessageDialog* diag = new wxMessageDialog(this, wxString( str,wxConvUTF8 ), wxString( str,wxConvUTF8 ), wxICON_ERROR); diag->ShowModal(); delete diag; } } void wxMaracasSurfaceRendering::loadProp3D(wxString filename, wxString dataname){ std::string s = std::string(filename.mb_str()); vtkProp3D* prop3D = surrendmanager->getProp3D(s); if(prop3D != NULL){ s = std::string(dataname.mb_str() ); this->addProp3D(prop3D,s); }else{ //TODO msj to the user indicating error in file } } void wxMaracasSurfaceRendering::addProp3D(vtkProp3D* prop3D, std::string dataname){ try{ int id = surrendmanager->addProp3D(-1, prop3D,dataname); if(id!=-1){ wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3D(this, id, false, -1); addSurfaceRenderingPanel(controlpan, dataname); } }catch(char* str){ std::cout << "Exception : " << str << '\n'; wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR); diag->ShowModal(); delete diag; } } void wxMaracasSurfaceRendering::addSurfaceRenderingPanel(wxMaracasSurfaceRenderingPanel* surrend, std::string dataname){ wxString s(dataname.c_str(),wxConvUTF8 ); wxAuiPaneInfo paneinfo; wxauimanager->AddPane(surrend, paneinfo.DefaultPane().Centre().DestroyOnClose().Caption(s)); wxauimanager->Update(); } void wxMaracasSurfaceRendering::deleteActor(int propid){ try{ surrendmanager->deleteActor(propid); }catch(char* str){ //CPR std::cout << "Exception : " << str << '\n'; wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR); diag->ShowModal(); delete diag; } } bool wxMaracasSurfaceRendering::interactorSet(){ return surrendmanager->interactorSet(); } /** ** **/ ToolBar::ToolBar(wxWindow * parent,std::string iconsdir) : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize) { std::string iconfil = iconsdir; //iconfil+= "/OpenImage.png"; //wxBitmap* bitmap0 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG); wxBitmap bitmap0(OpenImage_xpm); this->AddTool(1, wxString(_T("test")),bitmap0, NULL, wxITEM_NORMAL, wxString(_T("Open File"))); /*iconfil+= "/Open.png"; wxBitmap* bitmap2 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG); this->AddTool(2, wxString(_T("test")),*bitmap2); */ /*iconfil = iconsdir; iconfil+= "/Open.png"; wxBitmap* bitmap30 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG); this->AddTool(30, wxString(_T("test")),*bitmap30);*/ this->Realize(); _evthand = new ToolBarEventHandler(); this->SetEventHandler(_evthand); } ToolBar::~ToolBar(void){ } ToolBarEventHandler::ToolBarEventHandler() : wxEvtHandler(){ } ToolBarEventHandler::~ToolBarEventHandler(){ } void ToolBarEventHandler::onLoadImageFile(wxCommandEvent& event){ wxMaracasSurfaceRendering::getInstance()->onLoadImageFile(); } BEGIN_EVENT_TABLE(ToolBarEventHandler, wxEvtHandler) EVT_MENU(1, ToolBarEventHandler::onLoadImageFile) END_EVENT_TABLE()