Exemplo n.º 1
0
        private static bool HasHoles(BrFace face)
        {
            var lpSum = 0;

            foreach (BoundaryLoop lp in face.Loops)
            {
                lpSum++;
            }
            return(lpSum != 1);
        }
Exemplo n.º 2
0
        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!
        }