]> Creatis software - creaMaracasVisu.git/blob - bbtk/src/bbmaracasvisuShowNPoints.cxx
no message
[creaMaracasVisu.git] / bbtk / src / bbmaracasvisuShowNPoints.cxx
1 #include "bbmaracasvisuShowNPoints.h"
2 #include "bbcreaMaracasVisuPackage.h"
3
4 #include "vtkProperty.h"
5 #include "vtkSphereSource.h"
6 #include "vtkPolyDataMapper.h"
7 #include "vtkRenderWindow.h"
8 #include "vtkTextActor3D.h"
9
10 namespace bbcreaMaracasVisu
11 {
12
13 //----------------------------------------------------------------------
14   WidgetShowNPoints::WidgetShowNPoints(wxWindow *parent,  bbcreaMaracasVisu::ShowNPoints *box)
15     : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
16   {
17     mbbShowNPoints                                      = box;
18     this->renderer                                      = NULL;
19     wxPanel     *panel                                  = this;
20     wxSizer *sizer                                      = NULL;
21
22         // Widget interface
23         askPointLabel                                   = new wxStaticText(panel, -1, _T("Point label :")); // JPR
24         textCtrl                                                = new wxTextCtrl(panel, -1);
25         wxButton *btnAddPoint                   = new wxButton( panel, -1, _T("Add Point"));
26     wxButton *btnSetPositionPoint       = new wxButton( panel, -1, _T("Set nearest point"));
27         wxButton *btnRenamePoint                = new wxButton( panel, -1, _T("Rename point"));
28         wxButton *btnEraseLastPoint             = new wxButton( panel, -1, _T("Erase Last point"));
29         wxButton *btnErasePoint                 = new wxButton( panel, -1, _T("Erase point"));
30         wxButton *btnDeleteAllPoints    = new wxButton( panel, -1, _T("Delete all points"));
31         wxButton *btnSavePoints                 = new wxButton( panel, -1, _T("Save points"));
32         wxButton *btnLoadPoints                 = new wxButton( panel, -1, _T("Load points"));
33         txtNrPoints                                             = new wxStaticText(panel,-1, _T(" "));
34
35         //NTU: Sliders for opacity and radio change
36
37         wxStaticText* txOpacity = new wxStaticText(this, -1, wxString(_T("  Points Opacity  ")));
38         sdrOpacity = new wxSlider(this, -1, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
39
40         wxStaticText* txRadio = new wxStaticText(this, -1, wxString(_T("  Points Radio  ")));
41         sdrRadio = new wxSlider(this, -1, 0, 1, 50, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
42
43         wxFlexGridSizer *sizer1 = new wxFlexGridSizer(1);
44 //    sizer1->Add(new wxStaticText(panel,-1,_T("  ")));
45
46           Connect(btnAddPoint->GetId()                  , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnAddPoint);
47           Connect(btnSetPositionPoint->GetId()  , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnSetPoint);
48           Connect(btnRenamePoint->GetId()               , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnRenamePoint);
49           Connect(btnEraseLastPoint->GetId()    , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnEraseLastPoint);
50           Connect(btnErasePoint->GetId()                , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnErasePoint);
51           Connect(btnDeleteAllPoints->GetId()   , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnDeleteAllPoints);
52           Connect(btnSavePoints->GetId()                , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnSavePoints);
53           Connect(btnLoadPoints->GetId()                , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnLoadPoints);
54
55           //NTU: Slider events
56           Connect(sdrOpacity->GetId()   , wxEVT_COMMAND_SLIDER_UPDATED  , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
57           Connect(sdrRadio->GetId()     , wxEVT_COMMAND_SLIDER_UPDATED  , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
58
59           sizer1->Add(askPointLabel); // JPR
60           sizer1->Add(textCtrl);
61           sizer1->Add(btnAddPoint);
62           sizer1->Add(btnSetPositionPoint);
63           sizer1->Add(btnRenamePoint);
64           sizer1->Add(btnErasePoint);
65           sizer1->Add(btnEraseLastPoint);
66           sizer1->Add(btnDeleteAllPoints);
67           sizer1->Add(txtNrPoints);
68           sizer1->Add(txOpacity);
69           sizer1->Add(sdrOpacity,1,wxGROW );
70           sizer1->Add(txRadio);
71           sizer1->Add(sdrRadio,1,wxGROW );
72           sizer1->Add(btnSavePoints);
73           sizer1->Add(btnLoadPoints);
74
75           sizer = sizer1;
76           panel ->SetSizer(sizer);
77           panel ->SetAutoLayout(true);
78           panel ->Layout();
79 }
80
81 //------------------------------------------------------------------------
82 WidgetShowNPoints::~WidgetShowNPoints()
83 {
84 }
85
86 void WidgetShowNPoints::SetRadio(double radio)
87 {
88         this->mradio=radio;
89         //NTU: For Slider
90         sdrRadio->SetValue(this->mradio);
91 }
92
93 //------------------------------------------------------------------------
94 std::vector<int> WidgetShowNPoints::GetLstPointsX()
95 {
96         return lstPointsX;
97 }
98
99 //------------------------------------------------------------------------
100 std::vector<int> WidgetShowNPoints::GetLstPointsY()
101 {
102         return lstPointsY;
103 }
104
105 //------------------------------------------------------------------------
106 std::vector<int> WidgetShowNPoints::GetLstPointsZ()
107 {
108         return lstPointsZ;
109 }
110
111 //------------------------------------------------------------------------
112         std::vector<std::string> WidgetShowNPoints::GetLstLabels()
113 {
114         return lstLabels;
115 }
116
117 //------------------------------------------------------------------------
118 void WidgetShowNPoints::SetPoint(std::vector<int> ppoint)
119 {
120         mpoint = ppoint;
121 }
122
123 //------------------------------------------------------------------------
124 void WidgetShowNPoints::SetColour(std::vector<double> colour)
125 {
126         this->mcolour = colour;
127 }
128
129 //------------------------------------------------------------------------
130 void WidgetShowNPoints::SetOpacity(double opacity)
131 {
132         this->mopacity=opacity;
133         //NTU: For Slider
134         sdrOpacity->SetValue(this->mopacity/100.0);
135 }
136
137 //------------------------------------------------------------------------
138 void WidgetShowNPoints::SetImage(vtkImageData *image)
139 {
140         this->mimage=image;
141 }
142
143 //------------------------------------------------------------------------
144 void  WidgetShowNPoints::SetRenderer(vtkRenderer *renderer)
145 {
146         this->renderer  = renderer;
147 }
148
149 //------------------------------------------------------------------------
150
151 std::string WidgetShowNPoints::CleanSpaces(std::string ss)
152 {
153         int i;
154         while( (i=ss.find(32))>=0 )
155         {
156                 ss.replace(i,1,"_");
157         }
158         return ss;
159 }
160
161         
162 //------------------------------------------------------------------------
163         
164 void WidgetShowNPoints::RefreshPoint(int id)
165 {
166         int x = lstPointsX[id];
167         int y = lstPointsY[id];
168         int z = lstPointsZ[id];
169         
170         double spc[3];
171         mimage->GetSpacing(spc);
172         
173         lstActorsSphere[id]->SetPosition( spc[0]*x , spc[1]*y , spc[2]*z );
174         lstActorsSphere[id]->GetProperty()->SetColor( mcolour[0] , mcolour[1] , mcolour[2] );
175         lstActorsSphere[id]->GetProperty()->SetOpacity( mopacity );
176         
177         lstActorsText[id]->SetPosition(  mradio+spc[0]*x , spc[1]*y , spc[2]*z );
178 }
179         
180         
181 //------------------------------------------------------------------------
182 void WidgetShowNPoints::AddPoint(int x, int y, int z, std::string label)
183 {
184         lstPointsX.push_back( x );
185         lstPointsY.push_back( y );
186         lstPointsZ.push_back( z );
187
188         std::string strLabel = CleanSpaces(  label );
189
190         lstLabels.push_back( strLabel );
191
192         // Sphere
193         vtkSphereSource *vtksphere              = vtkSphereSource::New();
194         vtksphere->SetThetaResolution (20);
195         vtksphere->SetPhiResolution (20);
196         vtksphere->SetRadius( mradio  );
197
198         //NTU: For updating points
199
200         lstSourceSphere.push_back(vtksphere);
201
202         vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New();
203         sphereMapper->SetInput( vtksphere->GetOutput() );
204         vtkActor *sphereActor   = vtkActor::New();
205         sphereActor->SetMapper(sphereMapper);
206         sphereActor->SetOrigin(0, 0, 0);
207         
208         
209 /*EED Borrame
210         double spc[3];
211         if(mimage==NULL){
212                 wxMessageDialog dialog(this, _T("Image Not Set"),_T("Image Not Set"),wxICON_ERROR);
213                 dialog.ShowModal();
214                 return;
215         }
216         mimage->GetSpacing(spc);
217         sphereActor->SetPosition( spc[0]*x , spc[1]*y , spc[2]*z );
218         sphereActor->GetProperty()->SetColor( mcolour[0] , mcolour[1] , mcolour[2] );
219         sphereActor->GetProperty()->SetOpacity( mopacity );
220 */
221         
222         lstActorsSphere.push_back(sphereActor);
223         if(renderer==NULL){
224                 wxMessageDialog dialog(this, _T("Renderer Not Set"),_T("Renderer Not Set"),wxICON_ERROR);
225                 dialog.ShowModal();             
226                 return;
227         }
228         renderer->AddActor( sphereActor );
229
230         // Actor
231         vtkTextActor3D *textActor = vtkTextActor3D::New();
232 /* EED Borrame  
233         textActor->SetPosition(  mradio+spc[0]*x , spc[1]*y , spc[2]*z );
234 */ 
235         textActor->SetInput( strLabel.c_str()  );
236         renderer->AddActor( textActor );
237         lstActorsText.push_back(textActor);
238
239         RefreshPoint(lstPointsX.size()-1);
240         
241         
242         SetOutputBox();
243 }
244
245 //------------------------------------------------------------------------
246 void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event)
247 {
248         if(mimage==NULL){
249                 wxMessageDialog dialog(this, _T("Image Not Set"),_T("Image Not Set"),wxICON_ERROR);
250                 dialog.ShowModal();
251                 return;
252         }
253         
254         if (this->renderer!=NULL){
255                 if (mpoint.size()==3){
256                         AddPoint(mpoint[0],mpoint[1],mpoint[2], (const char*) ( textCtrl->GetValue().mb_str() ) );
257                 } else {//mpoint.size
258                         printf("creaMaracasVisu::ShowNPoints (not match point) \n");
259                 }
260         } // renderer
261 }
262
263 //------------------------------------------------------------------------
264         void WidgetShowNPoints::SetOutputBox()
265         {
266                 renderer->GetRenderWindow()->Render();
267                 wxString strTmp;
268                 strTmp.Printf(_T("Nbr of points: %d"), (int)(lstPointsX.size()) );
269                 txtNrPoints->SetLabel(  strTmp );
270
271                 //--BBTK
272                 mbbShowNPoints->bbSetOutputlstPointsX( lstPointsX );
273                 mbbShowNPoints->bbSetOutputlstPointsY( lstPointsY );
274                 mbbShowNPoints->bbSetOutputlstPointsZ( lstPointsZ );
275                 mbbShowNPoints->bbSetOutputlstLabels( lstLabels );
276                 mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsX"));
277                 mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsY"));
278                 mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsZ"));
279                 mbbShowNPoints->bbSignalOutputModification(std::string("lstLabels"));
280         }
281
282 //------------------------------------------------------------------------
283         void WidgetShowNPoints::OnSavePoints(wxCommandEvent& event)
284         {
285                 wxFileDialog* FD = new wxFileDialog( 0,
286                                             _T("Save points .."),
287                                             _T(""),
288                                             _T(""),
289                                             _T("(*.xls)|*.xls"),
290                                             wxSAVE | wxOVERWRITE_PROMPT,
291                                             wxDefaultPosition);
292                 //EED
293
294                 int result_FD = FD->ShowModal();
295
296                 // This line is need it by windows //EED
297                 FD->SetReturnCode( result_FD );
298
299                 if (FD->GetReturnCode()==wxID_OK)
300                 {
301                         FILE *ff;
302                         std::string filename= (const char*) ( FD->GetPath().mb_str() );
303                         ff = fopen( filename.c_str() , "w+" );
304                         if (ff!=NULL)
305                         {
306                                 int i , size = (int) (lstActorsSphere.size());
307                                 fprintf(ff,"NumberOfPoints %d \n",size);
308                                 fprintf(ff," X\tY\tZ\tvalue\tLabel\n");
309                                 int x, y, z;
310                                 double value;
311                                 for (i=0; i<size; i++)
312                                 {
313                                         x=lstPointsX[i];
314                                         y=lstPointsY[i];
315                                         z=lstPointsZ[i];
316                                         value= mimage->GetScalarComponentAsDouble(x,y,z,0);
317                                         fprintf(ff,"%d\t%d\t%d\t%f\t%s\n", x , y , z , value  , lstLabels[i].c_str());
318                                 } // for
319                                 fclose(ff);
320                         } else {   // else ff
321                                 printf("WidgetShowNPoints::OnSavePoints  ...Error... creating file");
322                         } //ff
323                 }       // dialog box
324         }
325
326 //------------------------------------------------------------------------
327         void WidgetShowNPoints::OnLoadPoints(wxCommandEvent& event)
328         {
329                 wxFileDialog* FD = new wxFileDialog( 0,
330                                              _T("Load points .."),
331                                              _T(""),
332                                              _T(""),
333                                              _T("(*.xls)|*.xls"),
334                                              wxOPEN | wxFILE_MUST_EXIST,
335                                              wxDefaultPosition);
336                 //EED
337
338                 int result_FD = FD->ShowModal();
339
340                 // This line is need it by windows //EED
341                 FD->SetReturnCode( result_FD );
342
343                 if (FD->GetReturnCode()==wxID_OK)
344                 {
345                         FILE *ff;
346                         std::string filename= (const char*) ( FD->GetPath().mb_str() );
347                         ff = fopen( filename.c_str() , "r+" );
348                         if (ff!=NULL)
349                         {
350                                 int i,size;
351                                 char chartmp[256];
352                                 fscanf(ff," %s %d",chartmp,&size);
353                                 fscanf(ff," %s %s %s %s %s",chartmp, chartmp,chartmp,chartmp,chartmp );
354
355                                 float value;
356                                 int x,y,z;
357                                 for (i=0; i<size; i++)
358                                 {
359                                         fscanf(ff,"%d%d%d%f%s",&x,&y,&z,&value,chartmp );  // x,y,z,value,label
360                                         AddPoint(x,y,z, chartmp );
361                                 }
362                                 fclose(ff);
363                         } else {   // else ff
364                                 printf("WidgetShowNPoints::OnLoadPoints  ...Error... reading file");
365                         } //ff
366                 }       // dialog box
367
368
369         }
370
371 //------------------------------------------------------------------------
372
373         int WidgetShowNPoints::GetNearestPoint()
374         {
375                 int id=-1;
376                 int i, size=(int)(lstActorsSphere.size());
377                 double radioMin=10000000;
378                 
379                 if(mimage ==NULL){                      
380                         wxMessageDialog* diag = new wxMessageDialog(this, _T("Image not set"), _T("Image Not Set"), wxICON_ERROR);
381                         diag->ShowModal();
382                         return -1;
383                 }else{
384                         
385                         for ( i=0  ; i<size; i++ )
386                         {
387                                 double rx =  mpoint[0] - lstPointsX [i];
388                                 double ry =  mpoint[1] - lstPointsY [i];
389                                 double rz =  mpoint[2] - lstPointsZ [i];
390                                 double radio = rx*rx + ry*ry + rz*rz;
391                                 if ( radio <= radioMin)
392                                 {
393                                         radioMin=radio;
394                                         id=i;
395                                 }       // if
396                         } // for
397                         
398                         return id;
399                 }
400         }
401
402         
403         //------------------------------------------------------------------------
404         void WidgetShowNPoints::OnSetPoint(wxCommandEvent& event)
405         {
406                 int id=GetNearestPoint();
407                 if (id>=0)
408                 {
409                         printf("WidgetShowNPoints::OnSetPoint \n");
410                         lstPointsX[id] = mpoint[0];
411                         lstPointsY[id] = mpoint[1];
412                         lstPointsZ[id] = mpoint[2];             
413                         RefreshPoint(id);
414                         /*EED Borrame
415                          this->lstActorsSphere[id]->SetPosition( spc[0]*mpoint[0]+difradio, spc[1]*mpoint[1], spc[2]* mpoint[2] );
416                          this->lstActorsText[id]->SetPosition(  spc[0]*mpoint[0]+difradio, spc[1]*mpoint[1], spc[2]* mpoint[2] );
417                          */ 
418                 } // if id
419                 SetOutputBox();
420         }
421         
422         
423         //------------------------------------------------------------------------
424         
425         int WidgetShowNPoints::IdInsidePoint()
426         {
427                 int id=-1;
428                 int i, size=(int)(lstActorsSphere.size());
429                 double spc[3];
430
431                 if(mimage ==NULL){                      
432                         wxMessageDialog* diag = new wxMessageDialog(this, _T("Image not set"), _T("Image Not Set"), wxICON_ERROR);
433                         diag->ShowModal();
434                         return -1;
435                 }else{
436
437                         mimage->GetSpacing(spc);
438
439                         for ( i=0  ; i<size; i++ )
440                         {
441                                 double rx =  spc[0]*(mpoint[0] - lstPointsX [i]);
442                                 double ry =  spc[1]*(mpoint[1] - lstPointsY [i]);
443                                 double rz =  spc[2]*(mpoint[2] - lstPointsZ [i]);
444                                 if ( rx*rx + ry*ry + rz*rz <= mradio*mradio)
445                                 {
446                                         id=i;
447                                 }       // if
448                         } // for
449
450                         return id;
451                 }
452         }
453
454         
455 //------------------------------------------------------------------------
456         void WidgetShowNPoints::OnRenamePoint(wxCommandEvent& event)
457         {
458                 int id=IdInsidePoint();
459                 if (id>=0)
460                 {
461                         std::string strLabel = CleanSpaces(  (const char*) ( textCtrl->GetValue().mb_str() ) );
462                         lstLabels[id] = CleanSpaces( (const char*) (textCtrl->GetValue().mb_str()) ) ;
463                         lstActorsText[id]->SetInput(  lstLabels[id].c_str() );
464                         SetOutputBox();
465                 }
466         }
467
468 //------------------------------------------------------------------------
469         void WidgetShowNPoints::ErasePoint(int id)
470         {
471                 if (this->renderer!=NULL){
472                         if (id>=0){
473                                 renderer->RemoveActor( lstActorsSphere[id] );
474                                 renderer->RemoveActor( lstActorsText[id] );
475                                  lstActorsSphere[id]->Delete();
476                                  lstActorsText[id]->Delete();
477                                  lstSourceSphere[id]->Delete();
478                                 lstActorsSphere.erase( lstActorsSphere.begin()+id );
479                                 lstActorsText.erase( lstActorsText.begin()+id );
480                                 lstSourceSphere.erase( lstSourceSphere.begin()+id );
481
482                                 lstPointsX.erase( lstPointsX.begin()+id );
483                                 lstPointsY.erase( lstPointsY.begin()+id );
484                                 lstPointsZ.erase( lstPointsZ.begin()+id );
485                                 lstLabels.erase( lstLabels.begin()+id );
486
487                                 SetOutputBox();
488
489                         } // if id
490                 } // if renderer
491         }
492
493 //------------------------------------------------------------------------
494         void WidgetShowNPoints::OnErasePoint(wxCommandEvent& event)
495         {
496                 ErasePoint( IdInsidePoint() );
497         }
498
499 //------------------------------------------------------------------------
500         void WidgetShowNPoints::OnEraseLastPoint(wxCommandEvent& event)
501         {
502                 ErasePoint(lstActorsSphere.size()-1);
503         }
504
505 //------------------------------------------------------------------------
506 void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event)
507 {
508         int id,size=lstActorsSphere.size();
509         for (id=size-1;id>=0;id--)
510         {
511                 ErasePoint(id);
512         }
513 }
514
515 //NTU: Method for updating points opacity and Radio
516
517 //------------------------------------------------------------------------
518 void WidgetShowNPoints::UpdatePoints(wxCommandEvent &event)
519 {
520         //Difference in Radio for text placement
521         int difradio = sdrRadio->GetValue() - this->mradio;
522         
523         this->mopacity = sdrOpacity->GetValue()/100.0;
524         this->mradio = sdrRadio->GetValue();
525         
526         //NTU refresh the inputs
527         mbbShowNPoints->bbSetInputOpacity(this->mopacity);
528         mbbShowNPoints->bbSetInputRadio(this->mradio);
529
530         int size = (int) this->lstActorsSphere.size();
531         int i;
532         for(i = 0; i < size; i ++)
533         {
534                 this->lstSourceSphere[i]->SetRadius(mradio);
535                 this->lstActorsSphere[i]->GetProperty()->SetOpacity(mopacity);
536                 this->lstActorsText[i]->SetPosition(this->lstActorsText[i]->GetPosition()[0]+difradio,this->lstActorsText[i]->GetPosition()[1], this->lstActorsText[i]->GetPosition()[2]);
537         }
538
539         //NTU: For updating
540         SetOutputBox();
541 }
542
543 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,ShowNPoints)
544 BBTK_BLACK_BOX_IMPLEMENTATION(ShowNPoints,bbtk::WxBlackBox);
545
546 void ShowNPoints::Process()
547 {
548         if (mwxwidget!=NULL)
549         {
550                 mwxwidget->SetRenderer( bbGetInputRenderer() );
551                 mwxwidget->SetPoint( bbGetInputIn() );
552                 mwxwidget->SetImage( bbGetInputImage() );
553                 mwxwidget->SetColour( bbGetInputColour() );
554                 mwxwidget->SetOpacity( bbGetInputOpacity() );
555                 mwxwidget->SetRadio( bbGetInputRadio() );
556
557                 bbSetOutputlstPointsX( mwxwidget->GetLstPointsX() );
558                 bbSetOutputlstPointsY( mwxwidget->GetLstPointsY() );
559                 bbSetOutputlstPointsZ( mwxwidget->GetLstPointsZ() );
560                 bbSetOutputlstLabels( mwxwidget->GetLstLabels() );
561         } // mwxwidget
562 }
563
564 void ShowNPoints::CreateWidget(wxWindow* parent)
565 {
566         mwxwidget = new WidgetShowNPoints( parent, this);
567         bbSetOutputWidget( mwxwidget );
568 }
569
570 void ShowNPoints::bbUserSetDefaultValues()
571 {
572         mwxwidget = NULL;
573
574         bbSetInputRadio(1);
575         bbSetInputOpacity(1);
576
577         std::vector<double> colour;
578         colour.push_back(1.0);
579         colour.push_back(0.0);
580         colour.push_back(0.0);
581         bbSetInputColour(colour);
582
583         bbSetInputImage(NULL);
584         bbSetInputRenderer(NULL);
585 }
586
587 //-----------------------------------------------------------------
588         void ShowNPoints::bbUserInitializeProcessing()
589         {
590         }
591
592 //-----------------------------------------------------------------
593         void ShowNPoints::bbUserFinalizeProcessing()
594         {
595         }
596
597 //-----------------------------------------------------------------
598
599 }
600 // EO namespace bbcreaMaracasVisu