<html>
<head>
</head>
<body>
<div class="moz-text-flowed" style="font-family: Courier New; font-size: 13px; ">
Hi George, <br>
<br>
my guess is that the problem arises because you redefine the vtkPoints-array 
<br>
( points = vtkPoints::New() ) each time the user selects a point. <br>
<br>
Steffen <br>
<br>
George Kamucha wrote: <br>
<br>
<blockquote type="cite">Hi, <br>
I posted the following question sometimes back, got no response and am <br>
trying once more, <br>
hoping and hoping to get a response........ <br>
  <br>
I am trying to use vtkSelectPolyData&nbsp; to select a part of&nbsp; my surface <br>
data using a loop. To define the loop, I am <br>
selecting points on a surface using vtkPointPicker, and then placing <br>
small spheres in the selected locations. The locations <br>
of the picked points are stored in vtkPoints and used in defining the <br>
loop. But it is simply not working! When I <br>
check the points stored in the vtkPoints, I find that only the last <br>
picked point is valid, the others don't make any <br>
sense at all. Below is the snippet (to stop picking, I pick three times <br>
outside the surface data).&nbsp; Anybody with an idea on this? <br>
  <br>
  <br>
Best regards <br>
George. <br>
  <br>
#include "vtkPolyDataReader.h" <br>
#include "vtkPolyDataMapper.h" <br>
#include "vtkRenderer.h" <br>
#include "vtkRenderWindow.h" <br>
#include "vtkRenderWindowInteractor.h" <br>
#include "vtkActor.h" <br>
#include "vtkPointPicker.h" <br>
#include "vtkSphereSource.h" <br>
#include "vtkGlyph3D.h" <br>
#include "vtkSelectPolyData.h" <br>
#include "vtkClipPolyData.h" <br>
#include&nbsp; &lt;stdio.h&gt; <br>
#include&nbsp; &lt;ctype.h&gt; <br>
#include&nbsp; &lt;iostream.h&gt; <br>
  <br>
  <br>
static void pickControl(void *); <br>
static vtkRenderer *ren1; <br>
static vtkRenderWindow *renWin; <br>
static vtkPoints *points; <br>
static int n, p; <br>
vtkPolyDataReader *reader; <br>
  <br>
void main( int argc, char *argv[] ) <br>
  <br>
{ <br>
  <br>
n=0; <br>
p=0; <br>
  <br>
//Load the original Laser surface data LaserNewd.vtk <br>
reader = vtkPolyDataReader::New(); <br>
&nbsp;&nbsp;&nbsp;&nbsp; reader-&gt;SetFileName ("../../../vtkdata/LaserNewd.vtk"); <br>
&nbsp;&nbsp;&nbsp;&nbsp; reader-&gt;Update(); <br>
  <br>
vtkPolyDataMapper *dataMapper = vtkPolyDataMapper::New(); <br>
&nbsp;&nbsp;&nbsp;&nbsp; dataMapper-&gt;SetInput(reader-&gt;GetOutput()); <br>
&nbsp;&nbsp;&nbsp;&nbsp; dataMapper-&gt;ScalarVisibilityOff(); <br>
  <br>
vtkActor *dataActor = vtkActor::New(); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataActor-&gt;SetMapper(dataMapper); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataActor-&gt;GetProperty()-&gt;SetColor(1, 1, 0); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataActor-&gt;GetProperty()-&gt;SetOpacity(0.5); <br>
  <br>
vtkPointPicker *pointpicker = vtkPointPicker::New(); <br>
  <br>
  <br>
ren1 = vtkRenderer::New(); <br>
renWin = vtkRenderWindow::New(); <br>
&nbsp;&nbsp; renWin-&gt;AddRenderer(ren1); <br>
&nbsp;vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); <br>
&nbsp;&nbsp; iren-&gt;SetRenderWindow(renWin); <br>
&nbsp;&nbsp; iren-&gt;SetPicker(pointpicker); <br>
&nbsp;&nbsp; iren-&gt;SetEndPickMethod(pickControl, (void *)iren); <br>
  <br>
