]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/WidgetShowNPoints.cxx
#3096 creaMaracasVisu Feature New Normal - Box ShowNPoints_Reset
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / WidgetShowNPoints.cxx
diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/WidgetShowNPoints.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/WidgetShowNPoints.cxx
new file mode 100644 (file)
index 0000000..0190f82
--- /dev/null
@@ -0,0 +1,575 @@
+
+
+#include "vtkActor.h"
+#include "vtkSphereSource.h"
+#include "vtkRenderer.h"
+#include "vtkTextActor3D.h"
+
+
+#include "vtkProperty.h"
+#include "vtkPolyDataMapper.h"
+#include "vtkRenderWindow.h"
+#include <vtkTextProperty.h>
+
+#include <wx/button.h>
+#include <wx/sizer.h>
+#include <wx/filedlg.h>
+#include <wx/msgdlg.h>
+
+#include "WidgetShowNPoints.h"
+
+
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+  WidgetShowNPoints::WidgetShowNPoints(wxWindow *parent, int type)
+    : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
+  {
+       mmodelShowNPoints                               = new ModelShowNPoints();
+    mtype                                                      = type;
+    SetType(mtype);
+    this->renderer                                     = NULL;
+    wxPanel    *panel                                  = this;
+    wxSizer *sizer                                     = NULL;
+
+       if (mtype==0)
+       {
+               // Widget interface
+               askPointLabel                                   = new wxStaticText(panel, -1, _T("Point label :")); // JPR
+               textCtrl                                                = new wxTextCtrl(panel, -1);
+               wxButton *btnAddPoint                   = new wxButton( panel, -1, _T("Add Point"));
+               wxButton *btnInsertPoint                = new wxButton( panel, -1, _T("Insert Point"));//CFT
+               wxButton *btnSetPositionPoint   = new wxButton( panel, -1, _T("Set nearest point"));
+               wxButton *btnRenamePoint                = new wxButton( panel, -1, _T("Rename point"));
+               wxButton *btnEraseLastPoint             = new wxButton( panel, -1, _T("Erase Last point"));
+               wxButton *btnErasePoint                 = new wxButton( panel, -1, _T("Erase point"));
+               wxButton *btnDeleteAllPoints    = new wxButton( panel, -1, _T("Delete all points"));
+               wxButton *btnSavePoints                 = new wxButton( panel, -1, _T("Save points"));
+               wxButton *btnLoadPoints                 = new wxButton( panel, -1, _T("Load points"));
+               txtNrPoints                                             = new wxStaticText(panel,-1, _T(" "));
+
+               //NTU: Sliders for opacity and radio change
+               wxStaticText* txOpacity = new wxStaticText(this, -1, wxString(_T("  Points Opacity  ")));
+               sdrOpacity = new wxSlider(this, -1, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
+               wxStaticText* txRadio = new wxStaticText(this, -1, wxString(_T("  Points Radio  ")));
+               sdrRadio = new wxSlider(this, -1, 0, 1, 50, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
+
+               wxFlexGridSizer *sizer1 = new wxFlexGridSizer(1);
+               //    sizer1->Add(new wxStaticText(panel,-1,_T("  ")));
+
+               Connect(btnAddPoint->GetId()            , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnAddPoint);
+               Connect(btnInsertPoint->GetId()         , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnInsertPoint);//CFT
+               Connect(btnSetPositionPoint->GetId(), wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnSetPoint);
+               Connect(btnRenamePoint->GetId()         , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnRenamePoint);
+               Connect(btnEraseLastPoint->GetId()      , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnEraseLastPoint);
+               Connect(btnErasePoint->GetId()          , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnErasePoint);
+               Connect(btnDeleteAllPoints->GetId()     , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnDeleteAllPoints);
+               Connect(btnSavePoints->GetId()          , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnSavePoints);
+               Connect(btnLoadPoints->GetId()          , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnLoadPoints);
+
+               //NTU: Slider events
+               Connect(sdrOpacity->GetId()                     , wxEVT_COMMAND_SLIDER_UPDATED  , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
+               Connect(sdrRadio->GetId()                       , wxEVT_COMMAND_SLIDER_UPDATED  , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
+
+               sizer1->Add(askPointLabel); // JPR
+               sizer1->Add(textCtrl);
+               sizer1->Add(btnAddPoint);
+               sizer1->Add(btnInsertPoint);//CFT
+               sizer1->Add(btnSetPositionPoint);
+               sizer1->Add(btnRenamePoint);
+               sizer1->Add(btnErasePoint);
+               sizer1->Add(btnEraseLastPoint);
+               sizer1->Add(btnDeleteAllPoints);
+               sizer1->Add(txtNrPoints);
+               sizer1->Add(txOpacity);
+               sizer1->Add(sdrOpacity,1,wxGROW );
+               sizer1->Add(txRadio);
+               sizer1->Add(sdrRadio,1,wxGROW );
+               sizer1->Add(btnSavePoints);
+               sizer1->Add(btnLoadPoints);
+               sizer = sizer1;
+       }
+
+         if (mtype==1)
+         {
+                 // Widget interface
+                 wxButton *btnSetPositionPoint         = new wxButton( panel, -1, _T("Set nearest point"));
+                 txtNrPoints                                           = new wxStaticText(panel,-1, _T(" "));
+
+                 //NTU: Sliders for opacity and radio change
+                 wxStaticText* txOpacity                       = new wxStaticText(this, -1, wxString(_T("  Points Opacity  ")));
+                 sdrOpacity                                            = new wxSlider(this, -1, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
+                 wxStaticText* txRadio                         = new wxStaticText(this, -1, wxString(_T("  Points Radio  ")));
+                 sdrRadio                                                      = new wxSlider(this, -1, 0, 1, 50, wxDefaultPosition, wxDefaultSize, wxSL_LABELS);
+                 wxFlexGridSizer *sizer1                       = new wxFlexGridSizer(1);
+                 Connect(btnSetPositionPoint->GetId()  , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnSetPoint);
+                 Connect(sdrOpacity->GetId()   , wxEVT_COMMAND_SLIDER_UPDATED  , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
+                 Connect(sdrRadio->GetId()     , wxEVT_COMMAND_SLIDER_UPDATED  , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints);
+
+                 sizer1->Add(btnSetPositionPoint);
+                 sizer1->Add(txtNrPoints);
+                 sizer1->Add(txOpacity);
+                 sizer1->Add(sdrOpacity,1,wxGROW );
+                 sizer1->Add(txRadio);
+                 sizer1->Add(sdrRadio,1,wxGROW );
+                 sizer = sizer1;
+         }
+    
+    if (mtype == 2) 
+       {
+               askPointLabel                                           = new wxStaticText(panel, -1, _T("\nPOINT CONTROLS:")); // JPR
+       wxButton                *btnAddPoint            = new wxButton(panel, -1,        _T("      Add  Point      "));
+        wxButton               *btnDeleteAllPoints = new wxButton(panel, -1, _T("      Delete All      "));
+        wxStaticText   *spacer                         = new wxStaticText(panel, -1, _T("\n")); // JPR
+                                        textCtrl                       = new wxTextCtrl(panel, -1);
+        wxFlexGridSizer *sizer1                        = new wxFlexGridSizer(1);
+        Connect(btnAddPoint->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnAddPoint);
+        Connect(btnDeleteAllPoints->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnDeleteAllPoints);    
+        sizer1->Add(askPointLabel); 
+        sizer1->Add(btnAddPoint);
+        sizer1->Add(btnDeleteAllPoints);
+        sizer1->Add(spacer);
+        sizer1->Add(textCtrl);
+        sdrOpacity = new wxSlider();
+        sdrRadio = new wxSlider();
+        txtNrPoints = new wxStaticText(panel, -1, _T("\n\n\n"));
+        sizer = sizer1;
+       } // bbGetInputType 2
+
+       if (sizer!=NULL)
+       {
+               panel->SetSizer(sizer);
+               panel->SetAutoLayout(true);
+               panel->Layout();
+       } // if sizer
+}
+
+//------------------------------------------------------------------------
+WidgetShowNPoints::~WidgetShowNPoints()
+{
+}
+
+//------------------------------------------------------------------------
+ModelShowNPoints* WidgetShowNPoints::GetModelShowNPoints()
+{
+       return mmodelShowNPoints;
+}
+
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::SetRadio(double radio)
+{
+       GetModelShowNPoints()->SetRadio(radio);
+       //NTU: For Slider
+       sdrRadio->SetValue(radio);
+}
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::SetColour(std::vector<double> colour)
+{
+       this->mcolour = colour;
+}
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::SetImage(vtkImageData* image)
+{
+       GetModelShowNPoints()->SetImage(image);
+}
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::SetOpacity(double opacity)
+{
+       this->mopacity=opacity;
+       //NTU: For Slider
+       sdrOpacity->SetValue(this->mopacity*100.0);
+}
+
+
+//------------------------------------------------------------------------
+void  WidgetShowNPoints::SetRenderer(vtkRenderer *renderer)
+{
+       this->renderer  = renderer;
+}
+       
+//------------------------------------------------------------------------
+       
+void WidgetShowNPoints::RefreshPoint(int id)
+{
+       double spc[3];
+
+//EED 2016/06/17
+//     mimage->GetSpacing(spc);
+//     int x = lstPointsX[id];
+//     int y = lstPointsY[id];
+//     int z = lstPointsZ[id];
+       int x,y,z;
+       GetModelShowNPoints()->GetIdPoint(id,&x,&y,&z);
+       GetModelShowNPoints()->GetImage()->GetSpacing(spc);
+       std::string label       = GetModelShowNPoints()->GetIdLabel(id);
+       double radio            = GetModelShowNPoints()->GetRadio();
+
+       lstActorsSphere[id]->SetPosition( spc[0]*x , spc[1]*y , spc[2]*z );
+       lstActorsSphere[id]->GetProperty()->SetColor( mcolour[0] , mcolour[1] , mcolour[2] );
+       lstActorsSphere[id]->GetProperty()->SetOpacity( mopacity );
+       lstSourceSphere[id]->SetRadius( radio );
+
+       lstActorsText[id]->SetInput( label.c_str()  );
+       lstActorsText[id]->SetPosition(  radio+spc[0]*x , spc[1]*y , spc[2]*z );
+}
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::RefreshPoints()
+{
+       int id,size=lstActorsSphere.size();
+       for (id=0;id<size;id++)
+       {
+               RefreshPoint(id);
+       } // for
+       renderer->GetRenderWindow()->Render();
+}
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::AddVtkPoint()
+{
+       // Sphere
+       vtkSphereSource *vtksphere = vtkSphereSource::New();
+       vtksphere->SetThetaResolution (20);
+       vtksphere->SetPhiResolution (20);
+       vtksphere->SetRadius( 1 );
+       //NTU: For updating points
+       lstSourceSphere.push_back(vtksphere);
+       vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New();
+       sphereMapper->SetInput( vtksphere->GetOutput() );
+       vtkActor *sphereActor   = vtkActor::New();
+       sphereActor->SetMapper(sphereMapper);
+       sphereActor->SetOrigin(0, 0, 0);
+
+       lstActorsSphere.push_back(sphereActor);
+       if(renderer==NULL){
+               wxMessageDialog dialog(this, _T("Renderer Not Set"),_T("Renderer Not Set"),wxICON_ERROR);
+               dialog.ShowModal();             
+               return;
+       }
+       renderer->AddActor( sphereActor );
+       // Actor
+       vtkTextActor3D *textActor = vtkTextActor3D::New();
+//     textActor->SetInput( strLabel.c_str()  );
+       renderer->AddActor( textActor );
+       lstActorsText.push_back(textActor);
+}
+
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::AddPoint(int x, int y, int z, std::string label)
+{
+       GetModelShowNPoints()->AddPoint(x,y,z, label );
+       AddVtkPoint();
+       RefreshPoint(lstActorsSphere.size()-1);
+}
+
+
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::InsertPoint(int x, int y, int z, std::string label)//CFT
+{
+
+//--
+       if ( GetModelShowNPoints()->InsertPoint(x,y,z,label) != -1 )
+       {
+               AddVtkPoint();
+       } else {
+               AddPoint(x,y,z,label);
+       }
+       RefreshPoints();
+       //end if
+}
+
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event)
+{      
+       if (this->renderer==NULL)
+       { 
+               return;
+       }
+
+       std::vector<int> point = GetModelShowNPoints()->GetReferencePoint();
+       if (point.size()==3)
+       {
+               AddPoint(point[0],point[1],point[2], (const char*) ( textCtrl->GetValue().mb_str() ) );
+               SetOutputBox();
+               renderer->GetRenderWindow()->Render();
+       } else {//mpoint.size
+               printf("creaMaracasVisu::ShowNPoints (not match point) \n");
+       }
+}
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::OnInsertPoint (wxCommandEvent& event)//CFT
+{      
+       if (this->renderer==NULL)
+       { 
+               return;
+       }
+
+       std::vector<int> point = GetModelShowNPoints()->GetReferencePoint();
+       if (point.size()==3)
+       {
+               InsertPoint(point[0],point[1],point[2], (const char*) ( textCtrl->GetValue().mb_str() ) );
+               SetOutputBox();
+       } else {//mpoint.size
+               printf("creaMaracasVisu::ShowNPoints (not match point) \n");
+       }
+}
+
+
+//------------------------------------------------------------------------
+       void WidgetShowNPoints::SetOutputBox()
+       {
+//EED          renderer->GetRenderWindow()->Render();
+               wxString strTmp;
+               strTmp.Printf(_T("Nbr of points: %d"), GetModelShowNPoints()->GetLstPointsSize() );
+               txtNrPoints->SetLabel(  strTmp );
+               //--BBTK
+
+//EED 2017-06-03
+//             mbbShowNPoints->bbSetOutputlstPointsX( GetModelShowNPoints()->GetLstPointsX() );
+//             mbbShowNPoints->bbSetOutputlstPointsY( GetModelShowNPoints()->GetLstPointsY() );
+//             mbbShowNPoints->bbSetOutputlstPointsZ( GetModelShowNPoints()->GetLstPointsZ() );
+//             mbbShowNPoints->bbSetOutputlstLabels( GetModelShowNPoints()->GetLstLabels() );
+//             mbbShowNPoints->bbSignalOutputModification();
+       }
+
+
+//------------------------------------------------------------------------
+       void WidgetShowNPoints::OnSavePoints(wxCommandEvent& event)
+       {
+               wxFileDialog* FD = new wxFileDialog( 0,
+                                            _T("Save points .."),
+                                            _T(""),
+                                            _T(""),
+                                            _T("(*.xls)|*.xls"),
+                                            wxSAVE | wxOVERWRITE_PROMPT,
+                                            wxDefaultPosition);
+               //EED
+
+               int result_FD = FD->ShowModal();
+               
+               // This line is need it by windows //EED
+               FD->SetReturnCode( result_FD );
+
+               if (FD->GetReturnCode()==wxID_OK)
+               {
+                       std::string filename= (const char*) ( FD->GetPath().mb_str() ); 
+                       GetModelShowNPoints()->SavePoints( filename );
+               }       // dialog box
+       }
+
+
+//------------------------------------------------------------------------
+       void WidgetShowNPoints::OnLoadPoints(wxCommandEvent& event)
+       {
+               wxFileDialog* FD = new wxFileDialog( 0,
+                                             _T("Load points .."),
+                                             _T(""),
+                                             _T(""),
+                                             _T("(*.xls)|*.xls"),
+                                             wxOPEN | wxFILE_MUST_EXIST,
+                                             wxDefaultPosition);
+               int i;
+               //EED
+               int result_FD = FD->ShowModal();
+               // This line is need it by windows //EED
+               FD->SetReturnCode( result_FD );
+               if (FD->GetReturnCode()==wxID_OK)
+               {
+
+                       std::string filename= (const char*) ( FD->GetPath().mb_str() ); 
+                       int numberPointsRead = GetModelShowNPoints()->ReadPoints( filename );
+                       for (i=0;i<numberPointsRead;i++)
+                       {
+                               AddVtkPoint();
+                       }// for
+                       SetOutputBox();
+                       RefreshPoints();
+               }       // dialog box
+
+       }
+
+       //------------------------------------------------------------------------
+       void WidgetShowNPoints::OnSetPoint(wxCommandEvent& event)
+       {
+               int id=GetModelShowNPoints()->GetNearestPoint();
+               if((id==-1) && (mtype==1))
+               {
+                       id=0;
+                       AddPoint(0,0,0,"");
+                       SetOutputBox();
+               }
+       
+               if (id>=0)
+               {
+                       GetModelShowNPoints()->SetPointId_mReferencePoint(id);
+                       RefreshPoint(id);
+                       renderer->GetRenderWindow()->Render();
+               } // if id
+               SetOutputBox();
+       }
+       
+//------------------------------------------------------------------------
+       void WidgetShowNPoints::OnRenamePoint(wxCommandEvent& event)
+       {
+               int id = GetModelShowNPoints()->RenamePoint( (const char*) ( textCtrl->GetValue().mb_str() ) );
+               if (id>=0)
+               {
+                       lstActorsText[id]->SetInput(  (const char*) ( textCtrl->GetValue().mb_str() ) );
+                       SetOutputBox();
+                       renderer->GetRenderWindow()->Render();
+               }
+       }
+
+//------------------------------------------------------------------------
+       void WidgetShowNPoints::ErasePoint(int id)
+       {
+               if (this->renderer!=NULL)
+               {
+                       if (id>=0)
+                       {
+                               renderer->RemoveActor( lstActorsSphere[id] );
+                               renderer->RemoveActor( lstActorsText[id] );
+                               lstActorsSphere[id]->Delete();
+                               lstActorsText[id]->Delete();
+                               lstSourceSphere[id]->Delete();
+                               lstActorsSphere.erase( lstActorsSphere.begin()+id );
+                               lstActorsText.erase( lstActorsText.begin()+id );
+                               lstSourceSphere.erase( lstSourceSphere.begin()+id );
+                               GetModelShowNPoints()->ErasePoint(id);
+                       } // if id
+               } // if renderer
+       }
+
+//------------------------------------------------------------------------
+       void WidgetShowNPoints::OnErasePoint(wxCommandEvent& event)
+       {
+               ErasePoint( GetModelShowNPoints()->IdInsidePoint() );
+               SetOutputBox();
+               renderer->GetRenderWindow()->Render();
+       }
+
+//------------------------------------------------------------------------
+       void WidgetShowNPoints::OnEraseLastPoint(wxCommandEvent& event)
+       {
+               ErasePoint(lstActorsSphere.size()-1);
+               SetOutputBox();
+               renderer->GetRenderWindow()->Render();
+       }
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::DeleteAllPoints()
+{
+       int id,size=lstActorsSphere.size();
+       for (id=size-1;id>=0;id--)
+       {
+               ErasePoint(id);
+       }
+       SetOutputBox();
+       renderer->GetRenderWindow()->Render();
+}
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event)
+{
+       DeleteAllPoints();
+}
+
+//NTU: Method for updating points opacity and Radio
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::UpdatePoints(wxCommandEvent &event)
+{
+       //Difference in Radio for text placement
+//     double radio=GetModelShowNPoints()->GetRadio();
+       this->mopacity = sdrOpacity->GetValue()/100.0;
+       GetModelShowNPoints()->SetRadio( sdrRadio->GetValue() ) ;
+//     radio = sdrRadio->GetValue();
+       //NTU refresh the inputs
+
+//EED 2017-06-03
+//     mbbShowNPoints->bbSetInputOpacity(this->mopacity);
+//     mbbShowNPoints->bbSetInputRadio( radio );
+       // EED 
+       RefreshPoints();
+}
+
+//------------------------------------------------------------------------
+void  WidgetShowNPoints::SetReferencePoint(std::vector<int> point)
+{
+       GetModelShowNPoints()->SetReferencePoint(point);
+}
+
+//------------------------------------------------------------------------
+void  WidgetShowNPoints::SetInitLstPoints( std::vector<int> initLstPointsX,  std::vector<int> initLstPointsY, std::vector<int> initLstPointsZ, std::vector<std::string> initLstLabels )
+{
+       if (this->renderer==NULL)
+       { 
+               return;
+       }
+
+       int i,sizeX,sizeY,sizeZ,sizeLabels;
+       sizeX=(int)initLstPointsX.size();
+       sizeY=(int)initLstPointsY.size();
+       sizeZ=(int)initLstPointsZ.size();
+       sizeLabels=(int)initLstLabels.size();
+
+       int x,y,z;
+       std::string label;
+
+       if ( (sizeX==sizeY) && (sizeX==sizeZ) )
+       {
+
+               for (i=0;i<sizeX;i++)
+               {
+                       x               = initLstPointsX[i];
+                       y               = initLstPointsY[i];
+                       z               = initLstPointsZ[i];
+                       if (i<sizeLabels) 
+                       {
+                               label   = initLstLabels[i];
+                       } else {
+                               label="";
+                       }
+                       AddPoint( x,y,z,label );
+               } // for i
+               //      SetOutputBox(); 
+               //      renderer->GetRenderWindow()->Render();
+
+       } // if size
+}
+//------------------------------------------------------------------------
+void WidgetShowNPoints::WidgetShowNPoints::SetType(int type)
+{
+       mtype=type;
+}
+
+//------------------------------------------------------------------------
+int WidgetShowNPoints::WidgetShowNPoints::GetType()
+{
+       return mtype;
+}
+
+
+//------------------------------------------------------------------------
+double WidgetShowNPoints::GetRadio()
+{
+       return sdrRadio->GetValue();
+}
+
+//------------------------------------------------------------------------
+double WidgetShowNPoints::GetOpacity()
+{
+       return mopacity;
+}
+
+