Added EdgeBarycentricToFaceBarycentric to convert an edge position into a face barycentric position

This commit is contained in:
Paolo Cignoni 2013-06-24 07:31:11 +00:00
parent 5049407069
commit 49d759af2a
1 changed files with 35 additions and 26 deletions

View File

@ -42,6 +42,7 @@ class UpdateTopology
public:
typedef UpdateMeshType MeshType;
typedef typename MeshType::ScalarType ScalarType;
typedef typename MeshType::VertexType VertexType;
typedef typename MeshType::VertexPointer VertexPointer;
typedef typename MeshType::VertexIterator VertexIterator;
@ -63,39 +64,47 @@ class PEdge
{
public:
VertexPointer v[2]; // the two Vertex pointer are ordered!
FacePointer f; // the face where this edge belong
int z; // index in [0..2] of the edge of the face
VertexPointer v[2]; // the two Vertex pointer are ordered!
FacePointer f; // the face where this edge belong
int z; // index in [0..2] of the edge of the face
PEdge() {}
void Set( FacePointer pf, const int nz )
{
assert(pf!=0);
assert(nz>=0);
assert(nz<pf->VN());
void Set( FacePointer pf, const int nz )
{
assert(pf!=0);
assert(nz>=0);
assert(nz<pf->VN());
v[0] = pf->V(nz);
v[1] = pf->V(pf->Next(nz));
assert(v[0] != v[1]); // The face pointed by 'f' is Degenerate (two coincident vertexes)
v[0] = pf->V(nz);
v[1] = pf->V(pf->Next(nz));
assert(v[0] != v[1]); // The face pointed by 'f' is Degenerate (two coincident vertexes)
if( v[0] > v[1] ) math::Swap(v[0],v[1]);
f = pf;
z = nz;
}
if( v[0] > v[1] ) math::Swap(v[0],v[1]);
f = pf;
z = nz;
}
inline bool operator < ( const PEdge & pe ) const
{
if( v[0]<pe.v[0] ) return true;
else if( v[0]>pe.v[0] ) return false;
else return v[1] < pe.v[1];
}
inline bool operator == ( const PEdge & pe ) const
{
return v[0]==pe.v[0] && v[1]==pe.v[1];
}
inline bool operator < ( const PEdge & pe ) const
{
if( v[0]<pe.v[0] ) return true;
else if( v[0]>pe.v[0] ) return false;
else return v[1] < pe.v[1];
}
inline bool operator == ( const PEdge & pe ) const
{
return v[0]==pe.v[0] && v[1]==pe.v[1];
}
/// Convert from edge barycentric coord to the face baricentric coord a point on the current edge.
/// Face barycentric coordinates are relative to the edge face.
inline Point3<ScalarType> EdgeBarycentricToFaceBarycentric(ScalarType u) const
{
Point3<ScalarType> interp(0,0,0);
interp[ this->z ] = u;
interp[(this->z+1)%3] = 1.0f-u;
return interp;
}
};
// Fill a vector with all the edges of the mesh.