public static IEnumerable <(Face face, double distanceFromOrign)> GetPlanerFaces(this Mesh mesh, Vector3 normal, double distanceFromOrigin, double normalTolerance = 0, double distanceTolerance = 0) { var normalToleranceSquared = normalTolerance * normalTolerance; foreach (var facePlane in mesh.FacePlanes()) { if (Math.Abs(facePlane.distanceFromOrigin - distanceFromOrigin) <= distanceTolerance && (facePlane.face.Normal - normal).LengthSquared <= normalToleranceSquared) { yield return(facePlane); } } }