[vtkusers] findclosestpoint

Susi Schmalkalt Susanne.Schmalkalt at gmx.de
Tue Nov 26 13:29:24 EST 2013


Thanks. 
That did it! :)


Am 26.11.2013 um 18:04 schrieb Bill Lorensen:

> After
> marchingCubes->SetInput( imageData );
> do
> marchingCubes->Update();
> 
> On Tue, Nov 26, 2013 at 6:58 AM, Susi Schmalkalt
> <Susanne.Schmalkalt at gmx.de> wrote:
>> Dear David,
>> of course I am sure. I was building my example just like the one you have
>> posted. The only difference being the data I put in the filter.
>> I get the error: Access violation reading location 0x0000004c.
>> It seems as if the filter produces an empty output. I just can't see why.
>> Here is the code:
>> 
>> #define Instantiate(obj, class) vtkSmartPointer<class> obj =
>> vtkSmartPointer<class>::New();
>> 
>> int main (int argc, char *argv[]) {
>> 
>> // Read .mhd file
>> 
>> Instantiate(fileReader, vtkMetaImageReader);
>> 
>> const char filename[] = "./ID_1.mhd";
>> 
>> fileReader->SetFileName(filename);
>> 
>> fileReader->Update();
>> 
>> // Visualization
>> 
>> Instantiate(imageData, vtkImageData);
>> 
>> imageData = fileReader->GetOutput();
>> 
>> // Build 3d Object
>> 
>> Instantiate(marchingCubes,vtkMarchingCubes );
>> 
>> marchingCubes->SetValue(0,1);
>> 
>> marchingCubes->SetInput( imageData );
>> 
>> // Locator
>> 
>> Instantiate(pointLocator, vtkPointLocator);
>> 
>> pointLocator->SetDataSet(marchingCubes->GetOutput());
>> 
>> pointLocator->BuildLocator();
>> 
>> // Mapper
>> 
>> Instantiate(imageDataMapper,vtkPolyDataMapper);
>> 
>> imageDataMapper->ScalarVisibilityOff();
>> 
>> imageDataMapper->SetInput( marchingCubes->GetOutput() );
>> 
>> // Actor
>> 
>> Instantiate(actorImageDataActor,vtkActor);
>> 
>> actorImageDataActor->SetMapper( imageDataMapper );
>> 
>> 
>> double testPoint[3] = {100.0, 100.0, 100.0};
>> 
>> // Find the closest points to TestPoint
>> 
>> vtkIdType iD = pointLocator->FindClosestPoint(testPoint);
>> 
>> std::cout << "The closest point is point " << iD << std::endl;
>> 
>> //Get the coordinates of the closest point
>> 
>> double closestPoint[3];
>> 
>> pointLocator->GetDataSet()->GetPoint(iD, closestPoint);
>> 
>> std::cout << "Coordinates: " << closestPoint[0] << " " << closestPoint[1] <<
>> " " << closestPoint[2] << std::endl;
>> 
>> // actor for closest point
>> 
>> vtkSmartPointer<vtkActor> actCube3 = vtkSmartPointer<vtkActor>::New();
>> 
>> actCube3->SetMapper(mapCube);
>> 
>> actCube3->GetProperty()->SetColor(1, 0,0);
>> 
>> actCube3->SetPosition(closestPoint[0],closestPoint[1],closestPoint[2]);
>> 
>> // Renderer
>> 
>> Instantiate(renderer, vtkRenderer);
>> 
>> renderer->AddActor(actorImageDataActor);
>> 
>> renderer->AddActor(actCube3);
>> 
>> renderer->SetBackground(.9, .5, .0);
>> 
>> // RenderWindow
>> 
>> Instantiate(renderWindow, vtkRenderWindow);
>> 
>> renderWindow->AddRenderer(renderer);
>> 
>> // Interactor
>> 
>> Instantiate(renderWindowInteractor, vtkRenderWindowInteractor);
>> 
>> renderWindowInteractor->SetRenderWindow(renderWindow);
>> 
>> renderWindowInteractor->Initialize();
>> 
>> renderWindowInteractor->Start();
>> 
>> return EXIT_SUCCESS;
>> 
>> }
>> 
>> 
>> 
>> 
>> Am 25.11.2013 um 13:54 schrieb David Doria:
>> 
>> On Mon, Nov 25, 2013 at 7:09 AM, Susanne Schmalkalt
>> <Susanne.Schmalkalt at gmx.de> wrote:
>> 
>> Dear all,
>> 
>> 
>> I have a metaobject, which I read with vtkMetaImageReader. I then use
>> 
>> vtkMarchingContourFilter to extract its surface. Then I have a point A close
>> 
>> to this surface. How can I find the closest point to A on the surface? When
>> 
>> I use vtkPointLocator and findClosestPoint, I get a point that lies on the
>> 
>> outline of my metaobject, but not on the object itself.
>> 
>> Does anyone have an idea why this might be and how to solve it?
>> 
>> 
>> Thanks!
>> 
>> Susi
>> 
>> 
>> Are you sure you're calling FindClosestPoint on a locator created with
>> the output of the vtkMarchingContourFilter?
>> 
>> This example does what you're looking for (it should be the same once
>> you have a vtkPolyData as the output of the vtkMarchingContourFilter):
>> http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/CellLocator
>> 
>> David
>> 
>> 
>> 
>> _______________________________________________
>> Powered by www.kitware.com
>> 
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>> 
>> Please keep messages on-topic and check the VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>> 
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>> 
> 
> 
> 
> -- 
> Unpaid intern in BillsBasement at noware dot com
> _______________________________________________
> Powered by www.kitware.com
> 
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
> 
> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
> 
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers



More information about the vtkusers mailing list