]> Creatis software - creaMaracasVisu.git/blob - bbtk/src/bbcreaMaracasVisuTransformWidget2.cxx
#3558 ShowNPoints_Tools::LoadCollection
[creaMaracasVisu.git] / bbtk / src / bbcreaMaracasVisuTransformWidget2.cxx
1 //===== 
2 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
3 //===== 
4 #include "bbcreaMaracasVisuTransformWidget2.h"
5 #include "bbcreaMaracasVisuPackage.h"
6
7 #include <wx/filedlg.h>
8
9 namespace bbcreaMaracasVisu
10 {
11
12 // The widget created by the box
13 class TransformWidgetPanel : public wxPanel
14 {
15 public:
16     TransformWidgetPanel(TransformWidget2* box, wxWindow *parent);
17     ~TransformWidgetPanel           ();
18     void OnSetPoint                 (wxCommandEvent& event);
19     void ReleaseAngle               (wxSlider *slider);
20     void TrackAngle                 (double angle ,int idVector);
21     void SetPossiblePoint           (std::vector<double> possiblePoint);
22     void _OnSetPoint                ();
23     void _OnSetPointLocalReference  ();
24     void ReleaseCenter              (wxSlider *slider);
25     void TrackCenter                (double step);
26
27     
28     // Type : Module A
29     void OnSliderTrackX     (wxScrollEvent& event);
30     void OnSliderTrackY     (wxScrollEvent& event);
31     void OnSliderTrackZ     (wxScrollEvent& event);
32     void OnSliderReleaseX   (wxScrollEvent& event);
33     void OnSliderReleaseY   (wxScrollEvent& event);
34     void OnSliderReleaseZ   (wxScrollEvent& event);
35     
36     // Type : Module B
37     void OnRadioButtonX(wxEvent& event);
38     void OnRadioButtonY(wxEvent& event);
39     void OnRadioButtonZ(wxEvent& event);
40     void OnRadioButtonN(wxEvent& event);
41     void OnSave(wxCommandEvent& event);
42     void Save(std::string filename);
43     void OnLoad(wxCommandEvent& event);
44     void Load(std::string filename);
45     void OnReset(wxCommandEvent& event);
46     void OnMoveDown(wxCommandEvent& event);
47     void OnMoveUp(wxCommandEvent& event);
48     void OnMemory(wxCommandEvent& event);
49     void OnMemoryGoBack(wxCommandEvent& event);
50     void OnSliderGeneralTrack(wxScrollEvent& event);
51     void OnSliderGeneralRelease(wxScrollEvent& event);
52     
53 private:
54     vtkTransform            *t;
55     vtkTransform            *tt;
56     std::vector<double>     mttActualPoint;
57     std::vector<double>     mPossiblePoint;
58     std::vector<double>     mLastPossiblePoint_localReference;
59     std::vector<double>     mActualPoint;
60     std::vector<double>     mMemoryPoint;
61     vtkMatrix4x4            *mMemoryMatrix;
62     TransformWidget2        *mBox;
63     
64     // Type : Module A
65     wxSlider                *mSliderRotationX;
66     wxSlider                *mSliderRotationY;
67     wxSlider                *mSliderRotationZ;
68     // Type : Module B
69     char                    mTool;
70     wxSlider                *mSliderGeneral;
71     wxCheckBox              *cbLocalReference;
72 };
73
74 //------------------------------------------------------------------------
75 //------------------------------------------------------------------------
76 //------------------------------------------------------------------------
77
78 TransformWidgetPanel::TransformWidgetPanel(TransformWidget2* box, wxWindow *parent)
79   : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
80   mBox(box)
81 {
82     t                       = vtkTransform::New();   // Transoform activa
83     tt                      = vtkTransform::New();   // Transform temporal para el slider
84     mMemoryMatrix           = vtkMatrix4x4::New();
85     mttActualPoint.push_back(0);
86     mttActualPoint.push_back(0);
87     mttActualPoint.push_back(0);
88     
89     mActualPoint.push_back(0);
90     mActualPoint.push_back(0);
91     mActualPoint.push_back(0);
92
93     mPossiblePoint.push_back(0);
94     mPossiblePoint.push_back(0);
95     mPossiblePoint.push_back(0);
96
97     wxSize  sizeSliderWidget;
98     wxSize sizeButton;
99     
100     if (mBox->bbGetInputType()==0)
101     {
102         sizeSliderWidget.Set(25,25);
103         sizeButton.Set( 45 , -1 );
104         mSliderRotationX        = new wxSlider( this, -1, 0 , -180, 180     , wxDefaultPosition,sizeSliderWidget, wxSL_HORIZONTAL, wxDefaultValidator                           );
105         mSliderRotationY        = new wxSlider( this, -1, 0 , -180, 180     , wxDefaultPosition,sizeSliderWidget, wxSL_HORIZONTAL, wxDefaultValidator                           );
106         mSliderRotationZ        = new wxSlider( this, -1, 0 , -180, 180     , wxDefaultPosition,sizeSliderWidget, wxSL_HORIZONTAL, wxDefaultValidator                           );
107         wxButton *mBtnSetPoint  = new wxButton( this, -1, _T("Set Point")   , wxDefaultPosition, sizeButton                                                                     );
108         Connect(mBtnSetPoint->GetId()     , wxEVT_COMMAND_BUTTON_CLICKED    , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSetPoint      );
109         Connect( mSliderRotationX->GetId(), wxEVT_SCROLL_THUMBRELEASE       , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderReleaseX);
110         Connect( mSliderRotationX->GetId(), wxEVT_SCROLL_THUMBTRACK         , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackX  );
111         Connect( mSliderRotationX->GetId(), wxEVT_SCROLL_CHANGED            , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackX  );
112         Connect( mSliderRotationY->GetId(), wxEVT_SCROLL_THUMBRELEASE       , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderReleaseY);
113         Connect( mSliderRotationY->GetId(), wxEVT_SCROLL_THUMBTRACK         , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackY  );
114         Connect( mSliderRotationY->GetId(), wxEVT_SCROLL_CHANGED            , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackY  );
115         Connect( mSliderRotationZ->GetId(), wxEVT_SCROLL_THUMBRELEASE       , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderReleaseZ);
116         Connect( mSliderRotationZ->GetId(), wxEVT_SCROLL_THUMBTRACK         , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackZ  );
117         Connect( mSliderRotationZ->GetId(), wxEVT_SCROLL_CHANGED            , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackZ  );
118         wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
119         sizer->Add( mSliderRotationX    , 1 );
120         sizer->Add( mSliderRotationY    , 1 );
121         sizer->Add( mSliderRotationZ    , 1 );
122         sizer->Add( mBtnSetPoint        , 1 );
123         SetSizer(sizer);
124     } // if Type == 0
125     
126     if (mBox->bbGetInputType()==1)
127     {
128         sizeSliderWidget.Set( 160 , -1  );
129         sizeButton.Set( 15 , -1 );
130         wxRadioButton *rBtnC     = new wxRadioButton( this, -1, _T("Cen")        , wxDefaultPosition  , wxDefaultSize , wxRB_GROUP      );
131         wxRadioButton *rBtnX     = new wxRadioButton( this, -1, _T("ri")         , wxDefaultPosition  , wxDefaultSize , 0               );
132         wxRadioButton *rBtnY     = new wxRadioButton( this, -1, _T("rj")         , wxDefaultPosition  , wxDefaultSize , 0               );
133         wxRadioButton *rBtnZ     = new wxRadioButton( this, -1, _T("rk")         , wxDefaultPosition  , wxDefaultSize , 0               );
134         wxButton *BtnSave        = new wxButton     ( this, -1, _T("Save")       , wxDefaultPosition, sizeButton                                                                            );
135         wxButton *BtnLoad        = new wxButton     ( this, -1, _T("Load")       , wxDefaultPosition, sizeButton                                                                            );
136         rBtnC->SetValue(true);        mTool = 3;
137         mSliderGeneral           = new wxSlider     ( this, -1, 0 , -180, 180    , wxDefaultPosition,sizeSliderWidget ,wxSL_HORIZONTAL, wxDefaultValidator                                  );
138         cbLocalReference         = new wxCheckBox   ( this,-1, _T("Loc Ref")     , wxDefaultPosition,wxDefaultSize    ,wxCHK_2STATE | wxALIGN_RIGHT                                         );
139         wxButton *BtnMoveDown    = new wxButton     ( this, -1, _T("-")          , wxDefaultPosition, sizeButton                                                                            );
140         wxButton *BtnMoveUp      = new wxButton     ( this, -1, _T("+")          , wxDefaultPosition, sizeButton                                                                            );
141         wxButton *BtnReset       = new wxButton     ( this, -1, _T("Init")       , wxDefaultPosition, sizeButton                                                                            );
142         wxButton *BtnMemory      = new wxButton     ( this, -1, _T("Set")        , wxDefaultPosition, sizeButton                                                                            );
143         wxButton *BtnMemoryGoBack= new wxButton     ( this, -1, _T("Reset")      , wxDefaultPosition, sizeButton                                                                            );
144         Connect( rBtnX->GetId()          , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonX               );
145         Connect( rBtnY->GetId()          , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonY               );
146         Connect( rBtnZ->GetId()          , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonZ               );
147         Connect( rBtnC->GetId()          , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonN               );
148         Connect( BtnSave->GetId()        , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnSave                       );
149         Connect( BtnLoad->GetId()        , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnLoad                       );
150         Connect( BtnReset->GetId()       , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnReset                );
151         Connect( BtnMoveDown->GetId()    , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMoveDown             );
152         Connect( BtnMoveUp->GetId()      , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMoveUp               );
153         Connect( BtnMemory->GetId()      , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMemory               );
154         Connect( BtnMemoryGoBack->GetId(), wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMemoryGoBack         );
155         Connect( mSliderGeneral->GetId() , wxEVT_SCROLL_THUMBRELEASE             , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderGeneralRelease );
156         Connect( mSliderGeneral->GetId() , wxEVT_SCROLL_THUMBTRACK               , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderGeneralTrack   );
157         Connect( mSliderGeneral->GetId() , wxEVT_SCROLL_CHANGED                  , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderGeneralTrack   );
158         
159         wxBoxSizer *sizerA1 = new wxBoxSizer(wxHORIZONTAL);
160         sizerA1->Add( rBtnC              , 1 );
161         sizerA1->Add( rBtnX              , 1 );
162         sizerA1->Add( rBtnY              , 1 );
163         sizerA1->Add( rBtnZ              , 1 );
164         wxBoxSizer *sizerA2 = new wxBoxSizer(wxHORIZONTAL);
165         sizerA2->Add( BtnSave            , 1 );
166         sizerA2->Add( BtnLoad            , 1 );
167         wxBoxSizer *sizerA = new wxBoxSizer(wxHORIZONTAL);
168         sizerA->Add( sizerA1            , 1 );
169         sizerA->Add( sizerA2            , 1 );
170
171         wxBoxSizer *sizerB = new wxBoxSizer(wxHORIZONTAL);
172         sizerB->Add( mSliderGeneral     , 1 );
173         sizerB->Add( BtnMoveDown        , 0 );
174         sizerB->Add( BtnMoveUp          , 0 );
175         wxBoxSizer *sizerC = new wxBoxSizer(wxHORIZONTAL);
176         sizerC->Add( cbLocalReference   , 1 );
177         sizerC->Add( BtnReset           , 1 );
178         sizerC->Add( BtnMemory          , 1 );
179         sizerC->Add( BtnMemoryGoBack    , 1 );
180         wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
181         sizer->Add( sizerA              , 0 );
182         sizer->Add( sizerB              , 0 );
183         sizer->Add( sizerC              , 0 );
184         SetSizer(sizer);
185     } // if
186 }
187
188 TransformWidgetPanel::~TransformWidgetPanel()
189 {
190 }
191
192 void TransformWidgetPanel::ReleaseAngle( wxSlider * slider )
193 {
194     if (slider!=NULL)
195     {
196         slider->SetValue(0);
197     }
198     // t = t*tt
199     t->PostMultiply();
200     t->Concatenate ( tt->GetMatrix() );    t->Update();
201     tt->GetMatrix()->Identity();  tt->Update();
202     mBox->bbSetOutputOut( t );
203     mBox->bbSignalOutputModification(std::string("Out"));
204 }
205
206 void TransformWidgetPanel::OnSliderReleaseX(wxScrollEvent& event)
207 {
208     ReleaseAngle( mSliderRotationX );
209 }
210
211 void TransformWidgetPanel::OnSliderReleaseY(wxScrollEvent& event)
212 {
213     ReleaseAngle( mSliderRotationY );
214 }
215
216 void TransformWidgetPanel::OnSliderReleaseZ(wxScrollEvent& event)
217 {
218     ReleaseAngle( mSliderRotationZ );
219 }
220
221 void TransformWidgetPanel::TrackAngle( double angle, int idVector)
222 {
223     // out = t*tt
224     if (tt!=NULL)
225     {
226         tt->Delete();
227     }
228     vtkMatrix4x4    *tm     = t->GetMatrix();
229     double          tvx    = tm->GetElement(0,idVector);
230     double          tvy    = tm->GetElement(1,idVector);
231     double          tvz    = tm->GetElement(2,idVector);
232     tt = vtkTransform::New();
233     tt->PostMultiply();
234
235 //    angle = angle/2;
236     tt->RotateWXYZ( angle , tvx,tvy,tvz);  tt->Update();
237     vtkTransform *result=vtkTransform::New();
238     result->PostMultiply();
239     result->Concatenate ( t->GetMatrix() );    result->Update();
240     result->Concatenate ( tt->GetMatrix() );   result->Update();
241     mBox->bbSetOutputOut( result );
242     mBox->bbSignalOutputModification(std::string("Out"));
243 }
244
245 void TransformWidgetPanel::OnSliderTrackX(wxScrollEvent& event)
246 {
247     TrackAngle(mSliderRotationX->GetValue() ,0);
248 }
249
250 void TransformWidgetPanel::OnSliderTrackY(wxScrollEvent& event)
251 {
252     TrackAngle(mSliderRotationY->GetValue() ,1);
253 }
254
255 void TransformWidgetPanel::OnSliderTrackZ(wxScrollEvent& event)
256 {
257     TrackAngle(mSliderRotationZ->GetValue() ,2);
258 }
259
260 void TransformWidgetPanel::SetPossiblePoint(std::vector<double> possiblePoint)
261 {
262     mPossiblePoint = possiblePoint;
263 }
264
265 void TransformWidgetPanel::_OnSetPoint()
266 {
267     mActualPoint                        = mPossiblePoint;
268     mLastPossiblePoint_localReference   = mPossiblePoint;
269     mBox->bbSetOutputActualPoint( mActualPoint );
270     mBox->bbSignalOutputModification(std::string("ActualPoint"));
271 }
272
273 void TransformWidgetPanel::_OnSetPointLocalReference()
274 {
275     mActualPoint        = mLastPossiblePoint_localReference;
276 //    mLastPossiblePoint  = mPossiblePoint;
277     mBox->bbSetOutputActualPoint( mActualPoint );
278     mBox->bbSignalOutputModification(std::string("ActualPoint"));
279 }
280
281
282
283 void TransformWidgetPanel::OnSetPoint(wxCommandEvent& event)
284 {
285     _OnSetPoint();
286 }
287
288 //------------------------------------------------------------------------
289
290 void TransformWidgetPanel::OnRadioButtonX(wxEvent& event)
291 {
292     mTool = 0;
293 }
294
295 void TransformWidgetPanel::OnRadioButtonY(wxEvent& event)
296 {
297     mTool = 1;
298 }
299
300 void TransformWidgetPanel::OnRadioButtonZ(wxEvent& event)
301 {
302     mTool = 2;
303 }
304
305 void TransformWidgetPanel::OnRadioButtonN(wxEvent& event)
306 {
307     mTool = 3;
308 }
309
310 void TransformWidgetPanel::OnReset(wxCommandEvent& event)
311 {
312     if ((mTool>=0) && (mTool<=2))
313     {
314         
315         if (cbLocalReference->GetValue()==false)
316         {
317             tt->GetMatrix()->Identity(); tt->Update();
318             t->GetMatrix()->Identity();  t->Update();
319             if (mTool==0)
320             {
321                 ReleaseAngle( NULL );
322             } // if
323             if (mTool==1)
324             {
325                 t->RotateWXYZ( 90 , 1,0,0);  tt->Update();
326                 ReleaseAngle( NULL );
327             } // if
328             if (mTool==2)
329             {
330                 t->RotateWXYZ( 90 , 0,1,0);  tt->Update();
331                 ReleaseAngle( NULL );
332             } // if
333         } else {
334             TrackAngle(45, mTool );
335             ReleaseAngle( NULL );
336         } // if cbLocalReference
337
338         
339     } // if mTool >=0   <=2
340     if (mTool==3)
341     {
342         if (cbLocalReference->GetValue()==false)
343         {
344             _OnSetPoint();
345         } else {
346             _OnSetPointLocalReference();
347         } // if cbLocalReference
348     } // if mTool == 3
349 }
350
351
352
353 void TransformWidgetPanel::ReleaseCenter( wxSlider * slider )
354 {
355     if (slider!=NULL)
356     {
357         slider->SetValue(0);
358     }
359     mActualPoint[0] = mttActualPoint[0];
360     mActualPoint[1] = mttActualPoint[1];
361     mActualPoint[2] = mttActualPoint[2];
362 }
363
364 void TransformWidgetPanel::TrackCenter( double step )
365 {
366     vtkMatrix4x4    *tm     = t->GetMatrix();
367     mttActualPoint[0]       = mActualPoint[0] + tm->GetElement(0,2)*step;
368     mttActualPoint[1]       = mActualPoint[1] + tm->GetElement(1,2)*step;
369     mttActualPoint[2]       = mActualPoint[2] + tm->GetElement(2,2)*step;
370     mBox->bbSetOutputActualPoint( mttActualPoint );
371     mBox->bbSignalOutputModification(std::string("ActualPoint"));
372     mBox->bbSetOutputOut( t );
373     mBox->bbSignalOutputModification(std::string("Out"));
374 }
375
376 void TransformWidgetPanel::OnMoveDown(wxCommandEvent& event)
377 {
378     if ((mTool>=0) && (mTool<=2))
379     {
380         TrackAngle( -1 , mTool );
381         ReleaseAngle( NULL );
382     }
383     if (mTool==3)
384     {
385         TrackCenter( -1 );
386         ReleaseCenter( NULL );
387     } // if mTool == 3
388 }
389
390 void TransformWidgetPanel::OnMoveUp(wxCommandEvent& event)
391 {
392     if ((mTool>=0) && (mTool<=2))
393     {
394         TrackAngle( 1 , mTool );
395         ReleaseAngle( NULL );
396     } // if mTool == 0 1 2
397     if (mTool==3)
398     {
399         TrackCenter( 1 );
400         ReleaseCenter( NULL );
401     } // if mTool == 3
402 }
403
404 void TransformWidgetPanel::OnMemory(wxCommandEvent& event)
405 {
406     mMemoryPoint            = mActualPoint;
407     mMemoryMatrix->DeepCopy( t->GetMatrix() );
408 }
409
410 void TransformWidgetPanel::Save(std::string filename)
411 {
412     FILE *ff;
413     ff = fopen( filename.c_str() , "w+" );
414     if (ff!=NULL)
415     {
416         fprintf(ff,"ActualPoint:\n");
417         fprintf(ff,"%f  %f  %f\n",mActualPoint[0], mActualPoint[1], mActualPoint[2] );
418         vtkMatrix4x4 *m = t->GetMatrix();
419         fprintf(ff,"Transform:\n");
420         fprintf(ff,"%f  %f  %f  %f  \n",m->GetElement(0,0), m->GetElement(1,0), m->GetElement(2,0), m->GetElement(3,0) );
421         fprintf(ff,"%f  %f  %f  %f  \n",m->GetElement(0,1), m->GetElement(1,1), m->GetElement(2,1), m->GetElement(3,1) );
422         fprintf(ff,"%f  %f  %f  %f  \n",m->GetElement(0,2), m->GetElement(1,2), m->GetElement(2,2), m->GetElement(3,2) );
423         fprintf(ff,"%f  %f  %f  %f\n\n",m->GetElement(0,3), m->GetElement(1,3), m->GetElement(2,3), m->GetElement(3,3) );
424         fclose(ff);
425     } else {   // else ff
426         printf("TransformWidgetPanel::OnSave  ...Error... creating file \n");
427     } //ff
428 }
429
430 void TransformWidgetPanel::OnSave(wxCommandEvent& event)
431 {
432     wxFileDialog* FD = new wxFileDialog( 0,
433                                         _T("Save free plane configuratin"),
434                                         _T(""),
435                                         _T(""),
436                                         _T("(*.fpConf)|*.fpConf"),
437                                         wxFD_SAVE | wxFD_OVERWRITE_PROMPT,
438                                         wxDefaultPosition);
439
440     int result_FD = FD->ShowModal();
441     // This line is need it by windows //EED
442     FD->SetReturnCode( result_FD );
443     if (FD->GetReturnCode()==wxID_OK)
444     {
445         std::string filename= (const char*) ( FD->GetPath().mb_str() );
446         Save( filename );
447     }     // dialog box
448 }
449
450 void TransformWidgetPanel::Load(std::string filename)
451 {
452     FILE *ff;
453     ff = fopen( filename.c_str() , "r" );
454     if (ff!=NULL)
455     {
456         char tmpStr[128];
457         float t0,t1,t2,t3;
458         fscanf(ff,"%s\n",tmpStr);  // ActualPoint:
459         fscanf(ff,"%f  %f  %f\n",&t0,&t1,&t2);
460         mActualPoint[0]=t0;
461         mActualPoint[1]=t1;
462         mActualPoint[2]=t2;
463
464         vtkMatrix4x4 *m = t->GetMatrix();
465         fscanf(ff,"%s\n",tmpStr); // Transform:
466         fscanf(ff,"%f %f  %f %f\n",&t0,&t1,&t2,&t3);
467         m->SetElement(0,0,t0);
468         m->SetElement(1,0,t1);
469         m->SetElement(2,0,t2);
470         m->SetElement(3,0,t3);
471         fscanf(ff,"%f %f  %f %f\n",&t0,&t1,&t2,&t3);
472         m->SetElement(0,1,t0);
473         m->SetElement(1,1,t1);
474         m->SetElement(2,1,t2);
475         m->SetElement(3,1,t3);
476         fscanf(ff,"%f %f  %f %f\n",&t0,&t1,&t2,&t3);
477         m->SetElement(0,2,t0);
478         m->SetElement(1,2,t1);
479         m->SetElement(2,2,t2);
480         m->SetElement(3,2,t3);
481         fscanf(ff,"%f %f  %f %f\n",&t0,&t1,&t2,&t3);
482         m->SetElement(0,3,t0);
483         m->SetElement(1,3,t1);
484         m->SetElement(2,3,t2);
485         m->SetElement(3,3,t3);
486         t->Update();
487
488         mBox->bbSetOutputActualPoint( mActualPoint );
489         mBox->bbSignalOutputModification(std::string("ActualPoint"));
490         mBox->bbSetOutputOut( t );
491         mBox->bbSignalOutputModification(std::string("Out"));
492
493         fclose(ff);
494     } else {   // else ff
495         printf("TransformWidgetPanel::OnLoad  ...Error... reading file \n");
496     } //ff
497 }
498
499 void TransformWidgetPanel::OnLoad(wxCommandEvent& event)
500 {
501     wxFileDialog* FD = new wxFileDialog( 0,
502                                          _T("Load configuration.."),
503                                          _T(""),
504                                          _T(""),
505                                          _T("(*.fpConf)|*.fpConf"),
506                                          wxFD_OPEN | wxFD_FILE_MUST_EXIST,
507                                          wxDefaultPosition);
508
509     int result_FD = FD->ShowModal();
510     // This line is need it by windows //EED
511     FD->SetReturnCode( result_FD );
512     if (FD->GetReturnCode()==wxID_OK)
513     {
514         std::string filename= (const char*) ( FD->GetPath().mb_str() );
515         Load( filename );
516     }     // dialog box
517 }
518
519
520 void TransformWidgetPanel::OnMemoryGoBack(wxCommandEvent& event)
521 {
522     mActualPoint = mMemoryPoint;
523     t->GetMatrix()->Identity();
524     vtkMatrix4x4 *m = vtkMatrix4x4::New();
525     m->DeepCopy( mMemoryMatrix );
526     t->SetMatrix( m );
527     mBox->bbSetOutputActualPoint( mActualPoint );
528     mBox->bbSignalOutputModification(std::string("ActualPoint"));
529     mBox->bbSetOutputOut( t );
530     mBox->bbSignalOutputModification(std::string("Out"));
531 }
532
533
534
535 void TransformWidgetPanel::OnSliderGeneralRelease(wxScrollEvent& event)
536 {
537     if ((mTool>=0) && (mTool<=2))
538     {
539         ReleaseAngle( mSliderGeneral );
540     } // if mTool == 0 1 2
541     if (mTool==3)
542     {
543         ReleaseCenter( mSliderGeneral );
544     } // if mTool == 3
545 }
546
547 void TransformWidgetPanel::OnSliderGeneralTrack(wxScrollEvent& event)
548 {
549     if ((mTool>=0) && (mTool<=2))
550     {
551         TrackAngle( mSliderGeneral->GetValue() , mTool );
552     }  // if mTool == 0 1 2
553     if (mTool==3)
554     {
555         TrackCenter( mSliderGeneral->GetValue() );
556     } // if mTool == 3
557 }
558
559
560 //------------------------------------------------------------------------
561 //------------------------------------------------------------------------
562 //------------------------------------------------------------------------
563
564 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,TransformWidget2)
565 BBTK_BLACK_BOX_IMPLEMENTATION(TransformWidget2,bbtk::WxBlackBox);
566 //===== 
567 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
568 //===== 
569
570 //------------------------------------------------------
571 void TransformWidget2::Save(std::string filename)
572 {
573     TransformWidgetPanel *w = (TransformWidgetPanel*) bbGetOutputWidget( );
574     w->Save(filename);
575 }
576
577 //------------------------------------------------------
578 void TransformWidget2::Load(std::string filename)
579 {
580     TransformWidgetPanel *w = (TransformWidgetPanel*) bbGetOutputWidget( );
581     w->Load(filename);
582 }
583
584 //------------------------------------------------------
585 void TransformWidget2::Process()
586 {
587     TransformWidgetPanel *w = (TransformWidgetPanel*) bbGetOutputWidget( );
588     w->SetPossiblePoint( bbGetInputPossiblePoint() );
589     if (firsttime==true)
590     {
591         firsttime=false;
592         w->_OnSetPoint();
593         bbSetOutputBox_TransformWidget2(this);
594     }// if
595 }
596
597 //===== 
598 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
599 //===== 
600 void TransformWidget2::CreateWidget(wxWindow* parent)
601 {
602    TransformWidgetPanel *w =  new TransformWidgetPanel(this,parent);
603    bbSetOutputWidget( w );
604 }
605
606 //===== 
607 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
608 //===== 
609 void TransformWidget2::bbUserSetDefaultValues()
610 {
611     firsttime=true;
612     bbSetInputType(1);
613     bbSetOutputBox_TransformWidget2(NULL);
614 }
615
616 //===== 
617 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
618 //===== 
619 void TransformWidget2::bbUserInitializeProcessing()
620 {
621 }
622
623 //===== 
624 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
625 //===== 
626 void TransformWidget2::bbUserFinalizeProcessing()
627 {
628 }
629
630 }// EO namespace bbcreaMaracasVisu
631
632