ren1-&gt;AddActor(dataActor); <br>
  <br>
// render the image <br>
&nbsp;&nbsp; ren1-&gt;SetBackground(1, 1, 1); <br>
&nbsp;&nbsp; renWin-&gt;SetSize(500,500); <br>
&nbsp;&nbsp; iren-&gt;Initialize(); <br>
&nbsp;&nbsp; renWin-&gt;Render(); <br>
&nbsp;&nbsp; iren-&gt;Start(); <br>
  <br>
//Clean up <br>
  <br>
ren1-&gt;Delete(); <br>
renWin-&gt;Delete(); <br>
iren-&gt;Delete(); <br>
//reader-&gt;Delete(); <br>
dataMapper-&gt;Delete(); <br>
dataActor-&gt;Delete(); <br>
pointpicker-&gt;Delete(); <br>
  <br>
} <br>
  <br>
  <br>
  <br>
// Define picking method <br>
static void pickControl(void *arg) <br>
{ <br>
float *selPt; <br>
float *pickpos; <br>
float *pc; <br>
int i; <br>
  <br>
  <br>
  <br>
  <br>
vtkRenderWindowInteractor *iren = (vtkRenderWindowInteractor *)arg; <br>
&nbsp;vtkPointPicker *pointpicker = (vtkPointPicker *)iren-&gt;GetPicker(); <br>
  <br>
  <br>
  <br>
&nbsp;selPt = pointpicker-&gt;GetSelectionPoint(); <br>
  <br>
&nbsp;&nbsp; cout&lt;&lt;"Screen location:"&lt;&lt;selPt[0]&lt;&lt;" "&lt;&lt;selPt[1]&lt;&lt;"\n"; 
  <br>
  <br>
  <br>
  <br>
if ( pointpicker-&gt;GetPointId() &gt;= 0 ) <br>
&nbsp;&nbsp; { <br>
&nbsp;&nbsp; p = p+1; //count number of points picked <br>
&nbsp;&nbsp; pickpos = pointpicker-&gt;GetPickPosition(); <br>
  <br>
&nbsp;&nbsp; cout&lt;&lt;"Point location:"&lt;&lt;pickpos[0]&lt;&lt;" "&lt;&lt;pickpos[1]&lt;&lt;" 
  <br>
"&lt;&lt;pickpos[2]&lt;&lt;"\n"; <br>
  <br>
  <br>
  <br>
  <br>
//Define method for placing spheres <br>
points=vtkPoints::New(); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; points-&gt; InsertNextPoint(pickpos); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; points-&gt; Modified(); <br>
  <br>
vtkPolyData *profile=vtkPolyData::New(); <br>
&nbsp; profile-&gt;SetPoints(points); <br>
  <br>
vtkSphereSource *sphere=vtkSphereSource::New(); <br>
&nbsp;sphere-&gt;SetRadius(2); <br>
  <br>
vtkGlyph3D *glyph=vtkGlyph3D::New(); <br>
&nbsp;&nbsp; glyph-&gt;SetInput(profile); <br>
&nbsp;&nbsp; glyph-&gt;SetSource(sphere-&gt;GetOutput()); <br>
  <br>
vtkPolyDataMapper *glyphMapper=vtkPolyDataMapper::New(); <br>
&nbsp;&nbsp;&nbsp; glyphMapper-&gt;SetInput(glyph-&gt;GetOutput()); <br>
  <br>
  <br>
vtkActor *glyphActor=vtkActor::New(); <br>
&nbsp;glyphActor-&gt;SetMapper(glyphMapper); <br>
&nbsp;glyphActor-&gt;GetProperty()-&gt;SetColor(1, 0, 0); //Set colour to red <br>
  <br>
ren1-&gt; AddActor(glyphActor); <br>
  <br>
renWin-&gt;Render(); <br>
  <br>
  <br>
//points-&gt; Delete(); <br>
profile-&gt;&nbsp; Delete(); <br>
sphere-&gt;&nbsp; Delete(); <br>
glyph-&gt;&nbsp; Delete(); <br>
glyphMapper-&gt;&nbsp; Delete(); <br>
glyphActor-&gt;&nbsp; Delete(); <br>
  <br>
  <br>
&nbsp; } <br>
&nbsp; else&nbsp;&nbsp; if ( pointpicker-&gt;GetPointId() &lt; 0 ) <br>
&nbsp; { <br>
  <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"No point picked here!"&lt;&lt;"\n"; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n=n+1; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"n" &lt;&lt;n&lt;&lt;"\n"; <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (n &gt;=3) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"Selection completed!"&lt;&lt;"\n"; <br>
  <br>
  <br>
// check the picked points, stored in vtkPoints <br>
&nbsp;&nbsp;&nbsp; for (i=0; i&lt;p; i++) <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc = points-&gt;GetPoint(i); <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"point:"&lt;&lt;pc[0]&lt;&lt;" "&lt;&lt;pc[1]&lt;&lt;"
"&lt;&lt;pc[2]&lt;&lt;"\n";//See <br>
components points <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>
  <br>
  <br>
  <br>
vtkSelectPolyData *loop = vtkSelectPolyData::New(); <br>
&nbsp;&nbsp; loop-&gt;SetInput(reader-&gt;GetOutput()); <br>
&nbsp;&nbsp; loop-&gt;SetLoop(points); <br>
&nbsp;&nbsp; loop-&gt;GenerateSelectionScalarsOn(); <br>
&nbsp;&nbsp; loop-&gt;SetSelectionModeToSmallestRegion(); //negative scalars inside 
  <br>
vtkClipPolyData *clip = vtkClipPolyData::New(); //clips out positive <br>
region <br>
&nbsp;&nbsp; clip-&gt;SetInput(loop-&gt;GetOutput()); <br>
vtkPolyDataMapper *clipMapper = vtkPolyDataMapper::New(); <br>
&nbsp;&nbsp; clipMapper-&gt;SetInput(clip-&gt;GetOutput()); <br>
vtkActor *clipActor = vtkActor::New(); <br>
&nbsp;&nbsp; clipActor-&gt;SetMapper(clipMapper); <br>
&nbsp;&nbsp; clipActor-&gt;AddPosition(1, 0, 0); <br>
&nbsp;&nbsp; clipActor-&gt;GetProperty()-&gt;SetColor(0, 0, 1); //Set colour blue <br>
  <br>
ren1-&gt;AddActor(clipActor); <br>
renWin-&gt;Render(); <br>
  <br>
  <br>
reader-&gt;Delete(); <br>
points-&gt; Delete(); <br>
loop-&gt;Delete(); <br>
clip-&gt;Delete(); <br>
clipMapper-&gt;Delete(); <br>
clipActor-&gt;Delete(); <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>
  <br>
&nbsp;} <br>
  <br>
} <br>
  <br>
  <br>
  <br>
  <br>
_______________________________________________ <br>
This is the private VTK discussion list.  Please keep messages on-topic.
Check the FAQ at: <a class="moz-txt-link-rfc2396E" href="http://public.kitware.com/cgi-bin/vtkfaq">
&lt;http://public.kitware.com/cgi-bin/vtkfaq&gt;</a>
  <br>
Follow this link to subscribe/unsubscribe: <br>
  <a class="moz-txt-link-freetext" href="http://public.kitware.com/mailman/listinfo/vtkusers">
http://public.kitware.com/mailman/listinfo/vtkusers</a>
  <br>
  <br>
  </blockquote>
  <br>
  <br>
  </div>
  </body>
  </html>