<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
  <title></title>
</head>
<body>
I can give you a practical example. The two attached poly data files contain<br>
two faces each: a quadrilateral and a triangle. The points in testPolydata07.vtk<br>
have integer coordinates, and those from testPolydata08.vtk were obtained<br>
by multiplying each point with 3/25. <br>
<br>
The coordinates of the points in the vtkPolyData created by reading these<br>
files differ from those on files by more than 10^(-8). Due to this fact the<br>
volume of the tetrahedron is of order 10^(-9). The following code snippet<br>
allows you to see this, if you run it in debug mode and insert a breakpoint
at <br>
the last sentence:<br>
<br>
&nbsp;&nbsp;&nbsp;<i> vtkPolyDataReader* reader = vtkPolyDataReader::New();<br>
&nbsp;&nbsp;&nbsp; polyData = vtkPolyData::New();<br>
<br>
&nbsp;&nbsp;&nbsp; reader-&gt;SetFileName("testPolydata08.vtk");<br>
&nbsp;&nbsp;&nbsp; vtkPolyData* readData = reader-&gt;GetOutput();<br>
&nbsp;&nbsp;&nbsp; readData-&gt;Update();<br>
<br>
&nbsp;&nbsp;&nbsp; vtkCell* cell = readData-&gt;GetCell(0);<br>
&nbsp; &nbsp; bool planar = true;<br>
&nbsp;&nbsp;&nbsp; if (cell-&gt;GetCellType()==VTK_QUAD)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vtkPoints *cellPoints = cell-&gt;GetPoints();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double vertices[4][3];<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i=0; i&lt;4; i++)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double *aVert = cellPoints-&gt;GetPoint(i);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; memcpy(vertices[i], aVert, 3*sizeof(double));<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double vol = vtkTetra::ComputeVolume(vertices[0], vertices[1], vertices[2],
vertices[3]);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if (abs(vol)&gt;1.0e-10)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; planar = false;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }</i><br>
<br>
Of course, I am not urging you to try this out.<br>
<br>
My theory is that reading is done in float, and the vtkPolyData arithmetic<br>
is in double; when storing the read points to the vtkPolyData points, the
latter<br>
are not initialized with 0 and some residual non-zero digits of small order
<br>
are preserved.<br>
<br>
For some real-life examples, the errors are even bigger (10^(-6)); you can
imagine<br>
the influence of these errors to precision-sensible computations... <br>
<br>
For the moment, I see no way to eliminate this effect.<br>
<br>
Petru<br>
</body>
</html>