void WidgetShowNPoints::InsertPoint(int x, int y, int z, std::string label)//CFT
{
std::cout<<"WidgetShowNPoints::InsertPoint begin "<<std::endl;
- std::vector<int> dTotal;
- int pos = 0;
- int a,b,res;
- //Calcule distance for each pair of points
- for(int i = 0; i<lstPointsX.size()-1 ; i++)
- {
- a = Distance(x, y, z, lstPointsX[i], lstPointsY[i], lstPointsZ[i]);
- b = Distance(x, y, z, lstPointsX[i+1], lstPointsY[i+1], lstPointsZ[i+1]);
- res = a + b;
- dTotal.push_back (res);
- }
- //Gets the smallest distance
- int small = dTotal[0];
- for (int j = 0; j < dTotal.size(); j++)
- {
- if(dTotal[j]<small)
- {
- small=dTotal[j];
- pos = j+1;
- }
- }
-
- std::vector<int>::iterator it;
- //Insert the point in the list of points
- it = lstPointsX.begin();
- lstPointsX.insert( it+pos, x );
- it = lstPointsY.begin();
- lstPointsY.insert( it+pos, y );
- it = lstPointsZ.begin();
- lstPointsZ.insert( it+pos, z );
- std::string strLabel = CleanSpaces( label );
+ if(lstPointsX.size()>1)
+ {
+ std::vector<int> dTotal;
+ int pos = 1;
+ int a,b,res;
+
+ //Calcule distance for each pair of points
+ for(int i = 0; i<lstPointsX.size()-1 ; i++)
+ {
+ a = Distance(x, y, z, lstPointsX[i], lstPointsY[i], lstPointsZ[i]);
+ b = Distance(x, y, z, lstPointsX[i+1], lstPointsY[i+1], lstPointsZ[i+1]);
+ res = a + b;
+ dTotal.push_back (res);
+ }
+ //Gets the smallest distance
+ int small = dTotal[0];
+ for (int j = 0; j < dTotal.size(); j++)
+ {
+ if(dTotal[j]<small)
+ {
+ small=dTotal[j];
+ pos = j+1;
+ }
+ }
+
+ std::vector<int>::iterator it;
+ //Insert the point in the list of points
+ it = lstPointsX.begin();
+ lstPointsX.insert( it+pos, x );
+ it = lstPointsY.begin();
+ lstPointsY.insert( it+pos, y );
+ it = lstPointsZ.begin();
+ lstPointsZ.insert( it+pos, z );
+
+ std::string strLabel = CleanSpaces( label );
- std::vector<std::string>::iterator itS;
- itS = lstLabels.begin();
- //Insert Label in list of labels
- lstLabels.insert( itS+pos, strLabel );
-
- // Sphere
- vtkSphereSource *vtksphere = vtkSphereSource::New();
- vtksphere->SetThetaResolution (20);
- vtksphere->SetPhiResolution (20);
- vtksphere->SetRadius( mradio );
-
- //NTU: For updating points
- std::vector<vtkSphereSource*>::iterator itSS;
- itSS = lstSourceSphere.begin();
- lstSourceSphere.insert( itSS+pos, vtksphere);
-
- vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New();
- sphereMapper->SetInput( vtksphere->GetOutput() );
- vtkActor *sphereActor = vtkActor::New();
- sphereActor->SetMapper(sphereMapper);
- sphereActor->SetOrigin(0, 0, 0);
-
- std::vector<vtkActor*>::iterator itAS;
- itAS = lstActorsSphere.begin();
- lstActorsSphere.insert( itAS+pos, sphereActor);
- if(renderer==NULL){
- wxMessageDialog dialog(this, _T("Renderer Not Set"),_T("Renderer Not Set"),wxICON_ERROR);
- dialog.ShowModal();
- return;
- }
- renderer->AddActor( sphereActor );
+ std::vector<std::string>::iterator itS;
+ itS = lstLabels.begin();
+ //Insert Label in list of labels
+ lstLabels.insert( itS+pos, strLabel );
+
+ // Sphere
+ vtkSphereSource *vtksphere = vtkSphereSource::New();
+ vtksphere->SetThetaResolution (20);
+ vtksphere->SetPhiResolution (20);
+ vtksphere->SetRadius( mradio );
+
+ //NTU: For updating points
+ std::vector<vtkSphereSource*>::iterator itSS;
+ itSS = lstSourceSphere.begin();
+ lstSourceSphere.insert( itSS+pos, vtksphere);
+
+ vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New();
+ sphereMapper->SetInput( vtksphere->GetOutput() );
+ vtkActor *sphereActor = vtkActor::New();
+ sphereActor->SetMapper(sphereMapper);
+ sphereActor->SetOrigin(0, 0, 0);
+
+ std::vector<vtkActor*>::iterator itAS;
+ itAS = lstActorsSphere.begin();
+ lstActorsSphere.insert( itAS+pos, 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();
+ // Actor
+ vtkTextActor3D *textActor = vtkTextActor3D::New();
- textActor->SetInput( strLabel.c_str() );
- renderer->AddActor( textActor );
- std::vector<vtkTextActor3D*>::iterator itTA;
- itTA = lstActorsText.begin();
- lstActorsText.insert( itTA+pos , textActor);
+ textActor->SetInput( strLabel.c_str() );
+ renderer->AddActor( textActor );
+ std::vector<vtkTextActor3D*>::iterator itTA;
+ itTA = lstActorsText.begin();
+ lstActorsText.insert( itTA+pos , textActor);
- RefreshPoint(pos);
+ RefreshPoint(pos);
+ }//end if
std::cout<<"WidgetShowNPoints::InsertPoint end"<<std::endl;
}