[vtkusers] Get normal vector of the closest polydata cell to a given test point

M. Jordan mjordan at live.at
Wed Jan 11 07:50:16 EST 2017


Thank you very much!

The problem is that most of the points are on the surface. Therefore test point = closest point.
I only use the cellLocator to get the corresponding cell.

Now I try to get the normale vector of the whole cell (orientation of the cell).

Is there a way to get that vector?

________________________________
Von: Girish Lande <girish.lande at agiliad.com>
Gesendet: Mittwoch, 11. Jänner 2017 12:43
An: M. Jordan
Betreff: Re: [vtkusers] Get normal vector of the closest polydata cell to a given test point

Hi Jordan,

You can use vector between your test point and closest point as NORMAL vector.
Please see code snippet below.
normalizedX is output

double* pos = picker->GetPickPosition();

        double testPoint[3] = {pos[0],pos[1],pos[2]};

        //Find the closest points to TestPoint
        double closestPoint[3];//the coordinates of the closest point will be returned here
        double closestPointDist2; //the squared distance to the closest point will be returned here
        vtkIdType cellId; //the cell id of the cell containing the closest point will be returned here
        int subId; //this is rarely used (in triangle strips only, I believe)
        cellLocator->FindClosestPoint(testPoint, closestPoint, cellId, subId, closestPointDist2);

        std::cout << "Coordinates of closest point: " << closestPoint[0] << " " << closestPoint[1] << " " << closestPoint[2] << std::endl;
        std::cout << "Squared distance to closest point: " << closestPointDist2 << std::endl;
        std::cout << "CellId: " << cellId << std::endl;

        endPoint[0]=pos[0];
        endPoint[1]=pos[1];
        endPoint[2]=pos[2];
        startPoint[0]=closestPoint[0];
        startPoint[1]=closestPoint[1];
        startPoint[2]=closestPoint[2];

// Compute a basis
         double normalizedX[3];
         double normalizedY[3];
         double normalizedZ[3];

         // The X axis is a vector from start to end
         vtkMath::Subtract(endPoint, startPoint, normalizedX);
         double length = vtkMath::Norm(normalizedX);
         length=1;
         vtkMath::Normalize(normalizedX);

On 11 January 2017 at 16:32, M. Jordan <mjordan at live.at<mailto:mjordan at live.at>> wrote:

Hello,

i have a test point p[x,y,z] and a polydata.
I use vtkCellLocator to get the closest cell of the polydata to this point.

I get:
- the closest point
- the squared distance to the closest point
- cell ID

Now I want to get the normal vector of the cell. I know the cell ID but I don't know how to get the
normal vector from it.

Thank you!

_______________________________________________
Powered by www.kitware.com<http://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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers




--
thanks & regards,
Girish

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170111/a72bab30/attachment.html>


More information about the vtkusers mailing list