]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/WidgetShowNPoints.cxx
1ae46a5f5126fa414c434fd2df7674e10dd22c88
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / WidgetShowNPoints.cxx
1
2 #include "vtkSphereSource.h"
3 #include "vtkRenderer.h"
4 #include "vtkTextActor3D.h"
5
6 #include <wx/button.h>
7 #include <wx/sizer.h>
8 #include <wx/filedlg.h>
9 #include <wx/msgdlg.h>
10 #include <wx/notebook.h>
11
12 #include "WidgetShowNPoints.h"
13
14 //----------------------------------------------------------------------
15 //----------------------------------------------------------------------
16 //----------------------------------------------------------------------
17 //----------------------------------------------------------------------
18 //----------------------------------------------------------------------
19   WidgetShowNPoints::WidgetShowNPoints(wxWindow *parent, int type)
20     : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
21   {
22         // EED 2022-05-19
23     //  mmodelShowNPoints                                   = new ModelShowNPoints();
24                         idUndoRedo          = 0;
25                         maxUndoRedo         = 0;        
26 #if defined(_WIN32)
27                                                 char * val = getenv( "TEMP" );
28                                                 if (val == NULL) 
29                                                 { 
30                                                         UndoRedoDir = std::string("");  
31                                                 } else { 
32                                                         UndoRedoDir = std::string(val)+"\\creatools"; 
33                                                         printf("WidgetShowNPoints::WidgetShowNPoints  UndoRedoDir = %s   %p \n", UndoRedoDir.c_str() , this );
34                                                         std::string cmd1 = "mkdir "+ UndoRedoDir;
35                                                         system( cmd1.c_str() );
36                                                         // Erasing files of more than 1 day old  ( -1 )
37                                                         std::string cmd2 = "ForFiles /p \"" + UndoRedoDir + "\" /s /d -1 /c \"cmd /c del @file \"";
38                                                         system( cmd2.c_str() );
39                                                 }
40 #elif defined(__GNUC__)
41
42
43     #if defined(MACOSX)
44                                                 UndoRedoDir         = "/tmp/creatools";
45     #else  // Linux
46                                                 UndoRedoDir         = "/tmp/creatools";
47     #endif
48         
49         printf("WidgetShowNPoints::WidgetShowNPoints  UndoRedoDir = %s   %p \n", UndoRedoDir.c_str() , this );
50     std::string cmd1 = "mkdir "+ UndoRedoDir;
51     system( cmd1.c_str() );
52         // Erasing files of more than 1 day old  ( +1 )
53         std::string cmd= "find "+UndoRedoDir+" -name \"UndoRedo_collection_*.undoredo\" -type f -mtime +1 -delete";
54         system( cmd.c_str() );
55
56 #else
57                                                 UndoRedoDir         = "./";
58 #endif
59    
60    
61                         mActualCollection   = 0;
62     ModelShowNPoints*   modelShowNPoints    = new ModelShowNPoints();
63     lstModelShowNPoints.push_back( modelShowNPoints );
64     lstViewShowNPoints.push_back( new  ViewShowNPoints( modelShowNPoints ) );
65       
66     mtype                                                       = type;
67     SetType(mtype);
68     wxPanel*    panelParent         = this;
69     wxSizer*    sizer                           = NULL;
70     wxSizer*    MNPsizer            = NULL;
71     wxNotebook* bookSetPoints       = NULL;
72     wxNotebook* bookGroupManager    = NULL;
73     wxPanel*    panel               = NULL;
74     wxPanel*    panel2              = NULL;
75                 txtNrCollections    = NULL;
76       bookSetPoints     = new wxNotebook(panelParent,
77                           -1,
78                           wxDefaultPosition,
79                           wxDefaultSize,
80                           wxNB_TOP );
81       panel  = new wxPanel(bookSetPoints);
82       txtNrCollections = NULL;
83
84       wxSize sizeButton;
85       sizeButton.Set( 45  ,  -1 );
86       wxSize sizeSlider;
87       sizeSlider.Set( 90  ,  -1 );
88
89     // Group Manager
90     if (mtype==4)
91     {
92           bookGroupManager   = new wxNotebook(panelParent, //bbGetWxParent(),
93                               -1,
94                               wxDefaultPosition,
95                               wxDefaultSize,
96                               wxNB_TOP );
97           panel2  = new wxPanel(bookGroupManager);
98           txtNrCollections                      = new wxStaticText(panel2,-1, _T("1   /  1 "));
99           wxButton *btnBackCollection           = new wxButton( panel2, -1, _T("<")     ,   wxDefaultPosition, sizeButton );
100           wxButton *btnNextCollection           = new wxButton( panel2, -1, _T(">")     ,   wxDefaultPosition, sizeButton );
101           wxButton *btnInsertCollectionBefore   = new wxButton( panel2, -1, _T("+<")    ,   wxDefaultPosition, sizeButton );
102           wxButton *btnInsertCollectionAfter    = new wxButton( panel2, -1, _T("+>")    ,   wxDefaultPosition, sizeButton );
103           wxButton *btnDeleteCollection         = new wxButton( panel2, -1, _T("-")     ,   wxDefaultPosition, sizeButton );
104           wxButton *btnResetCollection          = new wxButton( panel2, -1, _T("--")    ,   wxDefaultPosition, sizeButton );
105           wxButton *btnSaveCollection           = new wxButton( panel2, -1, _T("Save")  ,   wxDefaultPosition, sizeButton );
106           wxButton *btnLoadCollection           = new wxButton( panel2, -1, _T("Load")  ,   wxDefaultPosition, sizeButton );
107           wxFlexGridSizer *sizer1               = new wxFlexGridSizer(1);
108           wxFlexGridSizer *sizer2               = new wxFlexGridSizer(2);
109           wxFlexGridSizer *sizer3               = new wxFlexGridSizer(3);
110           wxFlexGridSizer *sizer4               = new wxFlexGridSizer(3);
111           wxFlexGridSizer *sizer5               = new wxFlexGridSizer(1);
112           wxFlexGridSizer *sizer6               = new wxFlexGridSizer(2);
113  //         wxStaticText* txOpacity               = new wxStaticText(panel2, -1, wxString(_T("Op:")));
114         
115           btnInsertCollectionBefore   -> SetToolTip( _T("+  Add group before") );
116           btnInsertCollectionAfter    -> SetToolTip( _T("+>  Add group after") );
117           btnDeleteCollection         -> SetToolTip( _T("-  Erase group") );
118           btnResetCollection          -> SetToolTip( _T("-- Reset : Erase all groups") );
119
120           sdrOpacity                            = new wxSlider(panel2, -1, 0, 0, 100, wxDefaultPosition, sizeSlider, wxSL_LABELS);
121 //          wxStaticText* txRadio                 = new wxStaticText(panel2, -1, wxString(_T("R:")));
122           sdrRadio                              = new wxSlider(panel2, -1, 0, 1, 50, wxDefaultPosition, sizeSlider, wxSL_LABELS);
123
124           sdrRadio                    -> SetToolTip( _T("Radio") );
125           sdrOpacity                  -> SetToolTip( _T("Opacity") );
126         
127           Connect(btnBackCollection->GetId()        , wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnBackCollection           );
128           Connect(btnNextCollection->GetId()        , wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnNextCollection           );
129           Connect(btnInsertCollectionBefore->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnInsertCollectionBefore   );
130           Connect(btnInsertCollectionAfter->GetId() , wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnInsertCollectionAfter    );
131           Connect(btnDeleteCollection->GetId()      , wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnDeleteCollection         );
132           Connect(sdrOpacity->GetId()               , wxEVT_COMMAND_SLIDER_UPDATED, (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints                );
133           Connect(sdrRadio->GetId()                 , wxEVT_COMMAND_SLIDER_UPDATED, (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints                );
134           Connect(btnSaveCollection->GetId()        , wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnSaveCollections          );
135           Connect(btnLoadCollection->GetId()        , wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnLoadCollections          );
136           Connect(btnResetCollection->GetId()       , wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnResetCollections         );
137         
138           sizer2->Add( btnBackCollection );
139           sizer2->Add( btnNextCollection );
140           sizer3->Add( btnInsertCollectionBefore );
141           sizer3->Add( btnInsertCollectionAfter );
142           sizer4->Add( btnLoadCollection );
143           sizer4->Add( btnSaveCollection );
144 //          sizer5->Add( txRadio ,wxGROW );
145           sizer5->Add( sdrRadio ,wxGROW );
146 //          sizer5->Add( txOpacity ,wxGROW );
147           sizer5->Add( sdrOpacity ,wxGROW );
148           sizer6->Add( btnDeleteCollection );
149           sizer6->Add( btnResetCollection );
150
151           sizer1->Add( txtNrCollections );
152           sizer1->Add( sizer2 );
153           sizer1->Add( sizer3 );
154           sizer1->Add( sizer6 );
155           sizer1->Add( sizer4 );
156           sizer1->Add( sizer5 ,wxGROW );
157
158           MNPsizer                        = sizer1;
159           panel2->SetSizer( MNPsizer );
160           panel2->SetAutoLayout(true);
161           panel2->Layout();
162           bookGroupManager->AddPage(panel2 , _T("Groups") );
163     } // if mtype 4
164
165         if ( (mtype==0) || (mtype==3) || (mtype==4) )
166         {
167                 // Widget interface
168 //              askPointLabel                                       = new wxStaticText(panel, -1, _T("Label:")); // JPR
169                 textCtrl                                                    = new wxTextCtrl(panel, -1, wxEmptyString   ,    wxDefaultPosition, sizeButton);
170                     cbAutoAddPoints         = new wxCheckBox(panel,-1, _T("Auto")       ,   wxDefaultPosition, sizeButton );
171                 wxButton    *btnAddPoint                    = new wxButton( panel, -1, _T("+")          ,   wxDefaultPosition, sizeButton );
172                 wxButton    *btnInsertPoint                 = new wxButton( panel, -1, _T("(+)")        ,   wxDefaultPosition, sizeButton );//CFT
173                 wxButton    *btnSetPositionPoint    = new wxButton( panel, -1, _T("Set")        ,   wxDefaultPosition, sizeButton );
174                      cbTrackPoint           = new wxCheckBox(panel,-1, _T("Tra.")       ,   wxDefaultPosition, sizeButton );
175         wxButton    *btnRenamePoint                 = new wxButton( panel, -1, _T("Ren.")       ,   wxDefaultPosition, sizeButton );
176         wxButton    *btnErasePoint          = new wxButton( panel, -1, _T("-")          ,   wxDefaultPosition, sizeButton );
177                 wxButton    *btnEraseLastPoint      = new wxButton( panel, -1, _T("- lst")      ,   wxDefaultPosition, sizeButton );
178                 wxButton    *btnDeleteAllPoints     = new wxButton( panel, -1, _T("--")         ,   wxDefaultPosition, sizeButton );
179         wxButton    *btnUndo                = new wxButton( panel, -1, _T("Undo")       ,   wxDefaultPosition, sizeButton );
180         wxButton    *btnRedo                = new wxButton( panel, -1, _T("Redo")       ,   wxDefaultPosition, sizeButton );
181                 wxButton    *btnSavePoints                  = NULL;
182                 wxButton    *btnLoadPoints                  = NULL;
183                 
184         cbAutoAddPoints     -> SetToolTip( _T("Auto Add point")          );
185         btnAddPoint         -> SetToolTip( _T("+  Add point")          );
186         btnInsertPoint      -> SetToolTip( _T("(-)  Insert point")       );
187         btnErasePoint       -> SetToolTip( _T("-  Erase point")        );
188         btnEraseLastPoint   -> SetToolTip( _T("- lst  Erase last point")   );
189         btnDeleteAllPoints  -> SetToolTip( _T("-- Erase all points")   );
190         
191                 if ( mtype==0 )
192                 {
193                         btnSavePoints                           = new wxButton( panel, -1, _T("Save points"));
194                         btnLoadPoints                           = new wxButton( panel, -1, _T("Load points"));
195             Connect(btnSavePoints->GetId()    , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnSavePoints);
196             Connect(btnLoadPoints->GetId()    , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnLoadPoints);
197                 } // if mtype
198                 txtNrPoints                                             = new wxStaticText(panel,-1, _T(" "));
199
200         wxStaticText* txOpacity;
201         wxStaticText* txRadio;
202         if ( (mtype==0) || (mtype==3) )
203         {
204             //NTU: Sliders for opacity and radio change
205             txOpacity         = new wxStaticText(panel, -1, wxString(_T("  Points Opacity  ")));
206             sdrOpacity        = new wxSlider(panel, -1, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
207             txRadio           = new wxStaticText(panel, -1, wxString(_T("  Points Radius  ")));
208             sdrRadio          = new wxSlider(panel, -1, 0, 1, 50, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
209             //NTU: Slider events
210             Connect(sdrOpacity->GetId()          , wxEVT_COMMAND_SLIDER_UPDATED    , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
211             Connect(sdrRadio->GetId()            , wxEVT_COMMAND_SLIDER_UPDATED    , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
212         } // if mtype 0 3
213         Connect(cbAutoAddPoints->GetId()    , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &WidgetShowNPoints::OnAutoAddPoints);
214                 Connect(btnAddPoint->GetId()            , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnAddPoint);
215                 Connect(btnInsertPoint->GetId()         , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnInsertPoint);//CFT
216                 Connect(btnSetPositionPoint->GetId(), wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnSetPoint);
217                 Connect(btnRenamePoint->GetId()         , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnRenamePoint);
218                 Connect(btnEraseLastPoint->GetId()      , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnEraseLastPoint);
219                 Connect(btnErasePoint->GetId()          , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnErasePoint);
220                 Connect(btnDeleteAllPoints->GetId()     , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnDeleteAllPoints);
221         Connect(cbTrackPoint->GetId()       , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &WidgetShowNPoints::OnTrackPoint);
222         Connect(btnUndo->GetId()            , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnUndo);
223         Connect(btnRedo->GetId()            , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnRedo);
224         wxFlexGridSizer *sizer0 = new wxFlexGridSizer(1);
225         wxFlexGridSizer *sizer1 = new wxFlexGridSizer(2);
226         wxFlexGridSizer *sizer2 = new wxFlexGridSizer(2);
227         wxFlexGridSizer *sizer3 = new wxFlexGridSizer(2);
228         wxFlexGridSizer *sizer4 = new wxFlexGridSizer(2);
229         wxFlexGridSizer *sizer5 = new wxFlexGridSizer(2);
230         sizer1->Add( textCtrl               );
231         sizer1->Add( btnRenamePoint         );
232         sizer2->Add( cbAutoAddPoints        );
233         sizer2->Add( new wxStaticText(panel, -1, _T(" "))            );
234         sizer2->Add( btnAddPoint            );
235         sizer2->Add( btnInsertPoint         );//CFT
236         sizer3->Add( btnSetPositionPoint    );
237         sizer3->Add( cbTrackPoint           );
238         sizer4->Add( btnErasePoint          );
239         sizer4->Add( btnEraseLastPoint      );
240         sizer4->Add( btnDeleteAllPoints     );
241         sizer5->Add( btnUndo                );
242         sizer5->Add( btnRedo                );
243 //              sizer0->Add(askPointLabel); // JPR
244         sizer0->Add(txtNrPoints);
245         sizer0->Add(sizer2);
246         sizer0->Add(sizer1);
247                 sizer0->Add(sizer3);
248         sizer0->Add(sizer4);
249         sizer0->Add(sizer5);
250         if ( (mtype==0) || (mtype==3) )
251         {
252             wxFlexGridSizer *sizer5 = new wxFlexGridSizer(1);
253             sizer5->Add(txRadio);
254             sizer5->Add(sdrRadio,1,wxGROW );
255             sizer5->Add(txOpacity);
256             sizer5->Add(sdrOpacity,1,wxGROW );
257             sizer0->Add(sizer5);
258         }  // if mtype 0 3
259         if ( mtype==0 )
260                 {
261             wxFlexGridSizer *sizer6 = new wxFlexGridSizer(2);
262                         sizer6->Add(btnSavePoints);
263                         sizer6->Add(btnLoadPoints);
264             sizer0->Add(sizer6);
265                 } // if mtype 0
266                 sizer = sizer0;
267         }
268
269           if (mtype==1)
270           {
271                   // Widget interface
272                   wxButton *btnSetPositionPoint         = new wxButton( panel, -1, _T("Set nearest point"));
273                   txtNrPoints                                           = new wxStaticText(panel,-1, _T(" "));
274
275                   //NTU: Sliders for opacity and radio change
276                   wxStaticText* txOpacity                       = new wxStaticText(panel, -1, wxString(_T("  Points Opacity  ")));
277                   sdrOpacity                                            = new wxSlider(panel, -1, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
278                   wxStaticText* txRadio                         = new wxStaticText(panel, -1, wxString(_T("  Points Radio  ")));
279                   sdrRadio                                                      = new wxSlider(panel, -1, 0, 1, 50, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
280                   Connect(btnSetPositionPoint->GetId()  , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnSetPoint);
281                   Connect(sdrOpacity->GetId()   , wxEVT_COMMAND_SLIDER_UPDATED  , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
282                   Connect(sdrRadio->GetId()     , wxEVT_COMMAND_SLIDER_UPDATED  , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
283
284           wxFlexGridSizer *sizer1            = new wxFlexGridSizer(1);
285                   sizer1->Add(btnSetPositionPoint);
286                   sizer1->Add(txtNrPoints);
287                   sizer1->Add(txRadio);
288                   sizer1->Add(sdrRadio,1,wxGROW );
289           sizer1->Add(txOpacity);
290           sizer1->Add(sdrOpacity,1,wxGROW );
291                   sizer = sizer1;
292           }
293     
294     if (mtype == 2) 
295         {
296                 askPointLabel                                           = new wxStaticText(panel, -1, _T("\nPOINT CONTROLS:")); // JPR
297         wxButton                *btnAddPoint            = new wxButton(panel, -1,        _T("      Add  Point      "));
298         wxButton                *btnDeleteAllPoints = new wxButton(panel, -1, _T("      Delete All      "));
299         wxStaticText    *spacer                         = new wxStaticText(panel, -1, _T("\n")); // JPR
300                                          textCtrl                       = new wxTextCtrl(panel, -1);
301         Connect(btnAddPoint->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnAddPoint);
302         Connect(btnDeleteAllPoints->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnDeleteAllPoints);    
303         wxFlexGridSizer *sizer1             = new wxFlexGridSizer(1);
304         sizer1->Add(askPointLabel);
305         sizer1->Add(btnAddPoint);
306         sizer1->Add(btnDeleteAllPoints);
307         sizer1->Add(spacer);
308         sizer1->Add(textCtrl);
309       //  sdrOpacity                          = new wxSlider();
310       //  sdrRadio                            = new wxSlider();
311         txtNrPoints                         = new wxStaticText(panel, -1, _T("\n\n\n"));
312         sizer                               = sizer1;
313         } // bbGetInputType 2
314
315     panel->SetSizer(sizer);
316     panel->SetAutoLayout(true);
317     panel->Layout();
318     bookSetPoints->AddPage(panel , _T("Points") );
319
320     if ((mtype >= 0) && (mtype <= 3) )
321     {
322         if (sizer!=NULL)
323         {
324             wxFlexGridSizer *sizerParent             = new wxFlexGridSizer(1);
325             sizerParent->Add( bookSetPoints );
326             panelParent->SetSizer( sizerParent );
327             panelParent->SetAutoLayout(true);
328             panelParent->Layout();
329         } // if sizer
330     } // if  mtype 0 1 2 3
331       
332     if (mtype == 4)
333     {
334         if ((sizer!=NULL) && (MNPsizer!=NULL))
335         {
336             wxFlexGridSizer *sizerG             = new wxFlexGridSizer(2);
337             sizerG->Add(bookGroupManager);
338             sizerG->Add(bookSetPoints);
339             panelParent->SetSizer(sizerG);
340             panelParent->SetAutoLayout(true);
341             panelParent->Layout();
342         } // if sizer
343     } // if mtype 4
344 }
345
346 //------------------------------------------------------------------------
347 WidgetShowNPoints::~WidgetShowNPoints()
348 {
349 }
350
351 //------------------------------------------------------------------------
352 ModelShowNPoints* WidgetShowNPoints::GetModelShowNPoints()
353 {
354     // EED 2022-05-19
355     // return mmodelShowNPoints;
356     return lstModelShowNPoints[ mActualCollection ];
357 }
358
359 // EED 2022-05-19
360 //------------------------------------------------------------------------
361 ViewShowNPoints* WidgetShowNPoints::GetViewShowNPoints()
362 {
363     return lstViewShowNPoints[ mActualCollection ];
364 }
365
366
367 //------------------------------------------------------------------------
368 void WidgetShowNPoints::SetRadio(double radio)
369 {
370     // EED 2022-05-19
371     // GetModelShowNPoints()->SetRadio(radio);
372     int i,size = lstModelShowNPoints.size();
373     for (i=0;i<size;i++)
374     {
375         lstModelShowNPoints[i]->SetRadio( radio );
376     } // for i
377         //NTU: For Slider
378         sdrRadio->SetValue(radio);
379 }
380
381 //------------------------------------------------------------------------
382 void WidgetShowNPoints::SetColour(std::vector<double> colour)
383 {
384     // EED 2022-05-19
385     //this->mcolour = colour;
386     int i,size = lstViewShowNPoints.size();
387     for (i=0 ; i<size ; i++)
388     {
389         lstViewShowNPoints[i]->mcolour = colour;
390     } // for i
391 }
392
393 //------------------------------------------------------------------------
394 void WidgetShowNPoints::SetImage(vtkImageData* image)
395 {
396     // EED 2022-05-19
397         //GetModelShowNPoints()->SetImage(image);
398     int i,size = lstModelShowNPoints.size();
399     for (i=0 ; i<size ; i++)
400     {
401         lstModelShowNPoints[i]->SetImage(image);
402     } // for i
403 }
404
405 //------------------------------------------------------------------------
406 void WidgetShowNPoints::SetOpacity(double opacity)
407 {
408     // EED 2022-05-19
409         //this->mopacity=opacity;
410     int i,size = lstViewShowNPoints.size();
411     for (i=0 ; i<size ; i++)
412     {
413         lstViewShowNPoints[i]->mopacity = opacity;
414     } // for i
415         //NTU: For Slider
416         sdrOpacity->SetValue( opacity*100.0 );
417 }
418
419
420 //------------------------------------------------------------------------
421 void  WidgetShowNPoints::SetRenderer(vtkRenderer *renderer)
422 {
423     // EED 2022-05-19
424         //this->renderer        = renderer;
425     int i,size = lstViewShowNPoints.size();
426     for (i=0 ; i<size ; i++)
427     {
428         lstViewShowNPoints[i]->renderer = renderer;
429     } // for i
430 }
431
432 /* EED 2022-05-19
433 //------------------------------------------------------------------------
434         
435 void WidgetShowNPoints::RefreshPoint(int id)
436 {
437         double spc[3];
438         int x,y,z;
439         GetModelShowNPoints()->GetIdPoint(id,&x,&y,&z);
440         GetModelShowNPoints()->GetImage()->GetSpacing(spc);
441         std::string label       = GetModelShowNPoints()->GetIdLabel(id);
442         double radio            = GetModelShowNPoints()->GetRadio();
443     lstActorsSphere[id]->SetPosition( spc[0]*x , spc[1]*y , spc[2]*z );
444     lstActorsSphere[id]->GetProperty()->SetColor( mcolour[0] , mcolour[1] , mcolour[2] );
445     lstActorsSphere[id]->GetProperty()->SetOpacity( mopacity );
446     lstSourceSphere[id]->SetRadius( radio );
447 //EED 2017-01-01 Migration VTK7
448 #if VTK_MAJOR_VERSION <= 5
449         // ..
450 #else
451     lstSourceSphere[id]->Update();
452 #endif
453     lstActorsText[id]->SetInput( label.c_str()  );
454     lstActorsText[id]->SetPosition(  radio+spc[0]*x , spc[1]*y , spc[2]*z );
455 }
456
457 //------------------------------------------------------------------------
458 void WidgetShowNPoints::RefreshPoints()
459 {
460         int id,size=lstActorsSphere.size();
461         for (id=0;id<size;id++)
462         {
463                 RefreshPoint(id);
464         } // for
465         renderer->GetRenderWindow()->Render();
466 }
467
468 //------------------------------------------------------------------------
469 void WidgetShowNPoints::AddVtkPoint()
470 {
471         // Sphere
472         vtkSphereSource *vtksphere = vtkSphereSource::New();
473         vtksphere->SetThetaResolution (20);
474         vtksphere->SetPhiResolution (20);
475         vtksphere->SetRadius( 1 );
476         //NTU: For updating points
477         lstSourceSphere.push_back(vtksphere);
478         vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New();
479
480 //EED 2017-01-01 Migration VTK7
481 #if VTK_MAJOR_VERSION <= 5
482         sphereMapper->SetInput( vtksphere->GetOutput() );
483 #else
484         vtksphere->Update();
485         sphereMapper->SetInputData( vtksphere->GetOutput() );
486 #endif
487
488         vtkActor *sphereActor   = vtkActor::New();
489         sphereActor->SetMapper(sphereMapper);
490         sphereActor->SetOrigin(0, 0, 0);
491
492         lstActorsSphere.push_back(sphereActor);
493         if(renderer==NULL){
494                 wxMessageDialog dialog(this, _T("Renderer Not Set"),_T("Renderer Not Set"),wxICON_ERROR);
495                 dialog.ShowModal();             
496                 return;
497         }
498         renderer->AddActor( sphereActor );
499         // Actor
500         vtkTextActor3D *textActor = vtkTextActor3D::New();
501 //      textActor->SetInput( strLabel.c_str()  );
502         renderer->AddActor( textActor );
503         lstActorsText.push_back(textActor);
504 }
505  */
506
507
508 //------------------------------------------------------------------------
509 void WidgetShowNPoints::AddPoint(double x, double y, double z, std::string label)
510 {
511         GetModelShowNPoints()->AddPoint(x,y,z, label );
512     // EED 2022-05-19
513     //AddVtkPoint();
514     //RefreshPoint(lstActorsSphere.size()-1);
515     GetViewShowNPoints()->AddPoint();
516 }
517
518 //------------------------------------------------------------------------
519 void WidgetShowNPoints::InsertPoint(double x, double y, double z, std::string label)//CFT
520 {
521     // EED 2022-05-19
522         //if ( GetModelShowNPoints()->InsertPoint(x,y,z,label) != -1 )
523         //{
524     //    AddVtkPoint();
525         //} else {
526         //      AddPoint(x,y,z,label);
527         //}
528         //RefreshPoints();
529     if ( GetModelShowNPoints()->InsertPoint(x,y,z,label) != -1 )
530     {
531         GetViewShowNPoints()->AddVtkPoint();
532     } else {
533         AddPoint(x,y,z,label);
534     }
535     GetViewShowNPoints()->RefreshPoints();
536 }
537
538 //------------------------------------------------------------------------
539 void WidgetShowNPoints::OnInsertPoint_()
540 {
541     // EED 2022-05-19
542     //if (this->renderer==NULL)
543     
544     StopAutoAddPoints();
545     StopTrackPoint();
546     if (GetViewShowNPoints()->renderer==NULL)
547     {
548         return;
549     }
550     std::vector<double> point = GetModelShowNPoints()->GetReferencePoint();
551     if (point.size()==3)
552     {
553         InsertPoint(point[0],point[1],point[2], (const char*) ( textCtrl->GetValue().mb_str() ) );
554         SetOutputBox();
555     } else {//mpoint.size
556         printf("creaMaracasVisu::ShowNPoints (not match point) \n");
557     }
558     UndoRedo_SaveCollection();
559 }
560
561 //------------------------------------------------------------------------
562 void WidgetShowNPoints::OnInsertPoint (wxCommandEvent& event)//CFT
563 {
564     OnInsertPoint_();
565 }
566
567 //------------------------------------------------------------------------
568 void WidgetShowNPoints::OnAddPoint__()
569 {       
570     // EED 2022-05-19
571         //if (this->renderer==NULL)
572     if (GetViewShowNPoints()->renderer==NULL)
573         {
574                 return;
575         }
576         std::vector<double> point = GetModelShowNPoints()->GetReferencePoint();
577         if (point.size()==3)
578         {
579                 AddPoint(point[0],point[1],point[2], (const char*) ( textCtrl->GetValue().mb_str() ) );
580         SetOutputBox();
581         // EED 2022-05-19
582         //renderer->GetRenderWindow()->Render();
583         GetViewShowNPoints()->Render();
584         } else {//mpoint.size
585                 printf("creaMaracasVisu::ShowNPoints (not match point) \n");
586         }
587     UndoRedo_SaveCollection();
588 }
589
590 void WidgetShowNPoints::OnAddPoint_()
591 {
592     StopAutoAddPoints();
593     StopTrackPoint();
594     OnAddPoint__();
595 }
596
597 //------------------------------------------------------------------------
598 void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event)
599 {
600     OnAddPoint_();
601 }
602
603 //------------------------------------------------------------------------
604 void WidgetShowNPoints::AutoAddPoints()
605 {
606     if ( cbAutoAddPoints->GetValue() == true )
607     {
608         OnAddPoint__();
609     } // if cbAutoAddPoints
610 }
611
612 //------------------------------------------------------------------------
613 void WidgetShowNPoints::OnAutoAddPoints_tool()
614 {
615     StopTrackPoint();
616     cbAutoAddPoints->SetValue( !cbAutoAddPoints->GetValue() );
617 }
618
619 //------------------------------------------------------------------------
620 void WidgetShowNPoints::OnAutoAddPoints_()
621 {
622     StopTrackPoint();
623     printf("EED WidgetShowNPoints::OnAutoAddPoints_ \n");
624 }
625
626 //------------------------------------------------------------------------
627 void WidgetShowNPoints::OnAutoAddPoints(wxCommandEvent& event)
628 {
629     StopTrackPoint();
630     printf("EED WidgetShowNPoints::OnAutoAddPoints \n");
631 }
632
633 //------------------------------------------------------------------------
634 void WidgetShowNPoints::StopAutoAddPoints( )
635 {
636     cbAutoAddPoints->SetValue(false);
637 }
638
639 //------------------------------------------------------------------------
640         void WidgetShowNPoints::SetOutputBox()
641         {
642 //EED           renderer->GetRenderWindow()->Render();
643                 wxString strTmp;
644                 strTmp.Printf(_T("Nbr pnts: %d"), GetModelShowNPoints()->GetLstPointsSize() );
645                 txtNrPoints->SetLabel( strTmp );
646                 //--BBTK
647
648 //EED 2017-06-03
649 //              mbbShowNPoints->bbSetOutputlstPointsX( GetModelShowNPoints()->GetLstPointsX() );
650 //              mbbShowNPoints->bbSetOutputlstPointsY( GetModelShowNPoints()->GetLstPointsY() );
651 //              mbbShowNPoints->bbSetOutputlstPointsZ( GetModelShowNPoints()->GetLstPointsZ() );
652 //              mbbShowNPoints->bbSetOutputlstLabels( GetModelShowNPoints()->GetLstLabels() );
653 //              mbbShowNPoints->bbSignalOutputModification();
654         }
655
656
657 //------------------------------------------------------------------------
658         void WidgetShowNPoints::OnSavePoints(wxCommandEvent& event)
659         {
660
661 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
662 #if wxMAJOR_VERSION <= 2
663                 wxFileDialog* FD = new wxFileDialog( 0,
664                                             _T("Save points .."),
665                                             _T(""),
666                                             _T(""),
667                                             _T("(*.xls)|*.xls"),
668                                             wxSAVE | wxOVERWRITE_PROMPT,
669                                             wxDefaultPosition);
670 #else
671                 wxFileDialog* FD = new wxFileDialog( 0,
672                                             _T("Save points .."),
673                                             _T(""),
674                                             _T(""),
675                                             _T("(*.xls)|*.xls"),
676                                             wxFD_SAVE | wxFD_OVERWRITE_PROMPT,
677                                             wxDefaultPosition);
678 #endif
679
680                 int result_FD = FD->ShowModal();
681                 // This line is need it by windows //EED
682                 FD->SetReturnCode( result_FD );
683                 if (FD->GetReturnCode()==wxID_OK)
684                 {
685                         std::string filename= (const char*) ( FD->GetPath().mb_str() ); 
686                         GetModelShowNPoints()->SavePoints( filename );
687                 }       // dialog box
688         }
689
690
691 //------------------------------------------------------------------------
692         void WidgetShowNPoints::OnLoadPoints(wxCommandEvent& event)
693         {
694
695 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
696 #if wxMAJOR_VERSION <= 2
697                 wxFileDialog* FD = new wxFileDialog( 0,
698                                              _T("Load points .."),
699                                              _T(""),
700                                              _T(""),
701                                              _T("(*.xls)|*.xls"),
702                                              wxOPEN | wxFILE_MUST_EXIST,
703                                              wxDefaultPosition);
704 #else
705                 wxFileDialog* FD = new wxFileDialog( 0,
706                                              _T("Load points .."),
707                                              _T(""),
708                                              _T(""),
709                                              _T("(*.xls)|*.xls"),
710                                              wxFD_OPEN | wxFD_FILE_MUST_EXIST,
711                                              wxDefaultPosition);
712 #endif
713                 int i;
714                 //EED
715                 int result_FD = FD->ShowModal();
716                 // This line is need it by windows //EED
717                 FD->SetReturnCode( result_FD );
718                 if (FD->GetReturnCode()==wxID_OK)
719                 {
720
721                         std::string filename= (const char*) ( FD->GetPath().mb_str() ); 
722                         int numberPointsRead = GetModelShowNPoints()->ReadPoints( filename );
723                         for (i=0;i<numberPointsRead;i++)
724                         {
725                 // EED 2022-05-19
726                 //AddVtkPoint();
727                 GetViewShowNPoints()->AddVtkPoint();
728                         }// for
729                         SetOutputBox();
730             // EED 2022-05-19
731                         //RefreshPoints();
732             GetViewShowNPoints()->RefreshPoints();
733                 }       // dialog box
734         }
735
736 //------------------------------------------------------------------------
737 void WidgetShowNPoints::OnSetPoint_()
738 {
739     StopAutoAddPoints();
740     StopTrackPoint();
741
742     int id=GetModelShowNPoints()->GetNearestPoint();
743     if((id==-1) && (mtype==1))
744     {
745         id=0;
746         AddPoint(0,0,0,"");
747         SetOutputBox();
748     }
749     if (id>=0)
750     {
751         GetModelShowNPoints()->SetPointId_mReferencePoint(id);
752         // EED 2022-05-19
753         //RefreshPoint(id);
754         //renderer->GetRenderWindow()->Render();
755         GetViewShowNPoints()->RefreshPoint(id);
756         GetViewShowNPoints()->Render();
757     } // if id
758     SetOutputBox();
759     UndoRedo_SaveCollection();
760 }
761
762 //------------------------------------------------------------------------
763 void WidgetShowNPoints::OnSetPoint(wxCommandEvent& event)
764 {
765     OnSetPoint_();
766 }
767
768 //------------------------------------------------------------------------
769 void WidgetShowNPoints::TrackingPoint( )
770 {
771     if ( cbTrackPoint->GetValue() == true )
772     {
773         int id = GetModelShowNPoints()->IdInsidePoint();
774         if (id>=0)
775         {
776             idTrack=id;
777         }
778         
779         if (idTrack>=0)
780         {
781             GetModelShowNPoints()->SetPointId_mReferencePoint(idTrack);
782             GetViewShowNPoints()->RefreshPoint(idTrack);
783             GetViewShowNPoints()->Render();
784             UndoRedo_SaveCollection();
785         } // if id
786     } // if trackPointFlag
787 }
788
789 //------------------------------------------------------------------------
790 void WidgetShowNPoints::OnTrackPoint_tool()
791 {
792     cbTrackPoint->SetValue( !cbTrackPoint->GetValue() );
793     OnTrackPoint_();
794 }
795
796 //------------------------------------------------------------------------
797 void WidgetShowNPoints::OnTrackPoint_()
798 {
799     StopAutoAddPoints();
800
801     idTrack         =   -1;
802     if ( cbTrackPoint->GetValue() == true )
803     {
804         idTrack = GetModelShowNPoints()->IdInsidePoint();
805     } // if trackPointFlag
806 }
807
808 //------------------------------------------------------------------------
809 void WidgetShowNPoints::OnTrackPoint(wxCommandEvent& event)
810 {
811     printf("WidgetShowNPoints::OnTrackPoint  \n");
812     OnTrackPoint_();
813 }
814
815 //------------------------------------------------------------------------
816 void WidgetShowNPoints::StopTrackPoint( )
817 {
818     cbTrackPoint->SetValue(false);
819     idTrack=-1;
820 }
821
822 //------------------------------------------------------------------------
823         void WidgetShowNPoints::OnRenamePoint(wxCommandEvent& event)
824         {
825                 int id = GetModelShowNPoints()->RenamePoint( (const char*) ( textCtrl->GetValue().mb_str() ) );
826                 if (id>=0)
827                 {
828             // EED 2022-05-19
829                         //lstActorsText[id]->SetInput(  (const char*) ( textCtrl->GetValue().mb_str() ) );
830                         //renderer->GetRenderWindow()->Render();
831             GetViewShowNPoints()->lstActorsText[id]->SetInput(  (const char*) ( textCtrl->GetValue().mb_str() ) );
832             GetViewShowNPoints()->Render();
833             SetOutputBox();
834             UndoRedo_SaveCollection();
835                 } // if id
836         }
837
838 //------------------------------------------------------------------------
839         void WidgetShowNPoints::ErasePoint(int id)
840         {
841         // EED 2022-05-19
842                 //if (this->renderer!=NULL)
843         if (GetViewShowNPoints()->renderer!=NULL)
844                 {
845                         if (id>=0)
846                         {
847                 // EED 2022-05-19
848                                 //renderer->RemoveActor( lstActorsSphere[id] );
849                                 //renderer->RemoveActor( lstActorsText[id] );
850                                 //lstActorsSphere[id]->Delete();
851                                 //lstActorsText[id]->Delete();
852                                 //lstSourceSphere[id]->Delete();
853                                 //lstActorsSphere.erase( lstActorsSphere.begin()+id );
854                                 //lstActorsText.erase( lstActorsText.begin()+id );
855                                 //lstSourceSphere.erase( lstSourceSphere.begin()+id );
856                 GetViewShowNPoints()->ErasePoint(id);
857                                 GetModelShowNPoints()->ErasePoint(id);
858                         } // if id
859                 } // if renderer
860         }
861
862 //------------------------------------------------------------------------
863     void WidgetShowNPoints::OnErasePoint_()
864     {
865         StopAutoAddPoints();
866         StopTrackPoint();
867
868         ErasePoint( GetModelShowNPoints()->IdInsidePoint() );
869         SetOutputBox();
870         // EED 2022-05-19
871         //renderer->GetRenderWindow()->Render();
872         GetViewShowNPoints()->Render();
873         StopTrackPoint();
874         UndoRedo_SaveCollection();
875     }
876
877 //------------------------------------------------------------------------
878         void WidgetShowNPoints::OnErasePoint(wxCommandEvent& event)
879         {
880                 OnErasePoint_();
881         }
882
883 //------------------------------------------------------------------------
884         void WidgetShowNPoints::OnEraseLastPoint(wxCommandEvent& event)
885         {
886         // EED 2022-05-19
887         //ErasePoint( lstActorsSphere.size()-1 );
888         //renderer->GetRenderWindow()->Render();
889         StopAutoAddPoints();
890         StopTrackPoint();
891
892         int id = GetViewShowNPoints()->lstActorsSphere.size()-1;
893         ErasePoint( id );
894         UndoRedo_SaveCollection();
895         GetViewShowNPoints()->Render();
896         SetOutputBox();
897         StopTrackPoint();
898         }
899
900 //------------------------------------------------------------------------
901 void WidgetShowNPoints::DeleteAllPoints_()
902 {
903     // EED 2022-05-19
904     //int id,size=lstActorsSphere.size();
905     int id,size=GetViewShowNPoints()->lstActorsSphere.size();
906     for (id=size-1;id>=0;id--)
907     {
908         ErasePoint(id);
909     }// for id
910 }
911
912 void WidgetShowNPoints::OnDeleteAllPoints_()
913 {
914     StopAutoAddPoints();
915     StopTrackPoint();
916
917     DeleteAllPoints_();
918     UndoRedo_SaveCollection();
919 }
920
921 //------------------------------------------------------------------------
922 void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event)
923 {
924         OnDeleteAllPoints_();
925     SetOutputBox();
926     GetViewShowNPoints()->Render();
927 }
928
929 //NTU: Method for updating points opacity and Radio
930
931 //------------------------------------------------------------------------
932 void WidgetShowNPoints::UpdatePoints_()
933 {
934     // EED 2022-05-19
935     //this->mopacity = sdrOpacity->GetValue()/100.0;
936     //GetModelShowNPoints()->SetRadio( sdrRadio->GetValue() ) ;
937     //RefreshPoints();
938
939     double opacity  = sdrOpacity->GetValue()/100.0;
940     double radio    = sdrRadio->GetValue();
941     int i,size      = lstViewShowNPoints.size();
942     for (i=0 ; i<size ; i++)
943     {
944         lstViewShowNPoints[i]->mopacity = opacity;
945         lstModelShowNPoints[i]->SetRadio( radio ) ;
946     } // for i
947 //    GetViewShowNPoints()->RefreshPoints();
948 }
949
950 //------------------------------------------------------------------------
951 void WidgetShowNPoints::UpdatePoints(wxCommandEvent &event)
952 {
953     RefreshColourCollection();
954 }
955
956 //------------------------------------------------------------------------
957 void  WidgetShowNPoints::SetReferencePoint(std::vector<double> point)
958 {
959         GetModelShowNPoints()->SetReferencePoint(point);
960     int i,size=lstModelShowNPoints.size();
961     for (i=0;i<size;i++)
962     {
963         lstModelShowNPoints[i]->SetReferencePoint(point);    // All collection
964     } // for i
965 }
966
967 //------------------------------------------------------------------------
968 void  WidgetShowNPoints::SetInitLstPoints( std::vector<double> initLstPointsX,  std::vector<double> initLstPointsY, std::vector<double> initLstPointsZ, std::vector<std::string> initLstLabels )
969 {
970     // EED 2022-05-19
971         //if (this->renderer==NULL)
972     if (GetViewShowNPoints()->renderer==NULL)
973         {
974                 return;
975         }
976         int i,sizeX,sizeY,sizeZ,sizeLabels;
977         sizeX = (int)initLstPointsX.size();
978         sizeY = (int)initLstPointsY.size();
979         sizeZ = (int)initLstPointsZ.size();
980         sizeLabels = (int)initLstLabels.size();
981         double x,y,z;
982         std::string label;
983         if ( (sizeX==sizeY) && (sizeX==sizeZ) )
984         {
985                 for (i=0;i<sizeX;i++)
986                 {
987                         x               = initLstPointsX[i];
988                         y               = initLstPointsY[i];
989                         z               = initLstPointsZ[i];
990                         if (i<sizeLabels) 
991                         {
992                                 label   = initLstLabels[i];
993                         } else {
994                                 label="";
995                         }
996                         AddPoint( x,y,z,label );
997                 } // for i
998                 //      SetOutputBox(); 
999                 //      renderer->GetRenderWindow()->Render();
1000         } // if size
1001 }
1002
1003 //------------------------------------------------------------------------
1004 void WidgetShowNPoints::SetType(int type)
1005 {
1006         mtype=type;
1007 }
1008
1009 //------------------------------------------------------------------------
1010 int WidgetShowNPoints::GetType()
1011 {
1012         return mtype;
1013 }
1014
1015
1016 //------------------------------------------------------------------------
1017 double WidgetShowNPoints::GetRadio()
1018 {
1019         return sdrRadio->GetValue();
1020 }
1021 //------------------------------------------------------------------------
1022 double WidgetShowNPoints::GetOpacity()
1023 {
1024         return sdrOpacity->GetValue()/100;
1025 }
1026
1027 //------------------------------------------------------------------------
1028 void WidgetShowNPoints::InsertCollection()
1029 {
1030     ModelShowNPoints*   model   = new ModelShowNPoints();
1031     ViewShowNPoints*    view    = new ViewShowNPoints( model );
1032     model->SetImage( lstModelShowNPoints[0]->GetImage() );
1033     view->mopacity = lstViewShowNPoints[0]->mopacity;
1034     view->renderer = lstViewShowNPoints[0]->renderer;
1035     lstModelShowNPoints.insert( lstModelShowNPoints.begin()+mActualCollection , model );
1036     lstViewShowNPoints.insert( lstViewShowNPoints.begin()+mActualCollection , view );
1037 }
1038
1039 //------------------------------------------------------------------------
1040 void WidgetShowNPoints::InsertCollectionBefore_()
1041 {
1042     InsertCollection();
1043     RefreshCollectionText();
1044     RefreshColourCollection();
1045     StopTrackPoint();
1046 }
1047
1048 //------------------------------------------------------------------------
1049 void WidgetShowNPoints::OnInsertCollectionBefore_()
1050 {
1051     InsertCollectionBefore_();
1052     UndoRedo_SaveCollection();
1053 }
1054
1055
1056 //------------------------------------------------------------------------
1057 void WidgetShowNPoints::OnInsertCollectionBefore(wxCommandEvent &event)
1058 {
1059     OnInsertCollectionBefore_();
1060 }
1061
1062
1063 //------------------------------------------------------------------------
1064 void WidgetShowNPoints::InsertCollectionAfter_()
1065 {
1066     mActualCollection++;
1067     InsertCollection();
1068     RefreshCollectionText();
1069     RefreshColourCollection();
1070     StopTrackPoint();
1071 }
1072
1073 //------------------------------------------------------------------------
1074 void WidgetShowNPoints::OnInsertCollectionAfter_()
1075 {
1076     InsertCollectionAfter_();
1077     UndoRedo_SaveCollection();
1078 }
1079
1080 //------------------------------------------------------------------------
1081 void WidgetShowNPoints::OnInsertCollectionAfter(wxCommandEvent &event)
1082 {
1083     OnInsertCollectionAfter_();
1084 }
1085
1086 //------------------------------------------------------------------------
1087 void WidgetShowNPoints::DeleteCollection_()
1088 {
1089     if ( lstModelShowNPoints.size()>1 )
1090     {
1091         DeleteAllPoints_();  // Actual Collection
1092         lstModelShowNPoints.erase( lstModelShowNPoints.begin()+mActualCollection );
1093         lstViewShowNPoints.erase( lstViewShowNPoints.begin()+mActualCollection );
1094         if ( mActualCollection>=lstModelShowNPoints.size() )
1095         {
1096             mActualCollection--;
1097         } // if
1098     } else {
1099         DeleteAllPoints_();  // Actual Collection
1100     } // if
1101 }
1102
1103 //------------------------------------------------------------------------
1104 void WidgetShowNPoints::OnDeleteCollection_()
1105 {
1106     DeleteCollection_();
1107     SetOutputBox();
1108     GetViewShowNPoints()->Render();
1109     RefreshCollectionText();
1110     RefreshColourCollection();
1111     StopTrackPoint();
1112     UndoRedo_SaveCollection();
1113 }
1114
1115 //------------------------------------------------------------------------
1116 void WidgetShowNPoints::OnDeleteCollection(wxCommandEvent &event)
1117 {
1118     OnDeleteCollection_();
1119 }
1120
1121 //------------------------------------------------------------------------
1122 void WidgetShowNPoints::ResetCollections_()
1123 {
1124     int i,size=lstModelShowNPoints.size();
1125     for (i=0;i<size;i++)
1126     {
1127         DeleteCollection_();
1128     }
1129     GetViewShowNPoints()->Render();
1130     RefreshCollectionText();
1131     RefreshColourCollection();
1132     StopTrackPoint();
1133 }
1134
1135
1136 //------------------------------------------------------------------------
1137 void WidgetShowNPoints::OnResetCollections_()
1138 {
1139     ResetCollections_();
1140     UndoRedo_SaveCollection();
1141 }
1142
1143
1144 //------------------------------------------------------------------------
1145 void WidgetShowNPoints::OnResetCollections(wxCommandEvent &event)
1146 {
1147     OnResetCollections_();
1148 }
1149
1150 //------------------------------------------------------------------------
1151 void WidgetShowNPoints::OnBackCollection(wxCommandEvent &event)
1152 {
1153     mActualCollection--;
1154     if ( mActualCollection <0  )
1155     {
1156         mActualCollection=0;
1157     } //if <=0
1158     RefreshCollectionText();
1159     RefreshColourCollection();
1160     StopTrackPoint();
1161     UndoRedo_SaveCollection();
1162 }
1163
1164 //------------------------------------------------------------------------
1165 void WidgetShowNPoints::OnNextCollection(wxCommandEvent &event)
1166 {
1167     mActualCollection++;
1168     if ( mActualCollection >=lstModelShowNPoints.size() )
1169     {
1170         mActualCollection = lstModelShowNPoints.size()-1;
1171     } //if <=0
1172     RefreshCollectionText();
1173     RefreshColourCollection();
1174     StopTrackPoint();
1175     UndoRedo_SaveCollection();
1176 }
1177
1178 //------------------------------------------------------------------------
1179 void WidgetShowNPoints::DetectCollectionActive()
1180 {
1181     int id;
1182     int i,size=lstModelShowNPoints.size();
1183     for (i=0;i<size;i++)
1184     {
1185         id = lstModelShowNPoints[i]->IdInsidePoint();
1186         if (id>=0)
1187         {
1188             mActualCollection=i;
1189         } // if id>=0
1190     } // for i
1191     RefreshCollectionText();
1192     RefreshColourCollection();
1193 }
1194
1195 //------------------------------------------------------------------------
1196 void WidgetShowNPoints::RefreshColourCollection()
1197 {
1198     UpdatePoints_();
1199     std::vector<double> colourAll;
1200     colourAll.push_back(1);
1201     colourAll.push_back(0);
1202     colourAll.push_back(0);
1203     std::vector<double> colourActual;
1204     colourActual.push_back(1);
1205     colourActual.push_back(1);
1206     colourActual.push_back(0);
1207     SetColour( colourAll );                                             // For all collections
1208     int i,size=lstViewShowNPoints.size();
1209     for (i=0;i<size;i++)
1210     {
1211         lstViewShowNPoints[i] -> mcolour = colourAll;    // All collection
1212         lstViewShowNPoints[i]->RefreshEachPoint();
1213     } // for i
1214     lstViewShowNPoints[mActualCollection] -> mcolour = colourActual;    // Actual collection
1215     lstViewShowNPoints[mActualCollection] -> RefreshEachPoint();
1216     lstViewShowNPoints[mActualCollection] -> renderer->GetRenderWindow()->Render();
1217 }
1218
1219 //------------------------------------------------------------------------
1220 void WidgetShowNPoints::RefreshCollectionText()
1221 {
1222     if ((mtype==4) && (txtNrCollections!=NULL))  // Just for Collection interface
1223     {
1224         wxString strTmp;
1225         strTmp.Printf(_T("%d   /  %d "),  (int)mActualCollection+1, (int)lstModelShowNPoints.size() );
1226         txtNrCollections->SetLabel( strTmp );
1227     } // if mtype 4
1228     SetOutputBox();
1229 }
1230
1231
1232 //------------------------------------------------------------------------
1233 void WidgetShowNPoints::OnSaveCollections_( std::string filename )
1234 {
1235     FILE *ff;
1236     ff = fopen( filename.c_str() , "w+" );
1237     if (ff!=NULL)
1238     {
1239         int i,size = lstModelShowNPoints.size();
1240         fprintf(ff,"NumberOfGroups %d \n",size);
1241         for (i=0 ; i<size ; i++)
1242         {
1243             lstModelShowNPoints[i]->SavePoints_(ff);
1244         } // for i
1245         fclose(ff);
1246     } else {   // else ff
1247         printf("WidgetShowNPoints::Save Groups Points  ...Error... creating file \n");
1248     } //ff
1249
1250 }
1251
1252
1253 //------------------------------------------------------------------------
1254 void WidgetShowNPoints::OnSaveCollections(wxCommandEvent &event)
1255 {
1256     //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
1257     #if wxMAJOR_VERSION <= 2
1258             wxFileDialog* FD = new wxFileDialog( 0,
1259                                                 _T("Save groups of points .."),
1260                                                 _T(""),
1261                                                 _T(""),
1262                                                 _T("(*.xls)|*.xls"),
1263                                                 wxSAVE | wxOVERWRITE_PROMPT,
1264                                                 wxDefaultPosition);
1265     #else
1266             wxFileDialog* FD = new wxFileDialog( 0,
1267                                                 _T("Save groups of points .."),
1268                                                 _T(""),
1269                                                 _T(""),
1270                                                 _T("(*.xls)|*.xls"),
1271                                                 wxFD_SAVE | wxFD_OVERWRITE_PROMPT,
1272                                                 wxDefaultPosition);
1273     #endif
1274
1275             int result_FD = FD->ShowModal();
1276             // This line is need it by windows //EED
1277             FD->SetReturnCode( result_FD );
1278             if (FD->GetReturnCode()==wxID_OK)
1279             {
1280                 std::string filename= (const char*) ( FD->GetPath().mb_str() );
1281                 OnSaveCollections_( filename );
1282             }     // dialog box
1283     StopTrackPoint();
1284 }
1285
1286 //------------------------------------------------------------------------
1287 void WidgetShowNPoints::OnLoadCollections_( std::string filename )
1288 {
1289     bool okEraseFirstGroup=false;
1290     if (lstModelShowNPoints.size()==1)
1291     {
1292         if (GetModelShowNPoints()->GetLstPointsSize()==0) { okEraseFirstGroup=true; }
1293     }
1294     FILE *ff = fopen( filename.c_str() , "r+" );
1295     if (ff!=NULL)
1296     {
1297         int i;
1298         int iGroup,sizeGroups;
1299         int iPoint,numberPointsRead;
1300         char chartmp[256];
1301         fscanf(ff," %s %d",chartmp,&sizeGroups);
1302         for (iGroup=0;iGroup<sizeGroups;iGroup++)
1303         {
1304             mActualCollection = lstModelShowNPoints.size();
1305             InsertCollection();
1306             int numberPointsRead= lstModelShowNPoints[mActualCollection]->ReadPoints_(ff);
1307             for (i=0;i<numberPointsRead;i++)
1308             {
1309                 // EED 2022-05-19
1310                 //AddVtkPoint();
1311                 GetViewShowNPoints()->AddVtkPoint();
1312             }// for
1313         } // for i
1314
1315         fclose(ff);
1316     } else {   // else ff
1317         printf("WidgetShowNPoints::Load Group of Points  ...Error... reading file");
1318     } //ff
1319     if (okEraseFirstGroup==true)
1320     {
1321         mActualCollection=0;
1322         DeleteCollection_();
1323         mActualCollection = lstModelShowNPoints.size()-1;
1324     }
1325     GetViewShowNPoints()->Render();
1326     RefreshCollectionText();
1327     RefreshColourCollection();
1328     StopTrackPoint();
1329 }
1330
1331 //------------------------------------------------------------------------
1332 void WidgetShowNPoints::OnLoadCollections(wxCommandEvent &event)
1333 {
1334     //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
1335     #if wxMAJOR_VERSION <= 2
1336             wxFileDialog* FD = new wxFileDialog( 0,
1337                                                  _T("Load groups of points .."),
1338                                                  _T(""),
1339                                                  _T(""),
1340                                                  _T("(*.xls)|*.xls"),
1341                                                  wxOPEN | wxFILE_MUST_EXIST,
1342                                                  wxDefaultPosition);
1343     #else
1344             wxFileDialog* FD = new wxFileDialog( 0,
1345                                                  _T("Load groups of points .."),
1346                                                  _T(""),
1347                                                  _T(""),
1348                                                  _T("(*.xls)|*.xls"),
1349                                                  wxFD_OPEN | wxFD_FILE_MUST_EXIST,
1350                                                  wxDefaultPosition);
1351     #endif
1352             int result_FD = FD->ShowModal();
1353             // This line is need it by windows //EED
1354             FD->SetReturnCode( result_FD );
1355             if (FD->GetReturnCode()==wxID_OK)
1356             {
1357                 std::string filename= (const char*) ( FD->GetPath().mb_str() );
1358                 OnLoadCollections_( filename );
1359                 UndoRedo_SaveCollection();
1360             }     // dialog box
1361 }
1362
1363 //------------------------------------------------------------------------
1364 void WidgetShowNPoints::GetCollectionPoint(int idCol,int idPoint, double *pPoint)
1365 {
1366     double x,y,z;
1367     lstModelShowNPoints[idCol]->GetIdPoint(idPoint,&x,&y,&z);
1368     pPoint[0] = x;
1369     pPoint[1] = y;
1370     pPoint[2] = z;
1371 }
1372 //------------------------------------------------------------------------
1373 void WidgetShowNPoints::SetCollectionPoint(int idCol, int idPoint, std::vector<double> modPoint)
1374 {
1375         if(idCol >= 0 && idCol < lstModelShowNPoints.size())
1376         {
1377                 lstModelShowNPoints[idCol]->SetPointById(idPoint, modPoint);
1378                 lstViewShowNPoints[idCol]->RefreshPoint(idPoint);
1379         }
1380         else{
1381                 printf("WidgetShowNPoints::SetCollectionPoint  ...Error... Invalid collection, out of range");
1382         }
1383 }
1384 //------------------------------------------------------------------------
1385 std::vector<double> WidgetShowNPoints::GetLstPointsX()
1386 {
1387     if (mtype!=4)
1388     {
1389         return GetModelShowNPoints()->GetLstPointsX();
1390     } else {
1391         std::vector<double> lst;
1392         int iP,s;
1393         int iG,sG=lstModelShowNPoints.size();
1394         for (iG=0 ; iG<sG ; iG++)
1395         {
1396             std::vector<double> lstTmp = lstModelShowNPoints[iG]->GetLstPointsX();
1397             s = lstTmp.size();
1398             for (iP=0 ; iP<s ; iP++)
1399             {
1400                 lst.push_back( lstTmp[iP] );
1401             } // for iP
1402         } // for iG
1403         return lst;
1404     } // if 4
1405 }
1406
1407 //------------------------------------------------------------------------
1408 std::vector<double> WidgetShowNPoints::GetLstPointsY()
1409 {
1410     if (mtype!=4)
1411     {
1412         return GetModelShowNPoints()->GetLstPointsY();
1413     } else {
1414         std::vector<double> lst;
1415         int iP,s;
1416         int iG,sG=lstModelShowNPoints.size();
1417         for (iG=0 ; iG<sG ; iG++)
1418         {
1419             std::vector<double> lstTmp = lstModelShowNPoints[iG]->GetLstPointsY();
1420             s = lstTmp.size();
1421             for (iP=0 ; iP<s ; iP++)
1422             {
1423                 lst.push_back( lstTmp[iP] );
1424             } // for iP
1425         } // for iG
1426         return lst;
1427     }
1428 }
1429
1430 //------------------------------------------------------------------------
1431 std::vector<double> WidgetShowNPoints::GetLstPointsZ()
1432 {
1433     if (mtype!=4)
1434     {
1435         return GetModelShowNPoints()->GetLstPointsZ();
1436     } else {
1437         std::vector<double> lst;
1438         int iP,s;
1439         int iG,sG=lstModelShowNPoints.size();
1440         for (iG=0 ; iG<sG ; iG++)
1441         {
1442             std::vector<double> lstTmp = lstModelShowNPoints[iG]->GetLstPointsZ();
1443             s = lstTmp.size();
1444             for (iP=0 ; iP<s ; iP++)
1445             {
1446                 lst.push_back( lstTmp[iP] );
1447             } // for iP
1448         } // for iG
1449         return lst;
1450
1451     }
1452 }
1453
1454 //------------------------------------------------------------------------
1455 std::vector<std::string> WidgetShowNPoints::GetLstLabels()
1456 {
1457     if (mtype!=4)
1458     {
1459         return GetModelShowNPoints()->GetLstLabels();
1460     } else {
1461         std::vector< std::string > lst;
1462         int iP,s;
1463         int iG,sG=lstModelShowNPoints.size();
1464         for (iG=0 ; iG<sG ; iG++)
1465         {
1466             std::vector< std::string > lstTmp = lstModelShowNPoints[iG]->GetLstLabels();
1467             s = lstTmp.size();
1468             for (iP=0 ; iP<s ; iP++)
1469             {
1470                 lst.push_back( lstTmp[iP] );
1471             } // for iP
1472         } // for iG
1473         return lst;
1474     }
1475 }
1476
1477 //------------------------------------------------------------------------
1478 std::vector<int> WidgetShowNPoints::GetLstIndexs()
1479 {
1480     std::vector<int> lstIndexs;
1481     if (mtype!=4)
1482     {
1483         lstIndexs.push_back( GetModelShowNPoints()->GetLstPointsSize() );
1484     } else {
1485         int iG,sG=lstModelShowNPoints.size();
1486         for (iG=0 ; iG<sG ; iG++)
1487         {
1488             lstIndexs.push_back( lstModelShowNPoints[iG]->GetLstPointsSize() );
1489         } // for iG
1490     }
1491     return lstIndexs;
1492 }
1493
1494 //------------------------------------------------------------------------
1495 int WidgetShowNPoints::GetLstModelShowNPointsSize()
1496 {
1497     return lstModelShowNPoints.size();
1498 }
1499
1500 //------------------------------------------------------------------------
1501 void WidgetShowNPoints::InvertLstPoints_()
1502 {
1503     int i,size=lstModelShowNPoints.size();
1504     
1505     for (i=0 ;  i < size ; i++)
1506     {
1507         lstModelShowNPoints[i]->InversLstPoints();
1508     } // for iM
1509      
1510     /*
1511     ModelShowNPoints* tmpModel;
1512     int size2=size/2;
1513     for (i=0 ;  i < size2 ; i++)
1514     {
1515         tmpModel                        = lstModelShowNPoints[i];
1516         lstModelShowNPoints[i]          = lstModelShowNPoints[size-1-i];
1517         lstModelShowNPoints[size-1-i]   = tmpModel;
1518     } // for iM
1519      */
1520 }
1521
1522 //------------------------------------------------------------------------
1523 void WidgetShowNPoints::OnInvertLstPoints_()
1524 {
1525     StopAutoAddPoints();
1526     StopTrackPoint();
1527
1528     InvertLstPoints_();
1529     SetOutputBox();
1530     UndoRedo_SaveCollection();
1531 }
1532
1533
1534 //------------------------------------------------------------------------
1535 std::string WidgetShowNPoints::GetUndoRedoFileName()
1536 {
1537     char buff[20];
1538     sprintf(buff,"%p_%d",this, idUndoRedo);
1539     return  UndoRedoDir+"/"+"UndoRedo_collection_" + std::string(buff) + ".undoredo";
1540 }
1541
1542
1543 //------------------------------------------------------------------------
1544 void WidgetShowNPoints::OnUndo(wxCommandEvent &event)
1545 {
1546     ResetCollections_();
1547 //    if (idUndoRedo==maxUndoRedo+1)
1548 //    {
1549 //       idUndoRedo--;
1550 //    } // if idUndoRedo+1
1551     idUndoRedo--;
1552     idUndoRedo--;
1553     if (idUndoRedo<0)
1554     {
1555         idUndoRedo=-1;
1556     } else {
1557         OnLoadCollections_( GetUndoRedoFileName() );
1558     }// if idUndoRedo
1559     idUndoRedo++;
1560
1561 }
1562
1563 //------------------------------------------------------------------------
1564 void WidgetShowNPoints::OnRedo(wxCommandEvent &event)
1565 {
1566     if (idUndoRedo>maxUndoRedo)
1567     {
1568         idUndoRedo=maxUndoRedo+1;
1569     } else {
1570         ResetCollections_();
1571         OnLoadCollections_( GetUndoRedoFileName() );
1572         idUndoRedo++;
1573     }// if idUndoRedo
1574 }
1575
1576 //------------------------------------------------------------------------
1577 void WidgetShowNPoints::UndoRedo_SaveCollection()
1578 {
1579     OnSaveCollections_( GetUndoRedoFileName() );
1580     maxUndoRedo = idUndoRedo;
1581     idUndoRedo++;
1582 }
1583
1584