]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderImageManagementPanel.cpp
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasRenderImageManagementPanel.cpp
1 #include "wxMaracasRenderImageManagementPanel.h"
2
3 #include <vtkVolume.h>
4
5 /**
6 ** Class constructor
7 **/
8 wxMaracasRenderImageManagementPanel::wxMaracasRenderImageManagementPanel(wxWindow* parent, wxMaracasMultipleVolumeRendererManager* _vol, wxMaracasSurfaceRenderingManager* _surface1, 
9                                                                                                                                                  wxMaracasSurfaceRenderingManager* _surface2, wxMaracasSurfaceRenderingManager* _surface3, int id)
10 : wxDialog(parent, -1, _T("Image Position Parameters"), wxDefaultPosition, wxDefaultSize, wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE)
11 {
12         vol = _vol;
13         surface1 = _surface1;
14         surface2 = _surface2;
15         surface3 = _surface3;
16
17         propID = id;
18
19         transformV = vtkTransform::New();
20         //vtkMatrix4x4 *_matrixV = vtkMatrix4x4::New();
21         //_matrixV->Identity();
22         //transformV->SetMatrix(_matrixV);
23         //transformV->SetInput(vol->getViewData(propID)->getProp3D()->GetUserTransform());
24
25         transformS1 = vtkTransform::New();
26         //vtkMatrix4x4 *_matrixS1 = vtkMatrix4x4::New();
27         //_matrixS1->Identity();
28         //transformS1->SetMatrix(_matrixS1);
29         //transformS1->SetInput(surface1->getViewData(propID)->getProp3D()->GetUserTransform());
30         
31         transformS2 = vtkTransform::New();
32         //vtkMatrix4x4 *_matrixS2 = vtkMatrix4x4::New();
33         //_matrixS2->Identity();
34         //transformS2->SetMatrix(_matrixS2);
35         //transformS2->SetInput(surface2->getViewData(propID)->getProp3D()->GetUserTransform());
36         
37         transformS3 = vtkTransform::New();
38         //vtkMatrix4x4 *_matrixS3 = vtkMatrix4x4::New();
39         //_matrixS3->Identity();
40         //transformS3->SetMatrix(_matrixS3);
41         //transformS3->SetInput(surface3->getViewData(propID)->getProp3D()->GetUserTransform());
42
43         createControls();
44 }
45
46 /**
47 ** 
48 **/
49 void wxMaracasRenderImageManagementPanel::createControls()
50 {
51         wxFlexGridSizer* sizersliders = new wxFlexGridSizer(1);
52         
53         wxStaticText* tx = new wxStaticText(this, -1, wxString(_T("  Translate X  ")));
54         sliderTranslateX = new wxSlider(this, -1, 0, -200, 200, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
55         sliderTranslateX->SetLineSize(1);
56         Connect(sliderTranslateX->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Translate);
57         sizersliders->Add(tx, wxFIXED_MINSIZE);
58         sizersliders->Add(sliderTranslateX,wxSizerFlags().Expand().Center());
59
60         wxStaticText* ty = new wxStaticText(this, -1, wxString(_T("  Translate Y  ")));
61         sliderTranslateY = new wxSlider(this, -1, 0, -200, 200, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
62         sliderTranslateY->SetLineSize(1);
63         Connect(sliderTranslateY->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Translate);
64         sizersliders->Add(ty, wxFIXED_MINSIZE);
65         sizersliders->Add(sliderTranslateY,wxSizerFlags().Expand().Center());
66
67         wxStaticText* tz = new wxStaticText(this, -1, wxString(_T("  Translate Z  ")));
68         sliderTranslateZ = new wxSlider(this, -1, 0, -200, 200, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
69         sliderTranslateZ->SetLineSize(1);
70         Connect(sliderTranslateZ->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Translate);
71         sizersliders->Add(tz, wxFIXED_MINSIZE);
72         sizersliders->Add(sliderTranslateZ,wxSizerFlags().Expand().Center());
73
74         wxStaticText* rx = new wxStaticText(this, -1, wxString(_T("  Rotate X  ")));
75         sliderRotateX = new wxSlider(this, -1, 0, -360, 360, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
76         sliderRotateX->SetLineSize(1);
77         Connect(sliderRotateX->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Rotate);
78         sizersliders->Add(rx, wxFIXED_MINSIZE);
79         sizersliders->Add(sliderRotateX,wxSizerFlags().Expand().Center());
80
81         wxStaticText* ry = new wxStaticText(this, -1, wxString(_T("  Rotate Y  ")));
82         sliderRotateY = new wxSlider(this, -1, 0, -360, 360, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
83         sliderRotateY->SetLineSize(1);
84         Connect(sliderRotateY->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Rotate);
85         sizersliders->Add(ry, wxFIXED_MINSIZE);
86         sizersliders->Add(sliderRotateY,wxSizerFlags().Expand().Center());
87
88         wxStaticText* rz = new wxStaticText(this, -1, wxString(_T("  Rotate Z  ")));
89         sliderRotateZ = new wxSlider(this, -1, 0, -360, 360, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
90         sliderRotateZ->SetLineSize(1);
91         Connect(sliderRotateZ->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Rotate);
92         sizersliders->Add(rz, wxFIXED_MINSIZE);
93         sizersliders->Add(sliderRotateZ,wxSizerFlags().Expand().Center());
94
95         wxStaticText* sx = new wxStaticText(this, -1, wxString(_T("  Scale X  ")));
96         sliderScaleX = new wxSlider(this, -1, 0, -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
97         sliderScaleX->SetLineSize(1);
98         Connect(sliderScaleX->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Scale);
99         sizersliders->Add(sx, wxFIXED_MINSIZE);
100         sizersliders->Add(sliderScaleX,wxSizerFlags().Expand().Center());
101
102         wxStaticText* sy = new wxStaticText(this, -1, wxString(_T("  Scale Y  ")));
103         sliderScaleY = new wxSlider(this, -1, 0, -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
104         sliderScaleY->SetLineSize(1);
105         Connect(sliderScaleY->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Scale);
106         sizersliders->Add(sy, wxFIXED_MINSIZE);
107         sizersliders->Add(sliderScaleY,wxSizerFlags().Expand().Center());
108
109         wxStaticText* sz = new wxStaticText(this, -1, wxString(_T("  Scale Z  ")));
110         sliderScaleZ = new wxSlider(this, -1, 0, -100, 100, wxDefaultPosition, this->GetSize(), wxSL_LABELS);
111         sliderScaleZ->SetLineSize(1);
112         Connect(sliderScaleZ->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Scale);
113         sizersliders->Add(sz, wxFIXED_MINSIZE);
114         sizersliders->Add(sliderScaleZ,wxSizerFlags().Expand().Center());
115         
116         //ATENTION!! A SUPRIMER LES LIGNES ON BAS SI ELES NE SONT PAS NECESSAIRES!!
117         
118         /*
119         //wxString choices[2];
120         //choices[0] = wxString(_T("On"));
121         //choices[1] = wxString(_T("Off"));
122         checkboxSA = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering A")));
123         Connect(checkboxSA->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSAChange);   
124         checkboxSA->SetValue(true);     
125
126         sizercheck->Add(checkboxSA, wxFIXED_MINSIZE);
127
128         //wxString choices[2];
129         //choices[0] = wxString(_T("On"));
130         //choices[1] = wxString(_T("Off"));
131         checkboxSB = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering B")));
132         Connect(checkboxSB->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSBChange);   
133         checkboxSB->SetValue(true);     
134
135         sizercheck->Add(checkboxSB, wxFIXED_MINSIZE);
136
137         //wxString choices[2];
138         //choices[0] = wxString(_T("On"));
139         //choices[1] = wxString(_T("Off"));
140         checkboxSC = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering C")));
141         Connect(checkboxSC->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSCChange);   
142         checkboxSC->SetValue(true);     
143
144         sizercheck->Add(checkboxSC, wxFIXED_MINSIZE);
145         sizerrenderprop->Add(sizercheck, wxFIXED_MINSIZE);*/
146
147         this->SetSizer(sizersliders, true);             
148         this->SetAutoLayout(true);
149 }
150
151 /**
152 ** Class destructor
153 **/
154 wxMaracasRenderImageManagementPanel::~wxMaracasRenderImageManagementPanel()
155 {       
156 }
157
158 /**
159 ** Transforms a volume by the given value for the X axis
160 **/
161 void wxMaracasRenderImageManagementPanel::Translate(wxCommandEvent& event)
162 {
163         printf("silder translateX = %d \n", sliderTranslateX->GetValue());
164         transformV->Identity();
165         transformS1->Identity();
166         transformS2->Identity();
167         transformS3->Identity();
168
169         transformV->Translate(sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue());
170         transformS1->Translate(sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue());
171         transformS2->Translate(sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue());
172         transformS3->Translate(sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue());
173
174         Refresh();
175 }
176
177 /**
178 ** Rotates a volume by the given degree for the X axis
179 **/
180 void wxMaracasRenderImageManagementPanel::Rotate(wxCommandEvent& event)
181 {
182         printf("silder rotateX = %d \n", sliderRotateX->GetValue());
183
184         transformV->Identity();
185         transformS1->Identity();
186         transformS2->Identity();
187         transformS3->Identity();
188         
189         transformS1->RotateX( sliderRotateX->GetValue() );
190         transformS2->RotateX( sliderRotateX->GetValue() );
191         transformS3->RotateX( sliderRotateX->GetValue() );
192
193         transformV->RotateY( sliderRotateY->GetValue() );
194         transformS1->RotateY( sliderRotateY->GetValue() );
195         transformS2->RotateY( sliderRotateY->GetValue() );
196         transformS3->RotateY( sliderRotateY->GetValue() );
197
198         transformV->RotateZ( sliderRotateZ->GetValue() );
199         transformS1->RotateZ( sliderRotateZ->GetValue() );
200         transformS2->RotateZ( sliderRotateZ->GetValue() );
201         transformS3->RotateZ( sliderRotateZ->GetValue() );
202
203         Refresh();
204 }
205
206 /**
207 ** Scales a volume by the given value for the X axis
208 **/
209 void wxMaracasRenderImageManagementPanel::Scale(wxCommandEvent& event)
210 {
211         transformV->Identity();
212         transformS1->Identity();
213         transformS2->Identity();
214         transformS3->Identity();
215
216         transformV->Scale( sliderTranslateX->GetValue()/50, sliderTranslateY->GetValue()/50, sliderTranslateZ->GetValue()/50 );
217         transformS1->Scale( sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue() );
218         transformS2->Scale( sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue() );
219         transformS3->Scale( sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue() );
220
221         Refresh();
222 }
223
224 void wxMaracasRenderImageManagementPanel::Refresh()
225 {
226         try{
227                 transformV->Update();
228                 transformS1->Update();
229                 transformS2->Update();
230                 transformS3->Update();
231
232                 vol->getViewData(propID)->getProp3D()->SetUserMatrix(transformV->GetMatrix());
233                 surface1->getViewData(propID)->getProp3D()->SetUserMatrix(transformV->GetMatrix());
234                 surface2->getViewData(propID)->getProp3D()->SetUserMatrix(transformV->GetMatrix());
235                 surface3->getViewData(propID)->getProp3D()->SetUserMatrix(transformV->GetMatrix());
236         }
237         catch(char* str)
238         {
239                 std::cout << "Exception : " << str << '\n';
240                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
241                 diag->ShowModal();
242         }
243 }