]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasRenderTabbedPanel.cpp
index ff4fe1320f22ef95c7dfee912e2d02d8ec03dcb6..414d660457c238c15199755903562a620d53f2c9 100644 (file)
@@ -5,22 +5,28 @@
 #include "wxMaracasSurfaceRenderingPanel.h"
 #include "wxMaracasSurfaceRenderingProp3DMHD.h"
 #include "wxMaracasMultipleVolumeRendererManagerData.h"
+#include "wxMaracasDialog_NViewers.h"
 
 #include <wx/colordlg.h>
 #include <wx/button.h> 
 
 #include <OpenImage.xpm>
 #include "Color.xpm"
+#include "creaSystem.h"
 
 #include <vtkProp3D.h>
+#include "wxVtkMPR3DViewCntrlPanel.h"
 
 /**
 ** Class constructor
 **/
-wxMaracasRenderTabbedPanel::wxMaracasRenderTabbedPanel(wxWindow* parent)
+wxMaracasRenderTabbedPanel::wxMaracasRenderTabbedPanel(wxWindow* parent, int id, wxVtk3DBaseView* _baseView)
 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
 {
-       //_propid = propid;
+       _id = id;
+       baseView = _baseView;
+       dialog = NULL;
+
        volmanager = new wxMaracasMultipleVolumeRendererManager();
        surrendmanager1 = new wxMaracasSurfaceRenderingManager();
        surrendmanager2 = new wxMaracasSurfaceRenderingManager();
@@ -36,7 +42,8 @@ wxMaracasRenderTabbedPanel::~wxMaracasRenderTabbedPanel()
        //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSA(_propid, false);
        //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSB(_propid, false);
        //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSC(_propid, false);
-       this->deleteVolume(_propidV);
+       this->deleteVolume(_id);
+       delete dialog;
        delete wxtabs;  
 }
 
