]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkClipping3DViewVolCntrlPanel.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxVtkClipping3DViewVolCntrlPanel.cxx
1 //-------------------------------------------------------------------
2 //RaC 03-2010 Divides in two panels thje last tab Surface/Volume
3 //-------------------------------------------------------------------
4
5 #include "wxVtkClipping3DViewVolCntrlPanel.h"
6 #include "wx/colordlg.h"
7 #include "vtkTriangleFilter.h"
8 #include "vtkPolyDataConnectivityFilter.h"
9 #include "vtkClosePolyData.h"
10 #include "vtkSTLWriter.h"
11 #include "HistogramDialog.h"
12 #include "marDicomBase.h"
13
14 wxVtkClipping3DViewVolCntrlPanel::wxVtkClipping3DViewVolCntrlPanel(wxWindow *parent, wxVtkClipping3DView *wxvtkclipping3Dview )
15 : wxPanel(parent, -1)
16 {
17         wxPanel *panel  = this;
18         _wxvtkclipping3Dview    = wxvtkclipping3Dview;
19
20
21         wxCheckBox              *ckVolum                = new wxCheckBox(panel,-1,_T("Volume"));
22         wxCheckBox              *ckBoxVolume    = new wxCheckBox(panel,-1,_T("Volume Box"));
23
24         ckBoxVolume->Disable();
25
26         rbRayCasting   = new wxRadioButton(panel, -1, _T("Ray Casting"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
27     rbMIP   = new wxRadioButton(panel, -1, _T("MIP"));
28
29     ckInterpolation = new wxCheckBox(panel, -1, _T("Interpolation"));
30     ckShade = new wxCheckBox(panel, -1, _T("Shade"));
31
32     rbRayCasting->Disable();
33     rbRayCasting->SetValue(true);
34     rbMIP->Disable();
35     ckInterpolation->Disable();
36     ckShade->Disable();
37
38
39         wxButton *btnVolumeFunctions    = new wxButton(panel,-1,_T("Read Volume Functions"));
40
41         Connect(btnVolumeFunctions->GetId()     , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnBtnVolumeFunctions       );
42
43         ckBoxVolume->SetValue(false);
44
45         Connect(ckVolum->GetId()                , wxEVT_COMMAND_CHECKBOX_CLICKED          , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnVisibleVolume                          );
46         Connect(ckBoxVolume->GetId()    , wxEVT_COMMAND_CHECKBOX_CLICKED          , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnVisibleBoxVolume                       );
47
48         Connect(rbRayCasting->GetId()   , wxEVT_COMMAND_RADIOBUTTON_SELECTED      , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnRayCastingActive                       );
49         Connect(rbMIP->GetId()          , wxEVT_COMMAND_RADIOBUTTON_SELECTED      , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnMIPActive                              );
50
51     Connect(ckInterpolation->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED      , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnInterpolationActive            );
52         Connect(ckShade->GetId()        , wxEVT_COMMAND_CHECKBOX_CLICKED          , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnShadeActive                    );
53
54
55
56         wxFlexGridSizer *sizer   = new wxFlexGridSizer(1);
57         wxFlexGridSizer *sizerH0 = new wxFlexGridSizer(20);
58         wxFlexGridSizer *sizerH1 = new wxFlexGridSizer(20);
59         wxFlexGridSizer *sizerH2 = new wxFlexGridSizer(20);
60
61         sizerH0->Add( ckVolum                                                                   , 1, wxALL|wxEXPAND, 0);
62         sizerH0->Add( new wxStaticText(panel, -1,_T("          "))      , 1, wxALL|wxEXPAND, 0);
63         sizerH0->Add( ckBoxVolume                                                               , 1, wxALL|wxEXPAND, 0);
64         sizerH0->Add( new wxStaticText(panel, -1,_T("          "))      , 1, wxALL|wxEXPAND, 0);
65         sizerH0->Add( btnVolumeFunctions                                                , 1, wxALL|wxEXPAND, 0);
66
67     sizerH1->Add(rbRayCasting, 1, wxALL|wxEXPAND, 0 );
68     sizerH1->Add(rbMIP, 1, wxALL|wxEXPAND, 0 );
69
70     sizerH2->Add(ckInterpolation, 1, wxALL|wxEXPAND, 0 );
71     sizerH2->Add(ckShade, 1, wxALL|wxEXPAND, 0 );
72
73
74         sizer->Add( sizerH0 , 1, wxALL|wxEXPAND, 2);
75     sizer->Add( sizerH1 , 1, wxALL|wxEXPAND, 2);
76     sizer->Add( sizerH2 , 1, wxALL|wxEXPAND, 2);
77
78         panel->SetSize(300,60);
79         panel->SetAutoLayout(true);
80         panel->SetSizer(sizer);
81         panel->Layout();
82
83         panel->SetEventHandler((wxEvtHandler*)this);
84
85 }
86 //-------------------------------------------------------------------
87 wxVtkClipping3DViewVolCntrlPanel::~wxVtkClipping3DViewVolCntrlPanel()
88 {
89 }
90 //-------------------------------------------------------------------
91 void wxVtkClipping3DViewVolCntrlPanel::Refresh()
92 {
93 }
94
95 //-------------------------------------------------------------------
96 void wxVtkClipping3DViewVolCntrlPanel::OnVisibleVolume(wxCommandEvent& event)
97 {
98     cout<<"JPRG::wxVtkClipping3DViewVolCntrlPanel::OnVisibleVolume::event_value::"<<event.IsChecked()<<endl;
99         _wxvtkclipping3Dview->VisibleVolumeActor( event.IsChecked()  );
100         if(event.IsChecked())
101         {
102             rbRayCasting->Enable();
103         rbMIP->Enable();
104         ckInterpolation->Enable();
105         ckShade->Enable();
106         }
107         else
108         {
109         rbRayCasting->Disable();
110         rbMIP->Disable();
111         ckInterpolation->Disable();
112         ckShade->Disable();
113         }
114         _wxvtkclipping3Dview->Refresh();
115
116         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
117         _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
118 }
119
120 //-------------------------------------------------------------------
121 void wxVtkClipping3DViewVolCntrlPanel::OnVisibleBoxVolume(wxCommandEvent& event)
122 {
123         _wxvtkclipping3Dview->SetVisibleBoxVolume(event.IsChecked() );
124         _wxvtkclipping3Dview->Refresh();
125 }
126
127 //EED 22 Fevrier 2007
128 //-------------------------------------------------------------------
129 void wxVtkClipping3DViewVolCntrlPanel::OnBtnVolumeFunctions(wxCommandEvent& event)
130 {
131
132         int /*i=0,*/ xi,yi,r,g,b;  // JPRx
133         vtkColorTransferFunction* ctfun = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetColorTransferenceFunction();
134         vtkPiecewiseFunction* tfun      = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetTransferencefunction();
135         std::vector<double>* gtf                = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetGreyValuesTransferenceFVector();
136         std::vector<double>* itf                = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetIntensityValuesTransferenceFVector();
137         std::vector<double>* greyctf    = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetGreyValueColorsOfColorTransferenceFVector();
138         std::vector<double>* rctf               = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetRedColorsOfColorTransferenceFVector();
139         std::vector<double>* gctf               = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetGreenColorsOfColorTransferenceFVector();
140         std::vector<double>* bctf               = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetBlueColorsOfColorTransferenceFVector();
141         vtkImageData *imagedata = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
142
143         //use for update in the refresh
144         /*
145         vtkVolumeRayCastMapper* volumeMapper = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVolumeMapper();
146         vtkVolume* newvol       =this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVolumeActor();
147         */
148
149         /*
150         MMLR BORRAME
151         wxFileDialog dialog(this, _T("Choose a file"), _T("c:/Maracas_configuration"),_T(""), _T("*.MarVolConf"), wxOPEN);
152         if (dialog.ShowModal() == wxID_OK)
153         {
154                 _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadVolumeFunctions( (char *)dialog.GetPath().c_str() );
155
156
157         }
158         */
159
160         HistogramDialog* hDlg=new HistogramDialog(NULL,_T("Histogram Dialog"),imagedata,1);
161         //
162         // put in a method
163         //
164         int tfSize=gtf->size();
165                 if(tfSize>0)
166                 {
167                         int i=0;
168                         hDlg->erasePointsTransferenceFunction();
169                         while(i<tfSize)
170                         {
171                                 double g=(*gtf)[i];
172                                 double in=(*itf)[i];
173                                 hDlg->addPointToTransferenceFunction(g,in*100);
174                                 i++;
175                         }
176
177                 }
178
179         int ctfSize=rctf->size();
180         if(ctfSize>0)
181         {
182                 int i=0;
183                         while(i<ctfSize)
184                         {
185                                 double gr=(*greyctf)[i];
186                                 double r=(*rctf)[i];
187                                 double g=(*gctf)[i];
188                                 double b=(*bctf)[i];
189                                 hDlg->addColorPoint(gr,(int)(r*255),(int)(g*255),(int)(b*255));
190                                 i++;
191                         }
192         }
193         //setting variables if the user wants to do refresh
194         hDlg->setCTF(ctfun);
195         hDlg->setTF(tfun);
196         //hDlg->setClipping3DView(_wxvtkclipping3Dview);
197         /*
198         hDlg->setVolume(newvol);
199         hDlg->setVolumeMapper(volumeMapper);
200         */
201         //
202         // when the user had changed the transference Function
203         //
204         if(hDlg->ShowModal()== wxID_OK )
205         {
206                         // -- vtkPiecewiseFunction --
207                         tfun->RemoveAllPoints();
208                         gtf->clear();
209                         itf->clear();
210
211                         int nTFPoints=hDlg->getSizeTransferenceFunction();
212                         int i=0;
213                         while(i<nTFPoints)
214                         {
215                                 hDlg->getTransferenceFunctionPoint(i,xi,yi);
216                                 tfun->AddPoint( xi , yi/100.0 );
217                                 gtf->push_back(xi);
218                                 itf->push_back(yi/100.0);
219                                 i++;
220                         }
221                         // -- vtkColorTransferFunction  --
222                         ctfun->RemoveAllPoints ();
223                         //clean colors
224                         rctf->clear();
225                         gctf->clear();
226                         bctf->clear();
227                         greyctf->clear();
228
229                         int nCTFpoints=hDlg->getSizeBarColor();
230                         i=0;
231                         while(i<nCTFpoints)
232                         {
233                                 hDlg->getDataBarColorPoint(i,xi,r,g,b);
234                                 ctfun->AddRGBPoint(xi,r/255.0,g/255.0,b/255.0 );
235                                 rctf->push_back(r/255.0);
236                                 gctf->push_back(g/255.0);
237                                 bctf->push_back(b/255.0);
238                                 greyctf->push_back(xi);
239                                 i++;
240                         }
241                         //---------------------------------
242                         // Refreshing and sending the event
243                         //---------------------------------
244                         //_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadVolumeFunctions();
245                         _wxvtkclipping3Dview->Refresh();
246                         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
247                         _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
248
249                         /*
250                         volumeMapper->Update();
251                         newvol->Update();
252                         */
253         } else  {
254                 if(hDlg->getRefreshed())
255                 {
256                         int i=0,size;
257                         //--Transference Function----
258                         tfun->RemoveAllPoints();
259                         i=0;
260                         size=gtf->size();
261                         for(i=0;i<size;i++)
262                         {
263                                 double grey1=(*gtf)[i];
264                                 double  in2=(*itf)[i];
265                                 tfun->AddPoint( grey1 , in2 );
266                         }
267
268                         // -- vtkColorTransferFunction  --
269                         ctfun->RemoveAllPoints ();
270
271                         i=0;
272                         size=greyctf->size();
273                         for(i=0;i<size;i++)
274                         {
275                                 double grey2=(*greyctf)[i];
276                                 double red =(*rctf)[i];
277                                 double green =(*gctf)[i];
278                                 double blue = (*bctf)[i];
279                                 ctfun->AddRGBPoint(grey2,red,green,blue);
280                         }
281
282                         //---------------------------------
283                         // Refreshing and sending the event
284                         //---------------------------------
285                         //_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadVolumeFunctions();
286                         _wxvtkclipping3Dview->Refresh();
287                         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
288                         _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
289
290                         /*
291                         volumeMapper->Update();
292                         newvol->Update();
293                         */
294                  }
295
296         }
297         //destroy the dialog
298         hDlg->Destroy();
299 }
300
301 void    wxVtkClipping3DViewVolCntrlPanel::OnRayCastingActive(wxCommandEvent& event){
302     //If Ray Casting is active, others options are disabled. Only RayCasting is true
303     _wxvtkclipping3Dview->SetRayCasting(true);
304     _wxvtkclipping3Dview->SetMIPActive(false);
305     _wxvtkclipping3Dview->Refresh();
306 }
307
308 void    wxVtkClipping3DViewVolCntrlPanel::OnMIPActive(wxCommandEvent& event){
309     //If MIP is active, others options are disabled. Only MIP is true
310     _wxvtkclipping3Dview->SetMIPActive(true);
311     _wxvtkclipping3Dview->SetRayCasting(false);
312
313     _wxvtkclipping3Dview->Refresh();
314 }
315
316
317
318 void    wxVtkClipping3DViewVolCntrlPanel::OnInterpolationActive(wxCommandEvent& event){
319     _wxvtkclipping3Dview->SetInterpolation(event.IsChecked());
320     _wxvtkclipping3Dview->Refresh();
321 }
322
323 void    wxVtkClipping3DViewVolCntrlPanel::OnShadeActive(wxCommandEvent& event){
324     _wxvtkclipping3Dview->SetShade(event.IsChecked());
325     _wxvtkclipping3Dview->Refresh();
326 }
327