Improved Documentation for FlipEdge
This commit is contained in:
parent
32680eac28
commit
c0a99c8b3a
|
@ -566,10 +566,10 @@ bool CheckFlipEdgeNormal(FaceType &f, const int z, const float angleRad)
|
|||
|
||||
assert((NewDiag1 != NewDiag0) && (NewDiag1 != OldDiag0) && (NewDiag1 != OldDiag1));
|
||||
|
||||
CoordType oldN0 = NormalizedNormal( NewDiag0->cP(),OldDiag0->cP(),OldDiag1->cP());
|
||||
CoordType oldN1 = NormalizedNormal( NewDiag1->cP(),OldDiag1->cP(),OldDiag0->cP());
|
||||
CoordType newN0 = NormalizedNormal( OldDiag0->cP(),NewDiag1->cP(),NewDiag0->cP());
|
||||
CoordType newN1 = NormalizedNormal( OldDiag1->cP(),NewDiag0->cP(),NewDiag1->cP());
|
||||
CoordType oldN0 = Normal( NewDiag0->cP(),OldDiag0->cP(),OldDiag1->cP()).Normalize();
|
||||
CoordType oldN1 = Normal( NewDiag1->cP(),OldDiag1->cP(),OldDiag0->cP()).Normalize();
|
||||
CoordType newN0 = Normal( OldDiag0->cP(),NewDiag1->cP(),NewDiag0->cP()).Normalize();
|
||||
CoordType newN1 = Normal( OldDiag1->cP(),NewDiag0->cP(),NewDiag1->cP()).Normalize();
|
||||
if(AngleN(oldN0,newN0) > angleRad) return false;
|
||||
if(AngleN(oldN0,newN1) > angleRad) return false;
|
||||
if(AngleN(oldN1,newN0) > angleRad) return false;
|
||||
|
@ -629,13 +629,28 @@ bool CheckFlipEdge(FaceType &f, int z)
|
|||
|
||||
/*!
|
||||
* Flip the z-th edge of the face f.
|
||||
* Check for topological correctness first using <CODE>CheckFlipFace()</CODE>.
|
||||
* Check for topological correctness first using <CODE>CheckFlipEdge()</CODE>.
|
||||
* \param f pointer to the face
|
||||
* \param z the edge index
|
||||
*
|
||||
* Note: For <em>edge flip</em> we intend the swap of the diagonal of the rectangle
|
||||
* Note: For <em>edge flip</em> we intend the swap of the diagonal of the quadrilater
|
||||
* formed by the face \a f and the face adjacent to the specified edge.
|
||||
*
|
||||
* 0__________ 2 0__________2
|
||||
* -> 1|\ | | /|1
|
||||
* | \ g | | g / |
|
||||
* | \ | |w / |
|
||||
* | f z\w | | / f z|
|
||||
* | \ | | / |
|
||||
* |__________\|1 <- 1|/__________|
|
||||
* 2 0 2 0
|
||||
*
|
||||
* Note that, after an operation FlipEdge(f,z)
|
||||
* to topologically revert it should be sufficient to do FlipEdge(f,z+1)
|
||||
* (even if the mesh is actually different: f and g will be swapped)
|
||||
*
|
||||
*/
|
||||
|
||||
template <class FaceType>
|
||||
void FlipEdge(FaceType &f, const int z)
|
||||
{
|
||||
|
@ -644,14 +659,14 @@ void FlipEdge(FaceType &f, const int z)
|
|||
assert( !IsBorder(f,z) );
|
||||
assert( face::IsManifold<FaceType>(f, z));
|
||||
|
||||
FaceType *g = f.FFp(z);
|
||||
int w = f.FFi(z);
|
||||
FaceType *g = f.FFp(z); // The other face
|
||||
int w = f.FFi(z); // and other side
|
||||
|
||||
assert( g->V(w) == f.V1(z) );
|
||||
assert( g->V1(w)== f.V(z) );
|
||||
assert( g->V2(w)!= f.V(z) );
|
||||
assert( g->V2(w)!= f.V1(z) );
|
||||
assert( g->V2(w)!= f.V2(z) );
|
||||
assert( g->V0(w) == f.V1(z) );
|
||||
assert( g->V1(w) == f.V0(z) );
|
||||
assert( g->V2(w) != f.V0(z) );
|
||||
assert( g->V2(w) != f.V1(z) );
|
||||
assert( g->V2(w) != f.V2(z) );
|
||||
|
||||
f.V1(z) = g->V2(w);
|
||||
g->V1(w) = f.V2(z);
|
||||
|
@ -685,6 +700,7 @@ void FlipEdge(FaceType &f, const int z)
|
|||
g->FFp(w)->FFp( g->FFi(w) ) = g;
|
||||
g->FFp(w)->FFi( g->FFi(w) ) = w;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
template <class FaceType>
|
||||
|
|
Loading…
Reference in New Issue