private static bool HasHoles(BrFace face) { var lpSum = 0; foreach (BoundaryLoop lp in face.Loops) { lpSum++; } return(lpSum != 1); }
public static bool IsCorvex(this BrFace face) { if (HasHoles(face)) { return(false); } var flagPos = 0; var flagNeg = 0; var edges = new List <Edge>(); foreach (BoundaryLoop lp in face.Loops) { if (!IsAtLeastTriangle(lp)) { return(false); } foreach (Edge edge in lp.Edges) { edges.Add(edge); } for (int i = 1; i < edges.Count; i++) { if (VectorMultiplicationResultIsPositive(edges[i - 1], edges[i])) { flagPos++; } else { flagNeg++; } //if ((flag < i && flag != 0)) //TODO: make it MOOOARRR readable! // return false; } if (VectorMultiplicationResultIsPositive(edges[edges.Count - 1], edges[0])) { flagPos++; } else { flagNeg++; } } Debug.WriteLine(flagPos); Debug.WriteLine(flagNeg); //return (edges.Count == flagPos) || (flagPos == 0); return((flagPos == flagNeg) || (flagNeg == 0) || (flagPos == 0)); //WRONG! }