[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