[vtkusers] findclosestpoint
Bill Lorensen
bill.lorensen at gmail.com
Tue Nov 26 12:04:42 EST 2013
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
More information about the vtkusers
mailing list