X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxMaracasRenderTabbedPanel.cpp;h=3daafe07a8f322eb3bb8654bb83c600662b4ce10;hb=28c74ab5eb531ce001260e9bc3fcb0151fcfc56b;hp=71df3c7529d46db59f38fb7ebeb022418d51444a;hpb=52134c6f15827d0ae9ea8cf0ffaa15867ab87dcc;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp index 71df3c7..3daafe0 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp @@ -1,4 +1,5 @@ #include "wxMaracasRenderTabbedPanel.h" +#include "HistogramDialogComboBox.h" #include #include @@ -8,32 +9,34 @@ /** ** **/ -wxMaracasRenderTabbedPanel::wxMaracasRenderTabbedPanel(wxWindow* parent, wxMaracasMultipleVolumeRendererManager* img1, wxMaracasSurfaceRenderingManager* img2, wxMaracasSurfaceRenderingManager* img3, - wxMaracasSurfaceRenderingManager* img4, wxString filename, wxString dataname) +wxMaracasRenderTabbedPanel::wxMaracasRenderTabbedPanel(wxWindow* parent/*, wxMaracasMultipleVolumeRendererManager* _volmanager, wxMaracasSurfaceRenderingManager* _surrendmanager1, wxMaracasSurfaceRenderingManager* _surrendmanager2, + wxMaracasSurfaceRenderingManager* _surrendmanager3, wxString pathfile, wxString filename*/) : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize) { //_propid = propid; + volmanager = new wxMaracasMultipleVolumeRendererManager(); + surrendmanager1 = new wxMaracasSurfaceRenderingManager(); + surrendmanager2 = new wxMaracasSurfaceRenderingManager(); + surrendmanager3 = new wxMaracasSurfaceRenderingManager(); - createControls(img1, img2, img3, img4, filename, dataname); } /** ** **/ -void wxMaracasRenderTabbedPanel::createControls(wxMaracasMultipleVolumeRendererManager* volmanager, wxMaracasSurfaceRenderingManager* surrendmanager1, wxMaracasSurfaceRenderingManager* surrendmanager2, - wxMaracasSurfaceRenderingManager* surrendmanager3, wxString filename, wxString dataname) +void wxMaracasRenderTabbedPanel::createControls(wxString pathfile, wxString filename) { - wxPanel* up = new wxPanel(this, wxID_ANY); - wxFlexGridSizer* sizerup = new wxFlexGridSizer(2,2,1); + //wxPanel* up = new wxPanel(this, wxID_ANY); + wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(1); - wxString choices[2]; - choices[0] = wxString(_T("On")); - choices[1] = wxString(_T("Off")); + //wxString choices[2]; + //choices[0] = wxString(_T("On")); + //choices[1] = wxString(_T("Off")); + wxFlexGridSizer* sizercheck = new wxFlexGridSizer(2); checkboxVol = new wxCheckBox(this,-1,wxString(_T("Volume Rendering"))); Connect(checkboxVol->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxVChange); checkboxVol->SetValue(true); - - sizerup->Add(checkboxVol, wxFIXED_MINSIZE); + sizercheck->Add(checkboxVol, wxFIXED_MINSIZE); //wxString choices[2]; //choices[0] = wxString(_T("On")); @@ -42,7 +45,7 @@ void wxMaracasRenderTabbedPanel::createControls(wxMaracasMultipleVolumeRendererM Connect(checkboxSA->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSAChange); checkboxSA->SetValue(true); - sizerup->Add(checkboxSA, wxFIXED_MINSIZE); + sizercheck->Add(checkboxSA, wxFIXED_MINSIZE); //wxString choices[2]; //choices[0] = wxString(_T("On")); @@ -51,7 +54,7 @@ void wxMaracasRenderTabbedPanel::createControls(wxMaracasMultipleVolumeRendererM Connect(checkboxSB->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSBChange); checkboxSB->SetValue(true); - sizerup->Add(checkboxSB, wxFIXED_MINSIZE); + sizercheck->Add(checkboxSB, wxFIXED_MINSIZE); //wxString choices[2]; //choices[0] = wxString(_T("On")); @@ -60,48 +63,33 @@ void wxMaracasRenderTabbedPanel::createControls(wxMaracasMultipleVolumeRendererM Connect(checkboxSC->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSCChange); checkboxSC->SetValue(true); - sizerup->Add(checkboxSC, wxFIXED_MINSIZE); - - up->SetSizer(sizerup, true); - up->SetAutoLayout( true ); - - - wxPanel* down = new wxPanel(this, wxID_ANY); - down->SetSize(100, 100); - wxFlexGridSizer* sizerdown = new wxFlexGridSizer(1,1,1); + sizercheck->Add(checkboxSC, wxFIXED_MINSIZE); + sizerrenderprop->Add(sizercheck, wxFIXED_MINSIZE); + //up->SetSizer(sizerup, true); + //up->SetAutoLayout( true ); wxtabs = new wxNotebook(this, -1); - wxtabs->SetSize(100, 100); - //wxtabs-> - std::string s = std::string(filename.mb_str()); + + std::string s = std::string(pathfile.mb_str()); vtkImageData* img1 = volmanager->getImageData(s); vtkImageData* img2 = surrendmanager1->getImageData(s); vtkImageData* img3 = surrendmanager2->getImageData(s); vtkImageData* img4 = surrendmanager3->getImageData(s); if(img1!=NULL) { - s = std::string(dataname.mb_str()); - wxMaracasMultipleVolumeRendererPanel* controlpan1 = addVolume(volmanager, img1, s); - wxMaracasSurfaceRenderingPanel* controlpan2 = addSurface1(surrendmanager1, img2, s); - wxMaracasSurfaceRenderingPanel* controlpan3 = addSurface2(surrendmanager2, img3, s); - wxMaracasSurfaceRenderingPanel* controlpan4 = addSurface3(surrendmanager3, img4, s); - - wxtabs->AddPage(controlpan1, _T("Volume Rendering"), true); - wxtabs->AddPage(controlpan2, _T("Surf Rend A")); - wxtabs->AddPage(controlpan3, _T("Surf Rend B")); - wxtabs->AddPage(controlpan4, _T("Surf Rend C")); - - wxtabs->Refresh(); - sizerdown->Add(wxtabs, wxFIXED_MINSIZE); - - down->SetSizer(sizerdown, true); - down->SetAutoLayout( true ); + s = std::string(filename.mb_str()); + addVolume(img1, s); + addSurface1(img2, s); + addSurface2(img3, s); + addSurface3(img4, s); + wxtabs->Refresh(); } - wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(2,1,5); - sizerrenderprop->Add(up, wxFIXED_MINSIZE); - sizerrenderprop->Add(down, wxFIXED_MINSIZE); + //wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(2,1,5); + //sizerrenderprop->Add(up, wxFIXED_MINSIZE); + + sizerrenderprop->Add(wxtabs, wxFIXED_MINSIZE); this->SetSizer(sizerrenderprop, true); this->SetAutoLayout( true ); @@ -110,29 +98,35 @@ void wxMaracasRenderTabbedPanel::createControls(wxMaracasMultipleVolumeRendererM wxMaracasRenderTabbedPanel::~wxMaracasRenderTabbedPanel() { - //wxMaracasIRMView::getInstance()->addRemoveActor(_propid, false); + //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorV(_propid, false); + //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSA(_propid, false); + //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSB(_propid, false); + //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSC(_propid, false); //wxMaracasRenderTabbedPanel::getInstance()->deleteVolume(_propid); - delete wxtabs; - //delete surview1; - //delete surview2; - //delete surview3; + delete wxtabs; +} + +void wxMaracasRenderTabbedPanel::setRenderer(vtkRenderer* renderer) +{ + volmanager->setRenderer(renderer); + surrendmanager1->setRenderer(renderer); + surrendmanager2->setRenderer(renderer); + surrendmanager3->setRenderer(renderer); } /* * */ -wxMaracasMultipleVolumeRendererPanel* wxMaracasRenderTabbedPanel::addVolume(wxMaracasMultipleVolumeRendererManager* volmanager, vtkImageData* img, std::string dataname) +void wxMaracasRenderTabbedPanel::addVolume(vtkImageData* img, std::string dataname) { - try { - int id = volmanager->addVolume(img, dataname); - if(id!=-1) + int _propidV = volmanager->addVolume(img, dataname); + if(_propidV!=-1) { - wxMaracasMultipleVolumeRendererPanel* controlpan = new wxMaracasMultipleVolumeRendererPanel(wxtabs, id,img); - //controlpan->updateVolume(); - - return controlpan; + controlpanV = new wxMaracasMultipleVolumeRendererPanel(wxtabs, _propidV, img, true); + wxtabs->AddPage(controlpanV, _T("Volume Rendering"), true); + updateVolume(); } } catch(char* str) @@ -143,19 +137,18 @@ wxMaracasMultipleVolumeRendererPanel* wxMaracasRenderTabbedPanel::addVolume(wxMa } } -wxMaracasSurfaceRenderingPanel* wxMaracasRenderTabbedPanel::addSurface1(wxMaracasSurfaceRenderingManager* surrendmanager1, vtkImageData* img, std::string dataname) +void wxMaracasRenderTabbedPanel::addSurface1(vtkImageData* img, std::string dataname) { try { - int id = surrendmanager1->addPropMHD(img, dataname); + int _propidSA = surrendmanager1->addPropMHD(img, dataname); - if(id!=-1) + if(_propidSA!=-1) { - wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, id); - //int maxiso = surrendmanager1->getMaxIsoValue(id); - //((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso); - - return controlpan; + controlpanSA = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSA, true, 1); + int maxiso = surrendmanager1->getMaxIsoValue(_propidSA); + ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSA)->createControls(maxiso); + wxtabs->AddPage(controlpanSA, _T("Surf Rendering A")); } } catch(char* str) @@ -166,18 +159,18 @@ wxMaracasSurfaceRenderingPanel* wxMaracasRenderTabbedPanel::addSurface1(wxMaraca } } -wxMaracasSurfaceRenderingPanel* wxMaracasRenderTabbedPanel::addSurface2(wxMaracasSurfaceRenderingManager* surrendmanager2, vtkImageData* img, std::string dataname) +void wxMaracasRenderTabbedPanel::addSurface2(vtkImageData* img, std::string dataname) { try { - int id = surrendmanager2->addPropMHD(img, dataname); - if(id!=-1) + int _propidSB = surrendmanager2->addPropMHD(img, dataname); + if(_propidSB!=-1) { - wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, id); - //int maxiso = surrendmanager2->getMaxIsoValue(id); - //((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso); + controlpanSB = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSB, true, 2); + int maxiso = surrendmanager2->getMaxIsoValue(_propidSB); + ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSB)->createControls(maxiso); + wxtabs->AddPage(controlpanSB, _T("Surf Rendering B")); - return controlpan; } } catch(char* str) @@ -188,18 +181,18 @@ wxMaracasSurfaceRenderingPanel* wxMaracasRenderTabbedPanel::addSurface2(wxMaraca } } -wxMaracasSurfaceRenderingPanel* wxMaracasRenderTabbedPanel::addSurface3(wxMaracasSurfaceRenderingManager* surrendmanager3, vtkImageData* img, std::string dataname) +void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string dataname) { try { - int id = surrendmanager3->addPropMHD(img, dataname); - if(id!=-1) + _propidSC = surrendmanager3->addPropMHD(img, dataname); + + if(_propidSC!=-1) { - wxMaracasSurfaceRenderingPanel* controlpan = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, id); - //int maxiso = surrendmanager3->getMaxIsoValue(id); - //((wxMaracasSurfaceRenderingProp3DMHD*)controlpan)->createControls(maxiso); - - return controlpan; + controlpanSC = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSC, true, 3); + int maxiso = surrendmanager3->getMaxIsoValue(_propidSC); + ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSC)->createControls(maxiso); + wxtabs->AddPage(controlpanSC, _T("Surf Rendering C")); } } catch(char* str) @@ -210,43 +203,224 @@ wxMaracasSurfaceRenderingPanel* wxMaracasRenderTabbedPanel::addSurface3(wxMaraca } } -void wxMaracasRenderTabbedPanel::onOK(wxCommandEvent& event) +/** +** Deletes complete volume +**/ +void wxMaracasRenderTabbedPanel::deleteVolume(int volid) +{ + volmanager->deleteActor(volid); + surrendmanager1->deleteActor(volid); + surrendmanager2->deleteActor(volid); + surrendmanager3->deleteActor(volid); +} + +/** +** Adds or removes volume rendering actor with given ID +**/ +void wxMaracasRenderTabbedPanel::addRemoveActorV(int id, bool addremove) +{ + volmanager->addRemoveActor(id, addremove); +} + +/** +** Adds or removes surface rendering actor with given ID +**/ +void wxMaracasRenderTabbedPanel::addRemoveActorSA(int id, bool addremove) +{ + surrendmanager1->addRemoveActor(id, addremove); +} + +/** +** Adds or removes surface rendering actor with given ID +**/ +void wxMaracasRenderTabbedPanel::addRemoveActorSB(int id, bool addremove) +{ + surrendmanager2->addRemoveActor(id, addremove); +} + +/** +** Adds or removes surface rendering actor with given ID +**/ +void wxMaracasRenderTabbedPanel::addRemoveActorSC(int id, bool addremove) +{ + surrendmanager3->addRemoveActor(id, addremove); +} + +/** +** Sets color points values for the given volume rendering identified by parameter: volumeid +**/ +void wxMaracasRenderTabbedPanel::SetValuesColorPointsFunction(int volid, std::vector greylevelcolors,std::vector red,std::vector green,std::vector blue) +{ + volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue); +} + +/** +** Sets points values for the given volume rendering identified by parameter: volumeid +**/ +void wxMaracasRenderTabbedPanel::SetValuesPointsFunction(int volid, std::vector greylevel, std::vector values) +{ + volmanager->setVolumeOpacity(volid, greylevel, values); +} + +/** +** Returns transfer function for the given volume rendering identified by parameter: volumeid +**/ +vtkPiecewiseFunction* wxMaracasRenderTabbedPanel::GetTransferFunction(int volumeid) +{ + return volmanager->GetTransferFunction(volumeid); +} + +/** +** Returns color function for the given volume rendering identified by parameter: volumeid +**/ +vtkColorTransferFunction* wxMaracasRenderTabbedPanel::GetColorFunction(int volumeid) +{ + return volmanager->GetColorFunction(volumeid); +} + +/** +** Changes color function by the given value for the given volume rendering identified by parameter: volumeid +**/ +void wxMaracasRenderTabbedPanel::changeOpacityA(int _propid, int value) +{ + surrendmanager1->changeOpacity(_propid,value); +} + +/** +** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid +**/ +void wxMaracasRenderTabbedPanel::changeIsoValueA(int propid, double value) +{ + surrendmanager1->changeIsoValue(propid, value); +} + +/** +** Changes color for the given surface rendering image identified by parameter: propid +**/ +void wxMaracasRenderTabbedPanel::changeColorA(int propid, double red, double green, double blue) +{ + try + { + surrendmanager1->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; + } +} + +/** +** Changes color function by the given value for the given volume rendering identified by parameter: volumeid +**/ +void wxMaracasRenderTabbedPanel::changeOpacityB(int _propid, int value) +{ + surrendmanager2->changeOpacity(_propid,value); +} + +/** +** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid +**/ +void wxMaracasRenderTabbedPanel::changeIsoValueB(int propid, double value) +{ + surrendmanager2->changeIsoValue(propid, value); +} + +/** +** Changes color for the given surface rendering image identified by parameter: propid +**/ +void wxMaracasRenderTabbedPanel::changeColorB(int propid, double red, double green, double blue) +{ + try + { + surrendmanager2->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; + } +} + +/** +** Changes color function by the given value for the given volume rendering identified by parameter: volumeid +**/ +void wxMaracasRenderTabbedPanel::changeOpacityC(int _propid, int value) { - updateVolume(); - //_frame->Show(false); + surrendmanager3->changeOpacity(_propid,value); } -void wxMaracasRenderTabbedPanel::onCancel(wxCommandEvent& event) +/** +** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid +**/ +void wxMaracasRenderTabbedPanel::changeIsoValueC(int propid, double value) { - //_frame->Show(false); + surrendmanager3->changeIsoValue(propid, value); } +/** +** Changes color for the given surface rendering image identified by parameter: propid +**/ +void wxMaracasRenderTabbedPanel::changeColorC(int propid, double red, double green, double blue) +{ + try + { + surrendmanager3->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 wxMaracasRenderTabbedPanel::onUpdate(wxCommandEvent& event) { updateVolume(); } +/** +** +**/ void wxMaracasRenderTabbedPanel::updateVolume() { - //std::vector greylevelcolors; - //std::vector red; - //std::vector green; - //std::vector blue; + /*Temporarily disabled*/ + + std::vector greylevelcolors; + std::vector red; + std::vector green; + std::vector blue; - //std::vector greylevel; - //std::vector values; + std::vector greylevel; + std::vector values; - //mwxwidget->GetValuesColorPointsFunction(greylevelcolors, red, green, blue); - //mwxwidget->GetValuesPointsFunction(greylevel, values); + HistogramDialogComboBox* histo = controlpanV->getMwxwidget(); + histo->GetValuesColorPointsFunction(greylevelcolors, red, green, blue); + histo->GetValuesPointsFunction(greylevel, values); + volmanager->setVolumeColor(controlpanV->getPropId(), greylevelcolors, red, green, blue); + volmanager->setVolumeOpacity(controlpanV->getPropId(), greylevel, values); //wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesColorPointsFunction(this->_propid, greylevelcolors, red, green, blue); //wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesPointsFunction(this->_propid, greylevel, values); } +/** +** +**/ void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event) { + /*Temporarily disabled*/ //if(mwxwidget->ShowModal()==wxID_OK){ //updateVolume(); @@ -257,45 +431,71 @@ void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event) /** ** **/ -void wxMaracasRenderTabbedPanel::onViewImage(wxCommandEvent& event){ +void wxMaracasRenderTabbedPanel::onViewImage(wxCommandEvent& event) +{ } /** -** +** Method called when VolumeRendering checkbox status changes: Either shows or hides VolumeRendering image **/ void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event) { - //wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue()); + volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue()); } /** -** +** Method called when SurfaceRendering A checkbox status changes: Either shows or hides SurfaceRendering image **/ void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event) { - //wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue()); + surrendmanager1->addRemoveActor(this->getPropIdSA(), checkboxSA->GetValue()); } /** -** +** Method called when SurfaceRendering B checkbox status changes: Either shows or hides SurfaceRendering B image **/ void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event) { - //wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue()); + surrendmanager2->addRemoveActor(this->getPropIdSB(), checkboxSB->GetValue()); } /** -** +** Method called when SurfaceRendering C checkbox status changes: Either shows or hides SurfaceRendering C image **/ void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event) { - //wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue()); + surrendmanager3->addRemoveActor(this->getPropIdSC(), checkboxSC->GetValue()); } /** ** **/ -int wxMaracasRenderTabbedPanel::getPropId(){ - return _propid; +int wxMaracasRenderTabbedPanel::getPropIdV() +{ + return _propidV; +} + +/** +** +**/ +int wxMaracasRenderTabbedPanel::getPropIdSA() +{ + return _propidSA; +} + +/** +** +**/ +int wxMaracasRenderTabbedPanel::getPropIdSB() +{ + return _propidSB; +} + +/** +** +**/ +int wxMaracasRenderTabbedPanel::getPropIdSC() +{ + return _propidSC; } \ No newline at end of file