[vtkusers] vrkCellLocator intersectWithLine() seldomly outputing wrong values

sebastien MARAUX maraux at ondim.fr
Tue Dec 31 09:26:56 EST 2002


hello, happy new year !

(sorry for 12kb attached pieces, it can help understand my problem)

I saw in the mailing list archive a bug with vtkCellLocator
IntersectWithLine.
has it been fixed ? (cf
http://public.kitware.com/pipermail/vtkusers/2001-September/007757.html )

I got some strange output with it but really seldomly.

I am using vtkCellLocator to find height of a specific
point on a triangulated digital elevation model.

So I build cellLocator with the DEM polyData as input
(DEM is imported in VRML format, so I named it vrmlPolyData):

//-------------------------------------------snip
begins-----------------------------------------------
     float a0[3], a1[3], x[3], pcoords[3];

   // pour trouver selon (x,y) une coordonnée z du mnt trianguler
   vtkCellLocator *cellLocator = vtkCellLocator::New();
   cellLocator->SetDataSet(vrmlPolyData);
   cellLocator->CacheCellBoundsOn();
   cellLocator->SetTolerance(0.0);
   cellLocator->AutomaticOn();
   cellLocator->BuildLocator();

//----------------------------------------snip
ends--------------------------------------------------

Then I loop for each point of a poly I want to map on DEM,
retrieving each point height data with interscetwithline()

//--------------------------------------snip
begins---------------------------------------------------
   vtkPoints *validHeightedPoints = vtkPoints::New();

   // add height component to points of poly
   for (i=0;i<mp_PolyData->GetNumberOfPoints();i++) {
    mp_PolyData->GetPoint(i,myPoint);
    // recherche de l'altitude y :
    float t;
    int subId;

    // in VRML file y = height
    a0[0]=myPoint[0];
    a0[1]=myPoint[1];
    a0[2]=FLT_MIN;

    a1[0]=myPoint[0];
    a1[1]=myPoint[1];
    a1[2]=FLT_MAX;

    // ray cast to get height of MNT back in this point
    // in polydata z=height
    cellLocator->IntersectWithLine(a0,a1,0.0,t,x,pcoords,subId);
    myPoint[2]=x[2];
    mp_PolyData->GetPoints()->SetPoint(i,myPoint);
    validHeightedPoints->InsertNextPoint(myPoint);
   }
   mp_PolyData->SetPoints(validHeightedPoints);

file://----------------------------------snip
ends----------------------------------------------------

Surprisingly, this does not output always the height of the DEM,
even if tolerance is set to 0.

Have you any idea about that?

Take a look at the 2 screenshots representing my terrain, and the poly
which should be mapped on it. (polygon data has been zoomed)

If main heights of poygon data is OK (kind of V form for the main object,
because it is almost on 2 DEM faces only)
you can see some weird up and down foldings. in the middle of the object,
which are not from initial DEM.

Thank you

Seb
-------------- next part --------------
A non-text attachment was scrubbed...
Name: polygon_data.jpg
Type: image/jpeg
Size: 4038 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20021231/8fbe1b18/attachment.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DEM_data.gif
Type: image/gif
Size: 8144 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20021231/8fbe1b18/attachment.gif>


More information about the vtkusers mailing list