[vtk-developers] Bugs in vtkWedge

John Platt jcplatt at dsl.pipex.com
Sat May 13 18:17:37 EDT 2006


Hi François,

It would be nice if VTK could tolerate 3D cells which are "inside out".
By this I mean cells with a negative Jacobian (no sign change over the
cell volume). This may give you more flexibility in addressing these
consistency issues.

John.

-----Original Message-----
From: vtk-developers-bounces+jcplatt=dsl.pipex.com at vtk.org
[mailto:vtk-developers-bounces+jcplatt=dsl.pipex.com at vtk.org] On Behalf
Of Francois Bertel
Sent: 12 May 2006 21:09
To: vtk-developers at vtk.org
Subject: Re: [vtk-developers] Bugs in vtkWedge

I agree it would be better to have consistent ordering with other kind
of cells. However, if we change the ordering of points we will break
compatibility across VTK versions and therefore with existing files or
current VTK users' code.

Any other opinion is welcome.

Tadeu Manoel wrote:
> François,
> 
>   I checked the code in vtkWedge.cxx in VTK 4.2 and 5.0.0, and the
> EvaluatePosition bug still happens exchanging the triangles!
> 
>   I'm sorry about the faces, I was confused because it seems the
> description of a wedge has changed since  VTK 4.2. There in vtkWedge.h
> it said:
> 
> // vtkWedge is a concrete implementation of vtkCell to represent a
linear 3D
> // wedge. A wedge consists of two triangular and three quadrilateral
faces
> // and is defined by the six points (0-5). vtkWedge uses the standard
> // isoparametric shape functions for a linear pyramid. The pyramid is
> defined
> // by the six points (0-5) where (0,1,2) is the base of the wedge
which,
> // using the right hand rule, forms a triangle whose normal points in
> // the direction of the opposite triangular face (3,4,5).
> 
>   To confuse even more, Mathieu Malaterre already said next version of
> the book would be updated to the 4.2 definition! (
>
http://public.kitware.com/pipermail/vtk-developers/2006-February/004004.
html
> ) So I thought this would be the "correct" definition.
>   The way it was in 4.2, it seemed consistent with hexas (base quad
face
> poins towards opposite quad face) and pyras (base quad face points
> towards opposite vertex).
> 
> On 5/12/06, *Francois Bertel* <francois.bertel at kitware.com
> <mailto:francois.bertel at kitware.com>> wrote:
> 
>     Hi Tadeu,
> 
>     The description of the vtkWedge class says:
> 
>     "(0,1,2) is the base of the wedge which, using the right hand
rule,
>     forms a triangle whose normal points outward (away from the
>     triangular face (3,4,5)"
> 
>     I agree it is different from other cells but the description
itself
>     match the implementation. so GetFaceArray() is fine.
>     Also  in the VTK text book, normal of 0-1-2  points toward the
>     exterior and normal of 3-4-5 points toward face 0-1-2, so the face
>     such that the normal points
>     toward the exterior is 3-5-4.
> 
>     The example you gave, according to this description is wrong
because
>     obviously the normal of the first face you defined points toward
the
>     other face.
> 
>     Try thoses points instead:
> 
>     (8,0,8), (16,0,8), (16,8,8) (8,0,0), (16,0,0), (16,8,0)
> 
>     and tells us if EvaluatePosition() stills return true.
> 
>     I'm talking about VTK CVS.
>     Which version of VTK are you talking about? I don't see the piece
of
>     you mentioned in EvaluatePosition() in VTK CVS.
> 
>     Regards.
> 
>     Tadeu Manoel wrote:
>     > There is a bug in vtkWedge::EvaluatePosition, it can tell a
point is
>     > inside when in reality it is outside.
>     >
>     > E.g, try to create a vtkWedge with the following points:
>     > (8,0,0), (16,0,0), (16,8,0), (8,0,8), (16,0,8), (16,8,8)
>     >
>     > And try to EvaluatePosition for point (17,6,4). It will return
1,
>     > telling it is inside.
>     >
>     > A solution is to change the following code:
>     >
>     >   if ( pcoords[0] >= -0.001 && pcoords[0] <= 1.001 &&
>     >   pcoords[1] >= -0.001 && pcoords[1] <= 1.001 &&
>     >   pcoords[2] >= -0.001 && pcoords[2] <= 1.001 )
>     >
>     > To:
>     >
>     >    if ( pcoords[0] >= -0.001 && pcoords[1] >= -0.001 &&
>     >        (pcoords[0] + pcoords[1]) <= 1.001 &&
>     >         pcoords[2] >= -0.001 && pcoords[2] <= 1.001 )
>     >
>     >
>     >
>     > There is another bug in its faces array (and with GetFace and
>     GetFaceArray):
>     > The faces normals are pointing inside, instead of outside (as of
all
>     > other 3D cells).
>     > Instead of:
>     >
>     > static int faces[5][4] = { {0,1,2,-1}, {3,5,4,-1},
>     >                            {0,3,4,1}, {1,4,5,2}, {2,5,3,0} };
>     >
>     > It should be:
>     >
>     > static int faces[5][4] = { {0,2,1,-1}, {3,4,5,-1},
>     >                            {0,1,4,3}, {1,2,5,4}, {2,0,3,5} };
>     >
>     >
>     >
>     > --
>     > Edson Tadeu M. Manoel
>     > ESSS - Engineering Simulation and Scientific Software
>     > http://www.esss.com.br
> 
> 
> 
> --
> Edson Tadeu M. Manoel
> ESSS - Engineering Simulation and Scientific Software
> http://www.esss.com.br <http://www.esss.com.br>
> 
> 
>
------------------------------------------------------------------------
> 
> _______________________________________________
> vtk-developers mailing list
> vtk-developers at vtk.org
> http://www.vtk.org/mailman/listinfo/vtk-developers


-- 
François Bertel, PhD  | Kitware Inc. Suite 204
1 (518) 371 3971 x113 | 28 Corporate Drive
                      | Clifton Park NY 12065, USA
_______________________________________________
vtk-developers mailing list
vtk-developers at vtk.org
http://www.vtk.org/mailman/listinfo/vtk-developers





More information about the vtk-developers mailing list