[vtkusers] Number of points in a KdTree?
David Doria
daviddoria+vtk at gmail.com
Mon Nov 2 21:13:50 EST 2009
On Fri, Oct 30, 2009 at 12:26 PM, David Doria <daviddoria+vtk at gmail.com> wrote:
> On Mon, Oct 26, 2009 at 4:53 PM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
>> The purpose of BuildLocatorFromPoints is described in the header. I
>> suspect that if you use this method, you cannot get the information
>> that you want.
>>
>> // For the purpose of removing duplicate points quickly from large
>> // data sets, or for finding nearby points, we added another mode for
>> // building the locator. BuildLocatorFromPoints will build a k-d tree
>> // from one or more vtkPoints objects. This can be followed by
>> // BuildMapForDuplicatePoints which returns a mapping from the original
>> // ids to a subset of the ids that is unique within a supplied
>> // tolerance, or you can use FindPoint and FindClosestPoint to
>> // locate points in the original set that the tree was built from.
>>
>> On Mon, Oct 26, 2009 at 4:40 PM, David Doria <daviddoria+vtk at gmail.com> wrote:
>>> On Mon, Oct 26, 2009 at 4:34 PM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
>>>> I think the problem is that there is not a dataset associated with the
>>>> kdtree if you build it from points.
>>>>
>>>> If you build it from a dataset, there will probably be a dataset.
>>>>
>>>> Just a guess...
>
>
> Trying to build the tree from a dataset:
>
> vtkSmartPointer<vtkPoints> Points = vtkSmartPointer<vtkPoints>::New();
> Points->InsertNextPoint(0.0, 0.0, 0.0);
> Points->InsertNextPoint(1.0, 0.0, 0.0);
> Points->InsertNextPoint(0.0, 1.0, 0.0);
>
> //get the number of points the file contains
> vtkIdType NumPoints = Points->GetNumberOfPoints();
> vtkstd::cout << "There are " << NumPoints << " points." << vtkstd::endl;
>
> vtkSmartPointer<vtkPolyData> Polydata = vtkSmartPointer<vtkPolyData>::New();
> Polydata->SetPoints(Points);
>
> //Create the tree
> vtkSmartPointer<vtkKdTree> KDTree = vtkSmartPointer<vtkKdTree>::New();
> KDTree->AddDataSet(Polydata);
> KDTree->BuildLocator();
>
> vtkstd::cout << "Number of points in tree: " <<
> KDTree->GetDataSets()->GetNextDataSet()->GetNumberOfPoints() <<
> vtkstd::endl;
>
> I get an error "No cells to subdivide". Does that mean I have to
> create vertices for my points before calling BuildLocator()?
>
> Thanks,
>
> David
>
Indeed vertices are required. An example of building a KDTree properly
and accessing its data is here:
http://www.vtk.org/Wiki/Create_a_KDTree
Thanks,
David
More information about the vtkusers
mailing list