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