Bug in vtkVoxel.cxx, a great one ;-)
Alexander Prokop
prokop at temf.tu-darmstadt.de
Wed Jul 7 04:28:19 EDT 1999
Hi all,
Well, my streamlines still did not work correctly.
I found a Bug in vtkVoxel.cxx. That was a great one ;-)
I use VTK version 2.0, but the bug is still there in
version 2.2. I corrected the bug for 2.0 in the code below.
For the fixing see the comment CORRECTED
Dipl.-Ing. Alexander Prokop
Development Engineer
CST Computer Simulation Technology GmbH
Email: prokop at temf.tu-darmstadt.de
Web: http://www.cst.de
---------------------------------------------------------------------
int vtkVoxel::EvaluatePosition(float x[3], float closestPoint[3],
int& subId, float pcoords[3],
float& dist2, float *weights)
{
float *pt1, *pt2, *pt3, *pt4;
int i;
subId = 0;
//
// Get coordinate system
//
pt1 = this->Points.GetPoint(0);
pt2 = this->Points.GetPoint(1);
pt3 = this->Points.GetPoint(2);
pt4 = this->Points.GetPoint(4);
//
// Develop parametric coordinates
//
pcoords[0] = (x[0] - pt1[0]) / (pt2[0] - pt1[0]);
pcoords[1] = (x[1] - pt1[1]) / (pt3[1] - pt1[1]);
pcoords[2] = (x[2] - pt1[2]) / (pt4[2] - pt1[2]);
if ( pcoords[0] >= 0.0 && pcoords[0] <= 1.0 && // CORRECTED
pcoords[1] >= 0.0 && pcoords[1] <= 1.0 &&
pcoords[2] >= 0.0 && pcoords[2] <= 1.0 )
{
closestPoint[0] = x[0]; closestPoint[1] = x[1]; closestPoint[2] = x[2];
dist2 = 0.0; // inside voxel
this->InterpolationFunctions(pcoords,weights);
return 1;
}
else
{
float pc[3], w[8];
for (i=0; i<3; i++)
{
if (pcoords[i] < 0.0) pc[i] = 0.0;
else if (pcoords[i] > 1.0) pc[i] = 1.0;
else pc[i] = pcoords[i];
}
this->EvaluateLocation(subId, pc, closestPoint, (float *)w);
dist2 = vtkMath::Distance2BetweenPoints(closestPoint,x);
return 0;
}
}
-----------------------------------------------------------------------------
This is the private VTK discussion list. Please keep messages on-topic.
Check the FAQ at: <http://www.automatrix.com/cgi-bin/vtkfaq>
To UNSUBSCRIBE, send message body containing "unsubscribe vtkusers" to
<majordomo at gsao.med.ge.com>. For help, send message body containing
"info vtkusers" to the same address. Live long and prosper.
-----------------------------------------------------------------------------
More information about the vtkusers
mailing list