Ejemplo n.º 1
0
        /// <summary>
        /// Removes a face from the kernel, by cutting a hole in the mesh
        /// All Edges belonging to this face will become unlinked, naked edges
        /// </summary>
        /// <param name="face"></param>
        /// <returns></returns>
        public override bool Remove(Face face)
        {
            if (face.Start is null)
            {
                return(_elements.Remove(face));
            }

            // iterate over face edges
            foreach (var edge in new EdgeIterator(face.Start))
            {
                // unlink the current edge
                EdgeLinker.UnlinkEdge(edge);
            }

            // remove face from inner collection
            return(_elements.Remove(face));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Removes a <see cref="HalfEdge"/>. This also removes its pair,
        /// as HalfEdges are not allowed to be single ;)
        /// </summary>
        /// <param name="edge"></param>
        /// <returns></returns>
        public override bool Remove(HalfEdge edge)
        {
            // handle active references to edge
            if (!EdgeLinker.IsDummyPairEdge(edge))
            {
                RemoveReferences(edge);
            }

            // handle active references to its pair
            if (!EdgeLinker.IsDummyPairEdge(edge.Pair))
            {
                RemoveReferences(edge.Pair);
            }

            // unlink the edges
            EdgeLinker.UnlinkEdge(edge);
            EdgeLinker.UnlinkEdge(edge.Pair);

            // remove edges from inner collection
            _elements.Remove(edge);
            _elements.Remove(edge.Pair);

            return(true);
        }