X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxMaracasSurfaceRendering.cxx;fp=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxMaracasSurfaceRendering.cxx;h=baf18a76f04eb363ce7a4e9e2cba2267a724d5d3;hb=52134c6f15827d0ae9ea8cf0ffaa15867ab87dcc;hp=0000000000000000000000000000000000000000;hpb=2890cab0524520113fd791f61c59e53e2e53b75f;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasSurfaceRendering.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasSurfaceRendering.cxx new file mode 100644 index 0000000..baf18a7 --- /dev/null +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasSurfaceRendering.cxx @@ -0,0 +1,270 @@ +/*========================================================================= + + Program: wxMaracas + Module: $RCSfile: wxMaracasSurfaceRendering.cxx,v $ + Language: C++ + Date: $Date: 2009/10/15 11:56:43 $ + Version: $Revision: 1.1 $ + + 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 "wxMaracasSurfaceRenderingPanel.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::addRemoveActor(int propid, bool addremove){ + surrendmanager->addRemoveActor(propid, addremove); +} + +void wxMaracasSurfaceRendering::changeOpacity(int _propid, int value){ + surrendmanager->changeOpacity(_propid,value); +} + +void wxMaracasSurfaceRendering::changeIsoValue(int propid, double value){ + surrendmanager->changeIsoValue(propid, value); +} + +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(imgdata,dataname); + if(id!=-1){ + + wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(this, id); + 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(); + + } +} + +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(prop3D,dataname); + if(id!=-1){ + wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3D(this, id); + 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(); + } + +} +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* e){ + + } +} + + + + + +/** +** +**/ + +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() + +