Пример #1
0
        public int[][] getFaces(int indexFlags)
        {
            int[][] allFaces = new int[faces.Count][];
            int     k        = 0;

            foreach (object o in faces)
            {
                Face face = (Face)o;
                allFaces[k] = new int[face.numVertices()];
                getFaceIndices(allFaces[k], face, indexFlags);
                k++;
            }
            return(allFaces);
        }
Пример #2
0
        private Face connectHalfEdges(HalfEdge hedgePrev, HalfEdge hedge)
        {
            Face discardedFace = null;

            if (hedgePrev.oppositeFace() == hedge.oppositeFace())
            { // then there is a redundant edge that we can get rid off
                Face     oppFace = hedge.oppositeFace();
                HalfEdge hedgeOpp;

                if (hedgePrev == he0)
                {
                    he0 = hedge;
                }
                if (oppFace.numVertices() == 3)
                { // then we can get rid of the opposite face altogether
                    hedgeOpp = hedge.getOpposite().prev.getOpposite();

                    oppFace.mark  = DELETED;
                    discardedFace = oppFace;
                }
                else
                {
                    hedgeOpp = hedge.getOpposite().next;

                    if (oppFace.he0 == hedgeOpp.prev)
                    {
                        oppFace.he0 = hedgeOpp;
                    }
                    hedgeOpp.prev      = hedgeOpp.prev.prev;
                    hedgeOpp.prev.next = hedgeOpp;
                }
                hedge.prev      = hedgePrev.prev;
                hedge.prev.next = hedge;

                hedge.opposite    = hedgeOpp;
                hedgeOpp.opposite = hedge;

                // oppFace was modified, so need to recompute
                oppFace.computeNormalAndCentroid();
            }
            else
            {
                hedgePrev.next = hedge;
                hedge.prev     = hedgePrev;
            }
            return(discardedFace);
        }