00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "wxMaracasSurfaceRendering.h"
00021 #include "wxMaracasSurfaceRenderingProp3DMHD.h"
00022 #include "wxMaracasSurfaceRenderingProp3D.h"
00023
00024 #include <wx/colordlg.h>
00025 #include <wx/bmpbuttn.h>
00026
00027 #include <OpenImage.xpm>
00028 #include <Color.xpm>
00029
00030 wxMaracasSurfaceRendering* wxMaracasSurfaceRendering::instance=NULL;
00031
00032 wxMaracasSurfaceRendering::wxMaracasSurfaceRendering( wxWindow* parent,std::string path)
00033 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
00034
00035 surrendmanager = new wxMaracasSurfaceRenderingManager();
00036
00037 wxauimanager = new wxAuiManager(this);
00038
00039 _path = path;
00040
00041 std::string iconsdir = path;
00042 iconsdir+="/data/Icons";
00043 this->_toolb = new ToolBar(this,iconsdir);
00044
00045 wxStaticText* txt = new wxStaticText(this, -1, wxString(_T(" Surface Rendering ")));
00046 wxAuiPaneInfo paneinfo;
00047 wxauimanager->AddPane(txt,paneinfo.ToolbarPane().Top());
00048 wxauimanager->AddPane(_toolb,paneinfo.ToolbarPane().Top());
00049
00050 wxauimanager->Update();
00051 createFileChooser();
00052 }
00053 wxMaracasSurfaceRendering::~wxMaracasSurfaceRendering( ){
00054 delete _toolb;
00055 }
00056
00057 std::string wxMaracasSurfaceRendering::getPath(){
00058 return _path;
00059 }
00060
00061 void wxMaracasSurfaceRendering::createFileChooser(){
00062
00063 }
00064
00065 wxMaracasSurfaceRendering* wxMaracasSurfaceRendering::getInstance(wxWindow* parent,std::string path){
00066 if(instance==NULL){
00067 instance = new wxMaracasSurfaceRendering(parent,path);
00068 }
00069 return instance;
00070 }
00071
00072 wxMaracasSurfaceRendering* wxMaracasSurfaceRendering::getInstance(){
00073 return instance;
00074 }
00075
00076 void wxMaracasSurfaceRendering::setRenderer(vtkRenderer* renderer){
00077 surrendmanager->setRenderer(renderer);
00078 }
00079
00080 void wxMaracasSurfaceRendering::setInteractor(vtkRenderWindowInteractor* interactor){
00081 surrendmanager->setInteractor(interactor);
00082 }
00083
00084 void wxMaracasSurfaceRendering::addRemoveActor(int propid, bool addremove){
00085 try{
00086 surrendmanager->addRemoveActor(propid, addremove);
00087 }
00088 catch(char* str){
00089 std::cout << "Exception : " << str << '\n';
00090 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
00091 diag->ShowModal();
00092 delete diag;
00093 }
00094 }
00095 void wxMaracasSurfaceRendering::addRemoveSurfaceBox(int propid, bool addremove){
00096 try{
00097 surrendmanager->addRemoveSurfaceBox(propid, addremove);
00098 }
00099 catch(char* str){
00100 std::cout << "Exception : " << str << '\n';
00101 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
00102 diag->ShowModal();
00103 delete diag;
00104 }
00105 }
00106
00107
00108 void wxMaracasSurfaceRendering::changeOpacity(int _propid, int value){
00109 try{
00110 surrendmanager->changeOpacity(_propid,value);
00111 }
00112 catch(char* str){
00113 std::cout << "Exception : " << str << '\n';
00114 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
00115 diag->ShowModal();
00116 delete diag;
00117 }
00118 }
00119
00120 void wxMaracasSurfaceRendering::changeIsoValue(int propid, double value){
00121 try{
00122 surrendmanager->changeIsoValue(propid, value);
00123 }
00124 catch(char* str){
00125 std::cout << "Exception : " << str << '\n';
00126 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
00127 diag->ShowModal();
00128 delete diag;
00129 }
00130 }
00131
00132 void wxMaracasSurfaceRendering::changeColor(int propid, double red, double green, double blue){
00133 try{
00134 surrendmanager->changeColor(propid, red, green, blue);
00135
00136 }catch(char* str){
00137
00138 wxString s( str,wxConvUTF8 );
00139 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
00140 diag->ShowModal();
00141 delete diag;
00142 }
00143 }
00144
00145 void wxMaracasSurfaceRendering::onLoadImageFile(){
00146
00147 wxString mhd(_T("mhd"));
00148 wxString stl(_T("stl"));
00149
00150 wxFileDialog* fildial = new wxFileDialog(this, wxString(_T("Select a STL file")),wxString(_T("")),
00151 wxString(_T("")),wxString(_T("STL files (*.stl)|*.stl|MHD files (*.mhd)|*.mhd")) );
00152
00153 if(fildial->ShowModal()==wxID_OK){
00154 wxString filename = fildial->GetFilename();
00155 wxString pathfile(fildial->GetDirectory() + _T("/") + filename);
00156
00157 if(filename.EndsWith(mhd))
00158 {
00159 loadPropMHD(pathfile,filename);
00160 }
00161 else if(filename.EndsWith(stl)){
00162 loadProp3D(pathfile,filename);
00163 }
00164 }
00165 delete fildial;
00166 }
00167
00168 void wxMaracasSurfaceRendering::loadPropMHD(wxString filename, wxString dataname){
00169
00170 std::string s = std::string(filename.mb_str());
00171 vtkImageData* img = surrendmanager->getImageData(s);
00172 if(img!=NULL){
00173 s = std::string(dataname.mb_str());
00174 addPropMHD(img, s);
00175 }
00176 }
00177
00178 void wxMaracasSurfaceRendering::addPropMHD(vtkImageData* imgdata, std::string dataname){
00179 try{
00180 int id = surrendmanager->addPropMHD(-1, imgdata,dataname);
00181 if(id!=-1){
00182
00183 wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(this, id, false, -1);
00184 int maxiso = surrendmanager->getMaxIsoValue(id);
00185 ((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso);
00186 addSurfaceRenderingPanel(controlpan, dataname);
00187 }
00188
00189 }catch(char* str){
00190
00191 std::cout << "Exception : " << str << '\n';
00192 wxMessageDialog* diag = new wxMessageDialog(this, wxString( str,wxConvUTF8 ), wxString( str,wxConvUTF8 ), wxICON_ERROR);
00193 diag->ShowModal();
00194 delete diag;
00195 }
00196 }
00197
00198 void wxMaracasSurfaceRendering::loadProp3D(wxString filename, wxString dataname){
00199 std::string s = std::string(filename.mb_str());
00200 vtkProp3D* prop3D = surrendmanager->getProp3D(s);
00201 if(prop3D != NULL){
00202 s = std::string(dataname.mb_str() );
00203 this->addProp3D(prop3D,s);
00204 }else{
00205
00206 }
00207 }
00208
00209 void wxMaracasSurfaceRendering::addProp3D(vtkProp3D* prop3D, std::string dataname){
00210 try{
00211 int id = surrendmanager->addProp3D(-1, prop3D,dataname);
00212 if(id!=-1){
00213 wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3D(this, id, false, -1);
00214 addSurfaceRenderingPanel(controlpan, dataname);
00215 }
00216 }catch(char* str){
00217 std::cout << "Exception : " << str << '\n';
00218 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
00219 diag->ShowModal();
00220 delete diag;
00221 }
00222 }
00223 void wxMaracasSurfaceRendering::addSurfaceRenderingPanel(wxMaracasSurfaceRenderingPanel* surrend, std::string dataname){
00224
00225 wxString s(dataname.c_str(),wxConvUTF8 );
00226 wxAuiPaneInfo paneinfo;
00227 wxauimanager->AddPane(surrend, paneinfo.DefaultPane().Centre().DestroyOnClose().Caption(s));
00228 wxauimanager->Update();
00229 }
00230
00231 void wxMaracasSurfaceRendering::deleteActor(int propid){
00232 try{
00233 surrendmanager->deleteActor(propid);
00234 }catch(char* str){
00235
00236 std::cout << "Exception : " << str << '\n';
00237 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
00238 diag->ShowModal();
00239 delete diag;
00240 }
00241 }
00242
00243 bool wxMaracasSurfaceRendering::interactorSet(){
00244 return surrendmanager->interactorSet();
00245 }
00246
00251 ToolBar::ToolBar(wxWindow * parent,std::string iconsdir)
00252 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
00253 {
00254 std::string iconfil = iconsdir;
00255
00256
00257
00258 wxBitmap bitmap0(OpenImage_xpm);
00259 this->AddTool(1, wxString(_T("test")),bitmap0, NULL, wxITEM_NORMAL, wxString(_T("Open File")));
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270 this->Realize();
00271
00272 _evthand = new ToolBarEventHandler();
00273 this->SetEventHandler(_evthand);
00274 }
00275
00276 ToolBar::~ToolBar(void){
00277 }
00278
00279 ToolBarEventHandler::ToolBarEventHandler()
00280 : wxEvtHandler(){
00281 }
00282
00283 ToolBarEventHandler::~ToolBarEventHandler(){
00284 }
00285
00286 void ToolBarEventHandler::onLoadImageFile(wxCommandEvent& event){
00287 wxMaracasSurfaceRendering::getInstance()->onLoadImageFile();
00288 }
00289
00290
00291 BEGIN_EVENT_TABLE(ToolBarEventHandler, wxEvtHandler)
00292 EVT_MENU(1, ToolBarEventHandler::onLoadImageFile)
00293 END_EVENT_TABLE()
00294
00295