1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 # This software is governed by the CeCILL-B license under French law and
10 # abiding by the rules of distribution of free software. You can use,
11 # modify and/ or redistribute the software under the terms of the CeCILL-B
12 # license as circulated by CEA, CNRS and INRIA at the following URL
13 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14 # or in the file LICENSE.txt.
16 # As a counterpart to the access to the source code and rights to copy,
17 # modify and redistribute granted by the license, users are provided only
18 # with a limited warranty and the software's author, the holder of the
19 # economic rights, and the successive licensors have only limited
22 # The fact that you are presently reading this means that you have had
23 # knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */
27 #include "wxVtkClipping3DViewCntrlPanel.h"
28 #include "wx/colordlg.h"
29 #include "vtkTriangleFilter.h"
30 #include "vtkPolyDataConnectivityFilter.h"
31 #include "vtkClosePolyData.h"
32 #include "vtkSTLWriter.h"
33 #include "HistogramDialog.h"
34 #include "marDicomBase.h"
36 wxVtkClipping3DViewCntrlPanel::wxVtkClipping3DViewCntrlPanel(wxWindow *parent, wxVtkClipping3DView *wxvtkclipping3Dview )
39 wxPanel *panel = this;
40 _wxvtkclipping3Dview = wxvtkclipping3Dview;
43 // wxStaticText *text1 = new wxStaticText(panel, -1,_T(" "));
44 // wxStaticText *text2 = new wxStaticText(panel, -1,_T(" "));
46 _surfA = new wxRadioButton(panel,-1,_T("A"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
47 _surfB = new wxRadioButton(panel,-1,_T("B"));
48 _surfC = new wxRadioButton(panel,-1,_T("C"));
49 _surfD = new wxRadioButton(panel,-1,_T("D"));
51 //RaC 03-2010 Divides in two panels thje last tab Surface/Volume
52 //wxCheckBox *ckVolum = new wxCheckBox(panel,-1,_T("Vol"));
53 wxCheckBox *ckBoxSurface = new wxCheckBox(panel,-1,_T("Surface Box"));
55 //RaC 03-2010 Divides in two panels thje last tab Surface/Volume
56 //wxCheckBox *ckBoxVolume = new wxCheckBox(panel,-1,_T("Volume Box"));
58 _color = new wxButton(panel,-1,_T(""));
59 _visible = new wxCheckBox(panel,-1,_T("Vis"));
60 _opacity = new wxSlider(panel,-1,50,0,100, wxDefaultPosition, wxSize(100,40), wxSL_HORIZONTAL | wxSL_LABELS);
62 wxStaticText *isoValueTitle = new wxStaticText(panel,-1,_T("isoValue"));
63 _isoValue = new wxSlider(panel,-1,2000,110,2000, wxDefaultPosition, wxSize(300,40), wxSL_HORIZONTAL | wxSL_AUTOTICKS | wxSL_LABELS);
65 _wireFrameRep = new wxRadioButton(panel,-1,_T("WireFrame"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
66 _surfaceRep = new wxRadioButton(panel,-1,_T("Surface"));
69 vtkImageData *vtkimagedata = wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
70 vtkimagedata->GetScalarRange( range );
71 _isoValue->SetRange( (int)(range[1]*0.1) , (int)(range[1]) );
72 _isoValue->SetValue( (int)(wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetIsovalue(0)) );
74 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
75 #if wxMAJOR_VERSION <= 2
76 _isoValue->SetTickFreq(25,0);
81 _isoValueSpin = new wxSlider(panel , -1,5,1,10,wxDefaultPosition , wxSize(25,45), wxSL_VERTICAL | wxSL_AUTOTICKS |wxSL_LEFT );
82 _isoValueSpin->SetRange(1,8);
83 _isoValueSpin->SetValue(5);
84 Connect(_isoValueSpin->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnIsoValueSpin );
86 wxButton *btnSTL = new wxButton(panel,-1,_T("Create STL File"));
87 wxButton *btnSaveRaw = new wxButton(panel,-1,_T("Save Raw Volume"));
89 //RaC 03-2010 Divides in two panels thje last tab Surface/Volume
90 //wxButton *btnVolumeFunctions = new wxButton(panel,-1,_T("Read Volume Functions"));
93 Connect(btnSTL->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnBtnCreateFileSTL );
94 Connect(btnSaveRaw->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnBtnSaveRawVolume );
96 //RaC 03-2010 Divides in two panels thje last tab Surface/Volume
97 //Connect(btnVolumeFunctions->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnBtnVolumeFunctions );
100 wxButton *btnMeshVTKLoad = new wxButton(panel,-1,_T("Load Mesh"));
101 Connect(btnMeshVTKLoad->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnBtnMeshVTKLoad );
105 int maxX = _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionX();
106 int maxY = _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionY();
107 int maxZ = _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionZ();
108 wxCheckBox *ckBoxX = new wxCheckBox(panel,-1,"X");
109 _positionX = new wxSlider(panel,-1,maxX/2,0,maxX, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_LABELS);
110 wxCheckBox *ckBoxY = new wxCheckBox(panel,-1,"Y");
111 _positionY = new wxSlider(panel,-1,maxY/2,0,maxY, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_LABELS);
112 wxCheckBox *ckBoxZ = new wxCheckBox(panel,-1,"Z");
113 _positionZ = new wxSlider(panel,-1,maxZ/2,0,maxZ, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_LABELS);
116 // ckVolum->Enable(false);
117 ckBoxSurface->SetValue(false);
120 //ckBoxVolume->SetValue(false);
123 _color->SetSize(40,20);
124 _opacity->SetSize(370,20);
125 // ckBoxX->SetValue(true);
126 // ckBoxY->SetValue(true);
127 // ckBoxZ->SetValue(true);
128 _surfA->SetValue(true);
129 _wireFrameRep->SetValue(false);
130 _surfaceRep->SetValue(true);
131 _visible->SetValue(false);
132 // _positionX->SetSize(400,20);
133 // _positionY->SetSize(400,20);
134 // _positionZ->SetSize(400,20);
136 //RaC 03-2010 Divides in two panels thje last tab Surface/Volume
137 //Connect(ckVolum->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnVisibleVolume );
138 //Connect(ckBoxVolume->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnVisibleBoxVolume );
140 Connect(_surfA->GetId() , wxEVT_COMMAND_RADIOBUTTON_SELECTED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnSurface );
141 Connect(_surfB->GetId() , wxEVT_COMMAND_RADIOBUTTON_SELECTED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnSurface );
142 Connect(_surfC->GetId() , wxEVT_COMMAND_RADIOBUTTON_SELECTED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnSurface );
143 Connect(_surfD->GetId() , wxEVT_COMMAND_RADIOBUTTON_SELECTED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnSurface );
144 Connect(ckBoxSurface->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnVisibleBoxSurface );
146 Connect(_wireFrameRep->GetId() , wxEVT_COMMAND_RADIOBUTTON_SELECTED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnRepresentationSurfaceWireFrame );
147 Connect(_surfaceRep->GetId() , wxEVT_COMMAND_RADIOBUTTON_SELECTED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnRepresentationSurfaceWireFrame );
149 Connect(_color->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnColor );
150 Connect(_visible->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnVisibleSurface );
151 Connect(_opacity->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnOpacity );
154 // Connect(_isoValue->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnIsoValue );
155 Connect(_isoValue->GetId() , wxEVT_SCROLL_THUMBRELEASE , (wxObjectEventFunction) &wxVtkClipping3DViewCntrlPanel::OnIsoValue );
158 Connect(ckBoxX->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisX );
159 Connect(_positionX->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionX );
160 Connect(ckBoxY->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisY );
161 Connect(_positionY->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionY );
162 Connect(ckBoxZ->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisZ );
163 Connect(_positionZ->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionZ );
166 wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
167 wxFlexGridSizer *sizerH0 = new wxFlexGridSizer(20);
168 wxFlexGridSizer *sizerH1 = new wxFlexGridSizer(20);
169 wxFlexGridSizer *sizerH2 = new wxFlexGridSizer(10);
170 wxFlexGridSizer *sizerH3 = new wxFlexGridSizer(10);
171 //wxFlexGridSizer *sizerH4 = new wxFlexGridSizer(10); // JPRx
172 //wxFlexGridSizer *sizerH5 = new wxFlexGridSizer(10); // JPRx
173 //wxFlexGridSizer *sizerH6 = new wxFlexGridSizer(10); // JPRx
175 //RaC 03-2010 Divides in two panels thje last tab Surface/Volume
176 //sizerH0->Add( ckVolum , 1, wxALL|wxEXPAND, 0);
177 //sizerH0->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
178 //sizerH0->Add( ckBoxVolume , 1, wxALL|wxEXPAND, 0);
179 //sizerH0->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
180 //sizerH0->Add( btnVolumeFunctions , 1, wxALL|wxEXPAND, 0);
181 //sizerH0->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
182 sizerH0->Add( btnMeshVTKLoad , 1, wxALL|wxEXPAND, 0);
185 sizerH1->Add( _surfA , 1, wxALL|wxEXPAND, 0);
186 sizerH1->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
187 sizerH1->Add( _surfB , 1, wxALL|wxEXPAND, 0);
188 sizerH1->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
189 sizerH1->Add( _surfC , 1, wxALL|wxEXPAND, 0);
190 sizerH1->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
191 sizerH1->Add( _surfD , 1, wxALL|wxEXPAND, 0);
192 sizerH1->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
193 sizerH1->Add( ckBoxSurface , 1, wxALL|wxEXPAND, 0);
194 sizerH1->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
195 sizerH1->Add( btnSTL , 1, wxALL|wxEXPAND, 0);
196 sizerH1->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
197 sizerH1->Add( btnSaveRaw , 1, wxALL|wxEXPAND, 0);
200 // sizerH2->Add( new wxStaticText(panel, -1,_T(" ") , 1, wxALL|wxEXPAND, 0);
201 sizerH2->Add( _color , 1, wxALL|wxEXPAND, 0);
202 sizerH2->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
203 sizerH2->Add( _visible , 1, wxALL|wxEXPAND, 0);
204 sizerH2->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
207 sizerH2->Add( _wireFrameRep , 1,wxSHAPED | wxALIGN_CENTER_VERTICAL , 0);
208 sizerH2->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
209 sizerH2->Add( _surfaceRep , 1,wxSHAPED | wxALIGN_CENTER_VERTICAL , 0);
210 sizerH2->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
214 sizerH3->Add( isoValueTitle , 1, wxALL|wxEXPAND, 0);
215 sizerH3->Add( _isoValueSpin , 1, wxALL|wxEXPAND, 0);
216 sizerH3->Add( _isoValue , 1, wxALL|wxEXPAND, 0);
218 sizerH3->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
219 sizerH3->Add( new wxStaticText(panel, -1,_T("Opacity:")) , 1, wxALL|wxEXPAND, 0);
220 sizerH3->Add( _opacity , 1, wxALL|wxEXPAND, 0);
224 sizerH4->Add( ckBoxX , 1, wxALL|wxEXPAND, 0);
225 sizerH4->Add( text2 , 1, wxALL|wxEXPAND, 0);
226 sizerH4->Add( _positionX , 1, wxALL|wxEXPAND, 0);
228 sizerH5->Add( ckBoxY , 1, wxALL|wxEXPAND, 0);
229 sizerH5->Add( text2 , 1, wxALL|wxEXPAND, 0);
230 sizerH5->Add( _positionY , 1, wxALL|wxEXPAND, 0);
232 sizerH6->Add( ckBoxZ , 1, wxALL|wxEXPAND, 0);
233 sizerH6->Add( text2 , 1, wxALL|wxEXPAND, 0);
234 sizerH6->Add( _positionZ , 1, wxALL|wxEXPAND, 0);
236 sizer->Add( sizerH0 , 1, wxALL|wxEXPAND, 2);
237 sizer->Add( sizerH1 , 1, wxALL|wxEXPAND, 2);
238 sizer->Add( sizerH2 , 1, wxALL|wxEXPAND, 2);
239 sizer->Add( sizerH3 , 1, wxALL|wxEXPAND, 2);
240 // sizer->Add( sizerH4 , 1, wxALL|wxEXPAND, 2);
241 // sizer->Add( sizerH5 , 1, wxALL|wxEXPAND, 2);
242 // sizer->Add( sizerH6 , 1, wxALL|wxEXPAND, 2);
244 panel->SetSize(300,60);
245 panel->SetAutoLayout(true);
246 panel->SetSizer(sizer);
249 panel->SetEventHandler((wxEvtHandler*)this);
252 //-------------------------------------------------------------------
253 wxVtkClipping3DViewCntrlPanel::~wxVtkClipping3DViewCntrlPanel()
256 //-------------------------------------------------------------------
257 void wxVtkClipping3DViewCntrlPanel::Refresh()
259 // wxPanel::Refresh();
261 _positionX->SetValue( _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetX( ) );
262 _positionY->SetValue( _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetY( ) );
263 _positionZ->SetValue( _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetZ( ) );
266 //-------------------------------------------------------------------
267 int wxVtkClipping3DViewCntrlPanel::GetIdTissue()
270 if (_surfA->GetValue()==true)
274 if (_surfB->GetValue()==true)
278 if (_surfC->GetValue()==true)
282 if (_surfD->GetValue()==true)
290 //-------------------------------------------------------------------
291 void wxVtkClipping3DViewCntrlPanel::OnVisibleAxisX(wxCommandEvent& event)
293 _wxvtkclipping3Dview->VisibleImageActor(0, event.IsChecked() );
294 _wxvtkclipping3Dview->Refresh();
296 //-------------------------------------------------------------------
297 void wxVtkClipping3DViewCntrlPanel::OnVisibleAxisY(wxCommandEvent& event)
299 _wxvtkclipping3Dview->VisibleImageActor(1, event.IsChecked() );
300 _wxvtkclipping3Dview->Refresh();
302 //-------------------------------------------------------------------
303 void wxVtkClipping3DViewCntrlPanel::OnVisibleAxisZ(wxCommandEvent& event)
305 _wxvtkclipping3Dview->VisibleImageActor(2, event.IsChecked() );
306 _wxvtkclipping3Dview->Refresh();
310 //-------------------------------------------------------------------
311 void wxVtkClipping3DViewCntrlPanel::OnSurface(wxCommandEvent& event)
313 int idTissue=GetIdTissue();
318 tmpActor = _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetTissueActor(idTissue);
320 tmpActor->GetProperty()->GetColor( rgb );
321 wxColour colour( (int)(rgb[0]*255) , (int)(rgb[1]*255) , (int)(rgb[2]*255) );
322 _color->SetBackgroundColour(colour);
325 _visible->SetValue(_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVisibleTissue(idTissue));
328 _opacity->SetValue( (int)(tmpActor->GetProperty()->GetOpacity()*100) );
330 // Representation Type WireFrame / Surface
331 _surfaceRep->SetValue(_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetRepresentationType(idTissue));
332 _wireFrameRep->SetValue(!_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetRepresentationType(idTissue));
335 int isoValue= (int)(_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetIsovalue(idTissue));
336 _isoValue->SetValue(isoValue);
341 //-------------------------------------------------------------------
342 void wxVtkClipping3DViewCntrlPanel::OnRepresentationSurfaceWireFrame(wxCommandEvent& event)
344 int idTissue=GetIdTissue();
347 _wxvtkclipping3Dview->SetRepSurfaceWireFrame(idTissue , _surfaceRep->GetValue() );
349 _wxvtkclipping3Dview->Refresh();
351 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
352 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
353 #if wxMAJOR_VERSION <= 2
354 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
356 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
362 //-------------------------------------------------------------------
363 void wxVtkClipping3DViewCntrlPanel::OnVisibleVolume(wxCommandEvent& event)
365 _wxvtkclipping3Dview->VisibleVolumeActor( event.IsChecked() );
366 _wxvtkclipping3Dview->Refresh();
368 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
370 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
371 #if wxMAJOR_VERSION <= 2
372 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
374 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
378 //-------------------------------------------------------------------
379 void wxVtkClipping3DViewCntrlPanel::OnVisibleBoxSurface(wxCommandEvent& event)
381 _wxvtkclipping3Dview->SetVisibleBoxSurface(event.IsChecked() );
382 _wxvtkclipping3Dview->Refresh();
384 //-------------------------------------------------------------------
385 void wxVtkClipping3DViewCntrlPanel::OnVisibleBoxVolume(wxCommandEvent& event)
387 printf("EED ERROR JPReyes wxVtkClipping3DViewCntrlPanel::OnVisibleBoxVolume calling _wxvtkclipping3Dview->SetVisibleBoxVolume that not exists ...");
388 //EED01July2011 _wxvtkclipping3Dview->SetVisibleBoxVolume(event.IsChecked() );
389 //this->BoundingBoxChanged(event.IsChecked());
390 _wxvtkclipping3Dview->Refresh();
392 //-------------------------------------------------------------------
393 void wxVtkClipping3DViewCntrlPanel::OnColor(wxCommandEvent& event)
395 int idTissue=GetIdTissue();
398 // EED 17 Janvier 2007
399 wxColourDialog dlgColour(this);
400 // dlgColour.ShowModal();
401 if( dlgColour.ShowModal( ) == wxID_OK )
404 tmpActor = _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetTissueActor(idTissue);
405 float r=dlgColour.GetColourData().GetColour().Red()/255;
406 float g=dlgColour.GetColourData().GetColour().Green()/255;
407 float b=dlgColour.GetColourData().GetColour().Blue()/255;
408 tmpActor->GetProperty()->SetColor( r , g , b );
409 _color->SetBackgroundColour(dlgColour.GetColourData().GetColour());
410 _wxvtkclipping3Dview->Refresh();
411 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
412 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
413 #if wxMAJOR_VERSION <= 2
414 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
416 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
422 //-------------------------------------------------------------------
423 void wxVtkClipping3DViewCntrlPanel::OnVisibleSurface(wxCommandEvent& event)
425 int idTissue=GetIdTissue();
428 _wxvtkclipping3Dview->VisibleActor(idTissue, _visible->GetValue());
429 _wxvtkclipping3Dview->Refresh();
430 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
431 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
432 #if wxMAJOR_VERSION <= 2
433 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
435 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
439 //-------------------------------------------------------------------
440 void wxVtkClipping3DViewCntrlPanel::OnOpacity(wxScrollEvent& event)
442 int idTissue=GetIdTissue();
446 tmpActor = _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetTissueActor(idTissue);
447 float opacity=_opacity->GetValue();
448 tmpActor->GetProperty()->SetOpacity( opacity/100 );
449 _wxvtkclipping3Dview->Refresh();
450 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
451 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
452 #if wxMAJOR_VERSION <= 2
453 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
455 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
460 //----------------------------------------------------------------------------
461 void wxVtkClipping3DViewCntrlPanel::OnIsoValueSpin(wxScrollEvent& event)
463 int value = _isoValue->GetValue();
464 int delta= (int)pow( (double)4 ,(double) _isoValueSpin->GetValue() );
465 int min=value - delta/2;
466 int max=value + delta/2;
472 _isoValue->SetRange(min,max);
476 //------------------------------------------------------------------------
477 void wxVtkClipping3DViewCntrlPanel::OnIsoValue(wxScrollEvent& event)
481 int idTissue=GetIdTissue();
484 int isoValue=_isoValue->GetValue();
485 _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->SetIsovalue(idTissue,isoValue);
487 // tmpStr.Printf("%d",isoValue);
489 _wxvtkclipping3Dview->Refresh();
491 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
493 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
494 #if wxMAJOR_VERSION <= 2
495 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
497 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
503 //-------------------------------------------------------------------
504 void wxVtkClipping3DViewCntrlPanel::OnBtnCreateFileSTL(wxCommandEvent& event)
507 int idTissue=GetIdTissue();
514 wxString dirSTL = wxGetHomeDir( ) ;
515 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
516 #if wxMAJOR_VERSION <= 2
517 wxFileDialog dialog( this, _T("Choose a directory..."), dirSTL , _T(""), _T("*.*"), wxSAVE );
519 wxFileDialog dialog( this, _T("Choose a directory..."), dirSTL , _T(""), _T("*.*"), wxFD_SAVE );
522 if( dialog.ShowModal( ) == wxID_OK )
526 // ------------------------------------------------------------------------
527 // 1. GENERATE STL FILES
528 // ------------------------------------------------------------------------
529 // const char* fileprefix = "c:\\Creatis\\";
530 std::string prefix = (const char*) (dialog.GetPath().mb_str() );
531 std::string filename;
533 // 1.1. Se hace un filtro triangular puesto que el stl writer solo recibe poligonos triangulares.
535 vtkTriangleFilter *filtro = vtkTriangleFilter::New();
538 vtkPolyDataConnectivityFilter *pdcf = vtkPolyDataConnectivityFilter::New();
539 vtkClosePolyData *cpd = vtkClosePolyData::New();
542 //EED 2017-01-01 Migration VTK7
543 #if VTK_MAJOR_VERSION <= 5
544 filtro->SetInput( this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetTissueClipper(idTissue)->GetOutput() );
545 pdcf->SetInput( filtro->GetOutput() );
546 cpd->SetInput( pdcf->GetOutput() );
548 filtro->SetInputData( this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetTissueClipper(idTissue)->GetOutput() );
549 pdcf->SetInputData( filtro->GetOutput() );
550 cpd->SetInputData( pdcf->GetOutput() );
553 // 1.2 se escribe a disco el archivo stl de la superficie interna
555 vtkSTLWriter *writer = vtkSTLWriter::New();
557 //EED 2017-01-01 Migration VTK7
558 #if VTK_MAJOR_VERSION <= 5
559 writer->SetInput( cpd->GetOutput() );
561 writer->SetInputData( cpd->GetOutput() );
565 writer->SetFileName(filename.c_str());
566 writer->SetFileTypeToASCII();
578 //EED 30 Janvier 2007
579 //-------------------------------------------------------------------
580 void wxVtkClipping3DViewCntrlPanel::OnBtnSaveRawVolume(wxCommandEvent& event)
582 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
583 #if wxMAJOR_VERSION <= 2
584 wxFileDialog dialog(this, _T("Choose a file"), _T(""), _T(""), _T("*.maracas"), wxSAVE );
586 wxFileDialog dialog(this, _T("Choose a file"), _T(""), _T(""), _T("*.maracas"), wxFD_SAVE );
588 if (dialog.ShowModal() == wxID_OK)
590 std::string directory = (const char*) (dialog.GetDirectory().mb_str() );
591 std::string filename = (const char*) (dialog.GetFilename().mb_str() );
592 float rescalaSlope = 1;
593 float rescalaIntercept = 0;
594 vtkMPRBaseData *vtkmprbasedata = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData();
595 vtkImageData *vtkimagedata = vtkmprbasedata->GetImageData();
597 vtkimagedata->GetDimensions(dim);
605 //EED 10 oct 2007 MaracasVisu pour bbMaracasvisu
606 marRAW2Files marraw2;
607 marraw2.saveVolume(directory,filename,vtkimagedata,voi,rescalaSlope,rescalaIntercept);
611 //EED 22 Fevrier 2007
612 //-------------------------------------------------------------------
613 void wxVtkClipping3DViewCntrlPanel::OnBtnVolumeFunctions(wxCommandEvent& event)
616 int /*i=0,*/ xi,yi,r,g,b; // JPRx
617 vtkColorTransferFunction* ctfun = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetColorTransferenceFunction();
618 vtkPiecewiseFunction* tfun = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetTransferencefunction();
619 std::vector<double>* gtf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetGreyValuesTransferenceFVector();
620 std::vector<double>* itf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetIntensityValuesTransferenceFVector();
621 std::vector<double>* greyctf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetGreyValueColorsOfColorTransferenceFVector();
622 std::vector<double>* rctf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetRedColorsOfColorTransferenceFVector();
623 std::vector<double>* gctf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetGreenColorsOfColorTransferenceFVector();
624 std::vector<double>* bctf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetBlueColorsOfColorTransferenceFVector();
625 vtkImageData *imagedata = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
627 //use for update in the refresh
629 vtkVolumeRayCastMapper* volumeMapper = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVolumeMapper();
630 vtkVolume* newvol =this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVolumeActor();
635 wxFileDialog dialog(this, _T("Choose a file"), _T("c:/Maracas_configuration"),_T(""), _T("*.MarVolConf"), wxOPEN);
636 if (dialog.ShowModal() == wxID_OK)
638 _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadVolumeFunctions( (char *)dialog.GetPath().c_str() );
644 HistogramDialog* hDlg=new HistogramDialog(NULL,_T("Histogram Dialog"),imagedata,1);
648 int tfSize=gtf->size();
652 hDlg->erasePointsTransferenceFunction();
657 hDlg->addPointToTransferenceFunction(g,in*100);
663 int ctfSize=rctf->size();
669 double gr=(*greyctf)[i];
673 hDlg->addColorPoint(gr,(int)(r*255),(int)(g*255),(int)(b*255));
677 //setting variables if the user wants to do refresh
680 //hDlg->setClipping3DView(_wxvtkclipping3Dview);
682 hDlg->setVolume(newvol);
683 hDlg->setVolumeMapper(volumeMapper);
686 // when the user had changed the transference Function
688 if(hDlg->ShowModal()== wxID_OK )
690 // -- vtkPiecewiseFunction --
691 tfun->RemoveAllPoints();
695 int nTFPoints=hDlg->getSizeTransferenceFunction();
699 hDlg->getTransferenceFunctionPoint(i,xi,yi);
700 tfun->AddPoint( xi , yi/100.0 );
702 itf->push_back(yi/100.0);
705 // -- vtkColorTransferFunction --
706 ctfun->RemoveAllPoints ();
713 int nCTFpoints=hDlg->getSizeBarColor();
717 hDlg->getDataBarColorPoint(i,xi,r,g,b);
718 ctfun->AddRGBPoint(xi,r/255.0,g/255.0,b/255.0 );
719 rctf->push_back(r/255.0);
720 gctf->push_back(g/255.0);
721 bctf->push_back(b/255.0);
722 greyctf->push_back(xi);
725 //---------------------------------
726 // Refreshing and sending the event
727 //---------------------------------
728 //_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadVolumeFunctions();
729 _wxvtkclipping3Dview->Refresh();
730 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
732 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
733 #if wxMAJOR_VERSION <= 2
734 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
736 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
742 volumeMapper->Update();
746 if(hDlg->getRefreshed())
749 //--Transference Function----
750 tfun->RemoveAllPoints();
755 double grey1=(*gtf)[i];
756 double in2=(*itf)[i];
757 tfun->AddPoint( grey1 , in2 );
760 // -- vtkColorTransferFunction --
761 ctfun->RemoveAllPoints ();
764 size=greyctf->size();
767 double grey2 = (*greyctf)[i];
768 double red = (*rctf)[i];
769 double green = (*gctf)[i];
770 double blue = (*bctf)[i];
771 ctfun->AddRGBPoint(grey2,red,green,blue);
774 //---------------------------------
775 // Refreshing and sending the event
776 //---------------------------------
777 //_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadVolumeFunctions();
778 _wxvtkclipping3Dview->Refresh();
779 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
780 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
781 #if wxMAJOR_VERSION <= 2
782 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
784 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
788 volumeMapper->Update();
799 //-------------------------------------------------------------------
800 void wxVtkClipping3DViewCntrlPanel::OnBtnMeshVTKLoad(wxCommandEvent& event)
802 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
803 #if wxMAJOR_VERSION <= 2
804 wxFileDialog dialog(this, _T("Choose a file"), _T("c:/Maracas_configuration"),_T(""), _T("*.vtk"), wxOPEN);
805 if (dialog.ShowModal() == wxID_OK)
807 _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadMeshVTK( (char *)dialog.GetPath().c_str() );
808 _wxvtkclipping3Dview->Refresh();
809 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
810 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
813 wxFileDialog dialog(this, _T("Choose a file"), _T("c:/Maracas_configuration"),_T(""), _T("*.vtk"), wxFD_OPEN);
814 if (dialog.ShowModal() == wxID_OK)
816 _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadMeshVTK( dialog.GetPath().char_str() );
817 _wxvtkclipping3Dview->Refresh();
818 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
819 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);