[vtkusers] Closest point on a streamtube

Jeff Lee jeff at cdnorthamerica.com
Tue Aug 16 16:40:31 EDT 2005


Hi James,
Without getting into too much detail, there is a bug in vtkPointLocator 
which can potentially access a negative index into the Hashtable array 
(buckets) if there are points in the dataset which fall outside the 
bounds of the dataset.  I have been so busy that I haven't submitted a 
patch, but you can try this if you can't wait.

vtkPointLocator.cxx::BuildLocator() should look something like this (add 
the stuff in bold italics)

...
    idx = ijk[0] + ijk[1]*ndivs[0] + ijk[2]*product;
*/    if (idx > -1)
      { // make sure valid bucket id, negative if point outside
        // dataset bounds.../*
        bucket = this->HashTable[idx];
        if ( ! bucket )
          {
            bucket = vtkIdList::New();
            bucket->Allocate(this->NumberOfPointsPerBucket,
                             this->NumberOfPointsPerBucket/3);
            this->HashTable[idx] = bucket;
*/          }/*
        bucket->InsertNextId(i);
      }

...

James C Robinson wrote:

> Dear All,
>
>  
>
> I have a set of flow vectors associated with the points of an 
> unstructured grid. I use the following to create a stream tube:
>
>  
>
>  pStreamLine->SetInput(pUnstructuredGrid) ;   // vtkStreamTracer
>
>  pStreamTube->SetInput(pStreamLine->GetOutput()) ; // vtkTubeFilter
>
>  pStreamMapper->SetInput(pStreamTube->GetOutput()) ; // vtkPolyDataMapper
>
>  pStreamActor->SetMapper(pStreamMapper);                 // vtkActor
>
>  
>
> At any given time I wish to find the closest point in the stream tube 
> (say the closest point in the underlying polyline of the stream 
> tracer) to the camera (in order to keep the radius of the stream tube 
> fairly constant on the screen). To this end I do the following:
>
>  
>
>             vtkDataSet* pDataSet = 
> (vtkDataSet*)((pStreamLine->GetOutput())->GetPoints()) ;
>
>             pClosestStreamPointLocator->SetDataSet(pDataSet) ;  // 
> vtkPointLocator
>
>             pClosestStreamPointLocator->AutomaticOn() ;
>
>             pClosestStreamPointLocator->BuildLocator() ;
>
>  
>
> I then use
>
>             pClosestStreamPointLocator->BuildLocator() ; // In case 
> the stream tube has changed since the locator was last updated.
>
> pClosestStreamPointLocator->FindClosestPoint(camPos) ; // Where camPos 
> is a float[3] array.
>
>  
>
> when I wish to find the closest point. However, it causes a crash. I 
> am obviously doing something pretty simple wrong. Please advise.......
>
>  
>
>  
>
> Jim
>
>  
>
> *James C Robinson**, *
>
> *+**    42 Rivergrove**,***
>
> *         **Glanmire**,***
>
> *         **Co. **Cork,*
>
> *         **Eire*
>
> *'**     +353 21 4822028*
>
> *         +353 87 2393010*
>
> *-**    jrobinson at eircom.net <mailto:jrobinson at eircom.net>> 
> <mailto:jrobinson at eircom.net> *
>
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>This is the private VTK discussion list. 
>Please keep messages on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>Follow this link to subscribe/unsubscribe:
>http://www.vtk.org/mailman/listinfo/vtkusers
>  
>

-- 
Jeff Lee
Senior Software Engineer
Computational Dynamics North America Ltd
21 Lafayette Street, Suite 230
Lebanon NH 03766 USA
fax:   603 643 9994
phone: 603 643 9993 x109
http://www.cd-adapco.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20050816/8ac3d58b/attachment.htm>


More information about the vtkusers mailing list