/// <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)); }
/// <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); }