[vtkusers] findclosestpoint
    Susi Schmalkalt 
    Susanne.Schmalkalt at gmx.de
       
    Tue Nov 26 06:58:24 EST 2013
    
    
  
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20131126/db04e591/attachment.htm>
    
    
More information about the vtkusers
mailing list