[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