public IEnumerator <Facet> GetEnumerator() { foreach (var body in BodyArray) { MeshPtOffsetArray recentFace = null; foreach (var facet in body.Faces.SelectMany(f => new MeshPtOffsetArray(f.Mesh, PtOffsetArray).ToFacets())) { IsNewFace = facet.Meshed != recentFace; recentFace = facet.Meshed; yield return(facet); } } }
/// <summary> /// Creates an enumerable of facets having only a single instance of a single facet sliding over /// the mesh vertices. It means, that you cannot rely on object identity (always the same facet with different index). /// </summary> /// <param name="mesh">The mesh</param> /// <returns>An enumerable facet</returns> public static IEnumerable <Facet> TransientFacetsOf(MeshPtOffsetArray mesh) { var maxIndex = mesh.Mesh.FacetCount(); if (maxIndex > 0) { Facet f = new Facet(mesh, 0); yield return(f); for (int i = 0; i < maxIndex; i++) { f.Index = i; yield return(f); } } }
/// <summary> /// Creates an enumerable of facets referring to a single mesh and point array. /// </summary> /// <param name="mesh"></param> /// <param name="offsetArray"></param> /// <returns></returns> public static IEnumerable <Facet> ToFacets(this Mesh mesh, PtOffsetArray offsetArray) { var offsetMesh = new MeshPtOffsetArray(mesh, offsetArray); return(Enumerable.Range(0, mesh.FacetCount()).Select(index => new Facet(offsetMesh, index))); }
public Facet(MeshPtOffsetArray mesh, int index) { Meshed = mesh; Index = index; }