@@ -47,7 +54,7 @@ void wxMaracasRenderTabbedPanel::createControls(vtkImageData* inImg, std::string
 {
        wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(1);
 
-       wxFlexGridSizer* sizercheck = new wxFlexGridSizer(2);
+       wxFlexGridSizer* sizercheck = new wxFlexGridSizer(3);
        checkboxVol = new  wxCheckBox(this,-1,wxString(_T("Volume Rendering")));
        Connect(checkboxVol->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxVChange);   
        checkboxVol->SetValue(true);    
@@ -58,15 +65,22 @@ void wxMaracasRenderTabbedPanel::createControls(vtkImageData* inImg, std::string
        checkboxSA->SetValue(true);     
        sizercheck->Add(checkboxSA, wxFIXED_MINSIZE);   
 
+       checkboxViewer = new  wxCheckBox(this,-1,wxString(_T("MPR")));
+       Connect(checkboxViewer->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onMPROptions);     
+       checkboxViewer->SetValue(false);
+       sizercheck->Add(checkboxViewer, wxFIXED_MINSIZE);
+
        checkboxSB = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering B")));
        Connect(checkboxSB->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSBChange);   
-       checkboxSB->SetValue(true);     
+       checkboxSB->SetValue(false);    
        sizercheck->Add(checkboxSB, wxFIXED_MINSIZE);
 
        checkboxSC = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering C")));
        Connect(checkboxSC->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSCChange);   
-       checkboxSC->SetValue(true);     
+       checkboxSC->SetValue(false);    
        sizercheck->Add(checkboxSC, wxFIXED_MINSIZE);
+       
+       sizercheck->Add(new wxStaticText(this, -1,_T("")), wxFIXED_MINSIZE);
 
        wxButton* _openParameters = new wxButton(this, -1, wxString(_T("Apply Transformation")));       
        Connect(_openParameters->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onOpenParameters);                  
@@ -81,24 +95,23 @@ void wxMaracasRenderTabbedPanel::createControls(vtkImageData* inImg, std::string
 
        if(inImg == NULL)
        {
-               //std::string s = std::string(pathfile.mb_str());
                vtkImageData* img = volmanager->getImageData(pathfile);
-               vtkImageData* img1 = surrendmanager1->getImageData(pathfile);
-               vtkImageData* img2 = surrendmanager2->getImageData(pathfile);
-               vtkImageData* img3 = surrendmanager3->getImageData(pathfile);
-               if(img!=NULL && img1!=NULL && img2!=NULL && img3!=NULL)
+               //vtkImageData* img1 = surrendmanager1->getImageData(pathfile);
+               //vtkImageData* img2 = surrendmanager2->getImageData(pathfile);
+               //vtkImageData* img3 = surrendmanager3->getImageData(pathfile);
+               if(img!=NULL /*&& img1!=NULL && img2!=NULL && img3!=NULL*/)
                {
-                       //s = std::string(filename.mb_str());
                        addVolume(img, filename);
-                       addSurface1(img1, filename);
-                       addSurface2(img2, filename);
-                       addSurface3(img3, filename);    
+                       addSurface1(img, filename);
+                       addSurface2(img, filename);
+                       addSurface3(img, filename);     
+                       addMPROptions();
+                       volname = (wxString) filename;
                        wxtabs->Refresh();
                }
        }       
        else
        {
-               //s = std::string(filename.mb_str());
                addVolume(inImg, filename);
                addSurface1(inImg, filename);
                addSurface2(inImg, filename);
@@ -131,7 +144,7 @@ void wxMaracasRenderTabbedPanel::addVolume(vtkImageData* img, std::string datana
 {
        try
        {
-               _propidV = volmanager->addVolume(img, dataname);
+               int _propidV = volmanager->addVolume(_id, img, dataname);
                if(_propidV!=-1)
                {
                        wxMaracasMultipleVolumeRendererPanel* controlpanV = new wxMaracasMultipleVolumeRendererPanel(wxtabs, _propidV, img, true);
@@ -155,7 +168,7 @@ void wxMaracasRenderTabbedPanel::addSurface1(vtkImageData* img, std::string data
 {
        try
        {
-               _propidSA = surrendmanager1->addPropMHD(img, dataname);
+               int _propidSA = surrendmanager1->addPropMHD(_id, img, dataname);
                
                if(_propidSA!=-1)
                {
@@ -181,13 +194,14 @@ void wxMaracasRenderTabbedPanel::addSurface2(vtkImageData* img, std::string data
 {
        try
        {
-               _propidSB = surrendmanager2->addPropMHD(img, dataname);
+               int _propidSB = surrendmanager2->addPropMHD(_id, img, dataname);
                if(_propidSB!=-1)
                {
                        wxMaracasSurfaceRenderingPanel* controlpanSB = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSB, true, 2);
                        int maxiso = surrendmanager2->getMaxIsoValue(_propidSB);
                        ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSB)->createControls(maxiso);
                        wxtabs->AddPage(controlpanSB, _T("SR B"));
+                       wxtabs->GetPage(2)->Disable();
 
                }
        }
@@ -207,7 +221,7 @@ void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string data
 {
        try
        {
-               _propidSC = surrendmanager3->addPropMHD(img, dataname);
+               int _propidSC = surrendmanager3->addPropMHD(_id, img, dataname);
 
                if(_propidSC!=-1)
                {
@@ -215,6 +229,7 @@ void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string data
                        int maxiso = surrendmanager3->getMaxIsoValue(_propidSC);
                        ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSC)->createControls(maxiso);
                        wxtabs->AddPage(controlpanSC, _T("SR C"));
+                       wxtabs->GetPage(3)->Disable();
                }
        }
        catch(char* str)
@@ -226,6 +241,99 @@ void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string data
        }
 }
 
+/**
+**
+**/
+void wxMaracasRenderTabbedPanel::addMPROptions()
+{
+       int x = 0,y = 0,z = 0;
+       int ext[6];
+       ext[0] = 0;
+       ext[1] = 0;
+       ext[2] = 0;
+       ext[3] = 0;
+       ext[4] = 0;
+       ext[5] = 0;
+
+       double org[3],spc[3];
+       org[0] = 0;
+       org[1] = 0;
+       org[2] = 0;
+       spc[0] = 0;
+       spc[1] = 0;
+       spc[2] = 0;
+
+       vtkMPRBaseData* mvtkmprbasedata = new vtkMPRBaseData(); 
+       marImageData* marimagedata              = new marImageData( getVolImage() );                    
+       mvtkmprbasedata->SetMarImageData(marimagedata);
+       
+       mwxvtkmpr3Dview                                 = new wxVtkMPR3DView( baseView );
+
+       vtkmpr3Ddataviewer                              = new vtkMPR3DDataViewer();     
+
+       wxPanel         *panelControl           = new wxPanel(wxtabs,-1);       
+       controlPanelMPR3D                               = mwxvtkmpr3Dview->CreateControlPanel(panelControl, true);
+
+       wxFlexGridSizer  *sizerCtrol    = new wxFlexGridSizer(1);
+       sizerCtrol->Add(controlPanelMPR3D, 1, wxALL|wxEXPAND, 2);
+
+       panelControl->SetAutoLayout(true);
+       panelControl->SetSizer(sizerCtrol);
+       panelControl->SetSize(400,350);
+       panelControl->Layout();
+
+
+       if (mvtkmprbasedata!=NULL)
+       {
+               mvtkmprbasedata->Configure();
+               /*x = mvtkmprbasedata   ->      GetMaxPositionX()/2;
+               y = mvtkmprbasedata     ->      GetMaxPositionY()/2;
+               z = mvtkmprbasedata     ->      GetMaxPositionZ()/2;            */      
+               
+               if(mvtkmprbasedata->GetImageData() != NULL)
+               {
+                       mvtkmprbasedata->GetImageData()->GetExtent(ext);
+                       mvtkmprbasedata->GetImageData()->GetOrigin(org);
+                       mvtkmprbasedata->GetImageData()->GetSpacing(spc);
+
+                       x = (ext[0]+ext[1])/2;
+                       y = (ext[2]+ext[3])/2;
+                       z = (ext[4]+ext[5])/2;
+
+                       mvtkmprbasedata->SetX( x );
+                       mvtkmprbasedata->SetY( y );
+                       mvtkmprbasedata->SetZ( z );
+               }
+               else
+               {
+                       mvtkmprbasedata->SetX( 0 );
+                       mvtkmprbasedata->SetY( 0 );
+                       mvtkmprbasedata->SetZ( 0 );
+               }
+       }
+
+       if (baseView!=NULL)     
+               baseView                        ->Configure();  
+
+       if (vtkmpr3Ddataviewer  !=NULL) 
+       {
+               vtkmpr3Ddataviewer      ->SetVtkMPRBaseData(mvtkmprbasedata);
+               vtkmpr3Ddataviewer      ->Configure();
+       }
+       if (mwxvtkmpr3Dview     !=NULL) 
+       { 
+               mwxvtkmpr3Dview         ->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);            
+               mwxvtkmpr3Dview         ->Configure();
+               mwxvtkmpr3Dview         ->ResetCamera(ext,org,spc);
+       }
+
+       wxtabs->AddPage(panelControl, _T("MPR"));
+       wxtabs->GetPage(4)->Disable();
+       mwxvtkmpr3Dview->showOutlineActor(false);
+       mwxvtkmpr3Dview->Refresh();
+                       
+}
+
 /**
 ** Deletes complete volume
 **/
@@ -254,6 +362,7 @@ void wxMaracasRenderTabbedPanel::addRemoveActorV(int id, bool addremove)
 {
        try{
                volmanager->addRemoveActor(id, addremove);
+
        }
        catch(char* str){
                std::cout << "Exception : " << str << '\n';
@@ -311,6 +420,7 @@ void wxMaracasRenderTabbedPanel::addRemoveActorSC(int id, bool addremove)
        }
 }      
 
+
 /**
 ** Sets color points values for the given volume rendering identified by parameter: volumeid
 **/
@@ -461,7 +571,19 @@ void wxMaracasRenderTabbedPanel::changeColorC(int propid, double red, double gre
 void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event)
 {
        try{
-               volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue());        
+               volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue());
+
+               int id = 0;
+               wxtabs->SetSelection(id);
+
+               if(checkboxVol->GetValue())
+               {
+                       wxtabs->GetPage(id)->Enable();
+               }
+               else
+               {       
+                       wxtabs->GetPage(id)->Disable();
+               }
        }
        catch(char* str){
                std::cout << "Exception : " << str << '\n';
@@ -477,7 +599,20 @@ void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event)
 void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event)
 {      
        try{
-               surrendmanager1->addRemoveActor(this->getPropIdSA(), checkboxSA->GetValue());   
+               surrendmanager1->addRemoveActor(this->getPropIdV(), checkboxSA->GetValue());    
+
+               int id = 1;
+               wxtabs->SetSelection(id);
+
+               if(checkboxSA->GetValue())
+               {
+                       wxtabs->GetPage(id)->Enable();
+
+               }
+               else
+               {       
+                       wxtabs->GetPage(id)->Disable();
+               }
        }
        catch(char* str){
                std::cout << "Exception : " << str << '\n';
@@ -493,7 +628,19 @@ void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event)
 void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event)
 {      
        try{
-               surrendmanager2->addRemoveActor(this->getPropIdSB(), checkboxSB->GetValue());   
+               surrendmanager2->addRemoveActor(this->getPropIdV(), checkboxSB->GetValue());    
+
+               int id = 2;
+               wxtabs->SetSelection(id);
+
+               if(checkboxSB->GetValue())
+               {
+                       wxtabs->GetPage(id)->Enable();
+               }
+               else
+               {       
+                       wxtabs->GetPage(id)->Disable();
+               }
        }
        catch(char* str){
                std::cout << "Exception : " << str << '\n';
@@ -509,7 +656,19 @@ void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event)
 void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
 {      
        try{
-               surrendmanager3->addRemoveActor(this->getPropIdSC(), checkboxSC->GetValue());   
+               surrendmanager3->addRemoveActor(this->getPropIdV(), checkboxSC->GetValue());
+
+               int id = 3;
+               wxtabs->SetSelection(id);
+
+               if(checkboxSC->GetValue())
+               {
+                       wxtabs->GetPage(id)->Enable();
+               }
+               else
+               {       
+                       wxtabs->GetPage(id)->Disable();
+               }
        }
        catch(char* str){
                std::cout << "Exception : " << str << '\n';
@@ -520,15 +679,82 @@ void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
 }
 
 /**
-**
+** Method called when MPR checkbox status changes: Either shows or hides actors
+**/
+void wxMaracasRenderTabbedPanel::onMPROptions(wxCommandEvent& event)
+{
+       int id = 4;
+       wxtabs->SetSelection(id);
+       if(checkboxViewer->IsChecked())
+       {
+               wxtabs->GetPage(id)->Enable();
+
+               bool valueX = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleX();
+               bool valueY = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleY();
+               bool valueZ = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleZ();
+
+               mwxvtkmpr3Dview->VisibleImageActor( 0, valueX );
+               mwxvtkmpr3Dview->VisibleImageActor( 1, valueY );
+               mwxvtkmpr3Dview->VisibleImageActor( 2, valueZ );
+               mwxvtkmpr3Dview->showOutlineActor(true);
+               mwxvtkmpr3Dview->Refresh();
+
+               wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
+               mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
+
+       }
+       else
+       {
+               wxtabs->GetPage(id)->Disable();
+
+               mwxvtkmpr3Dview->VisibleImageActor(0, false );
+               mwxvtkmpr3Dview->VisibleImageActor(1, false );
+               mwxvtkmpr3Dview->VisibleImageActor(2, false );
+               mwxvtkmpr3Dview->showOutlineActor(false);
+               mwxvtkmpr3Dview->Refresh();
+
+               wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
+               mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
+       }
+}
+
+/**
+** 
 **/
 void wxMaracasRenderTabbedPanel::onOpenParameters(wxCommandEvent& event){      
-       
-       dialog = new wxMaracasRenderImageManagementPanel(this, volmanager, surrendmanager1, surrendmanager2, surrendmanager3, this->getPropIdV());
-       dialog->SetSize(400, 580);
-       dialog->Show();
+       if(dialog == NULL)
+       {
+               dialog = new wxMaracasRenderImageManagementPanel(this, volmanager, surrendmanager1, surrendmanager2, surrendmanager3, volname, _id);
+               dialog->SetSize(400, 580);
+               dialog->Show();
+       }
+       else if(dialog != NULL)
+       {
+               dialog->Show();
+       }
 }
 
+/**
+**
+**/
+void wxMaracasRenderTabbedPanel::onOpenCutter(wxCommandEvent& event)
+{      
+       vtkImageData* img = getVolImage();      
+       std::vector<int> type;
+       type.push_back(5);
+       type.push_back(0);
+       type.push_back(1);
+       type.push_back(3);
+       
+       wxMaracasDialog_NViewers* dialog1 = new wxMaracasDialog_NViewers(this, img, &type, wxString(_T("Cut Module") ));
+       //dialog1->SetSize(800, 700);
+       
+       std::string path = crea::System::GetDllAppPath("bbcreaMaracasVisu.dll");
+       //cutter = new CutModel2MainPanel(dialog1, path);
+       
+       //dialog1->AddPanel(cutter);
+       dialog1->Show();
+}
 
 /**
 ** Gets volume rendering image asociated to the given ID
@@ -546,7 +772,7 @@ void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event)
 /**
 ** 
 **/
-vtkImageData* wxMaracasRenderTabbedPanel::getVolImage(int id)
+vtkImageData* wxMaracasRenderTabbedPanel::getVolImage()
 {      
        return volmanager->getImageData();
 }
@@ -554,7 +780,7 @@ vtkImageData* wxMaracasRenderTabbedPanel::getVolImage(int id)
 /**
 ** Gets surface rendering A image asociated to the given ID
 **/
-vtkImageData* wxMaracasRenderTabbedPanel::getSurfAImage(int id)
+vtkImageData* wxMaracasRenderTabbedPanel::getSurfAImage()
 {      
        return surrendmanager1->getImageData();
 }
@@ -562,7 +788,7 @@ vtkImageData* wxMaracasRenderTabbedPanel::getSurfAImage(int id)
 /**
 ** Gets surface rendering B image asociated to the given ID
 **/
-vtkImageData* wxMaracasRenderTabbedPanel::getSurfBImage(int id)
+vtkImageData* wxMaracasRenderTabbedPanel::getSurfBImage()
 {      
        return surrendmanager2->getImageData();
 }
@@ -570,47 +796,15 @@ vtkImageData* wxMaracasRenderTabbedPanel::getSurfBImage(int id)
 /**
 ** Gets surface rendering C image asociated to the given ID
 **/
-vtkImageData* wxMaracasRenderTabbedPanel::getSurfCImage(int id)
+vtkImageData* wxMaracasRenderTabbedPanel::getSurfCImage()
 {      
        return surrendmanager3->getImageData();
 }
 
-/**
-**
-**/
-void wxMaracasRenderTabbedPanel::onOpenCutter(wxCommandEvent& event)
-{      
-       
-}
-
 /**
 **
 **/
 int wxMaracasRenderTabbedPanel::getPropIdV()
 {
-       return _propidV;
-}
-
-/**
-**
-**/
-int wxMaracasRenderTabbedPanel::getPropIdSA()
-{
-       return _propidSA;
-}
-
-/**
-**
-**/
-int wxMaracasRenderTabbedPanel::getPropIdSB()
-{
-       return _propidSB;
-}
-
-/**
-**
-**/
-int wxMaracasRenderTabbedPanel::getPropIdSC()
-{
-       return _propidSC;
+       return _id;
 }
\ No newline at end of file