public static IEnumerable <(VertexBuilder <TvG, TvM, TvS> A, VertexBuilder <TvG, TvM, TvS> B, VertexBuilder <TvG, TvM, TvS> C, Material Material)> EvaluateTriangles <TvG, TvM, TvS>(this Mesh mesh, MESHXFORM xform = null)
public static IEnumerable <(IVertexBuilder A, IVertexBuilder B, IVertexBuilder C, Material Material)> EvaluateTriangles(this Mesh mesh, MESHXFORM xform = null) { if (mesh == null) { return(Enumerable.Empty <(IVertexBuilder, IVertexBuilder, IVertexBuilder, Material)>()); } return(mesh.Primitives.SelectMany(item => item.EvaluateTriangles(xform))); }
public static IEnumerable <(IVertexBuilder A, IVertexBuilder B, IVertexBuilder C, Material Material)> EvaluateTriangles(this MeshPrimitive prim, MESHXFORM xform = null) { if (prim == null) { yield break; } if (xform != null && !xform.Visible) { yield break; } var triangles = prim.GetTriangleIndices(); if (!triangles.Any()) { yield break; } var vertices = prim.GetVertexColumns(xform); var vtype = vertices.GetCompatibleVertexType(); foreach (var t in triangles) { var a = vertices.GetVertex(vtype, t.A); var b = vertices.GetVertex(vtype, t.B); var c = vertices.GetVertex(vtype, t.C); yield return(a, b, c, prim.Material); } }
public static IEnumerable <(IVertexBuilder A, Material Material)> EvaluatePoints(this MeshPrimitive prim, MESHXFORM xform = null) { if (prim == null) { yield break; } if (xform != null && !xform.Visible) { yield break; } var points = prim.GetPointIndices(); if (!points.Any()) { yield break; } var vertices = prim.GetVertexColumns(xform); var vtype = vertices.GetCompatibleVertexType(); foreach (var t in points) { var a = vertices.GetVertex(vtype, t); yield return(a, prim.Material); } }
public static IEnumerable <(IVertexBuilder A, IVertexBuilder B, Material Material)> EvaluateLines(this MeshPrimitive prim, MESHXFORM xform = null) { if (prim == null) { yield break; } if (xform != null && !xform.Visible) { yield break; } var lines = prim.GetLineIndices(); if (!lines.Any()) { yield break; } var vertices = prim.GetVertexColumns(xform); var vtype = vertices.GetCompatibleVertexType(); foreach (var(la, lb) in lines) { var va = vertices.GetVertex(vtype, la); var vb = vertices.GetVertex(vtype, lb); yield return(va, vb, prim.Material); } }
public static IEnumerable <EvaluatedTriangle <TvG, TvM, TvS> > GetTrianglesFromMesh(Mesh mesh, MESHXFORM xform = null) { if (xform != null && !xform.Visible) { mesh = null; } if (mesh == null) { return(Enumerable.Empty <EvaluatedTriangle <TvG, TvM, TvS> >()); } var primitives = _GatherMeshGeometry(mesh); return(Transforms.InstancingTransform .Evaluate(xform) .SelectMany ( xinst => primitives.SelectMany ( prim => { var xvertices = xinst != null ? prim.Vertices.WithTransform(xinst) : prim.Vertices; return _EvaluateTriangles(prim.Material, xvertices, prim.Triangles); } ) )); }
public static IEnumerable <EvaluatedTriangle <TvG, TvM, TvS> > EvaluateTriangles <TvG, TvM, TvS>(this Mesh mesh, MESHXFORM xform = null) where TvG : struct, IVertexGeometry where TvM : struct, IVertexMaterial where TvS : struct, IVertexSkinning { return(EvaluatedTriangle <TvG, TvM, TvS> .GetTrianglesFromMesh(mesh, xform)); }
public static IEnumerable <(IVertexBuilder A, IVertexBuilder B, IVertexBuilder C, Material Material)> EvaluateTriangles(this MeshPrimitive prim, MESHXFORM xform = null) { if (prim == null) { yield break; } if (xform != null && !xform.Visible) { yield break; } var vertices = prim.GetVertexColumns(); var triangles = prim.GetTriangleIndices(); if (!triangles.Any()) { yield break; } foreach (var xinst in Transforms.InstancingTransform.Evaluate(xform)) { var xvertices = xinst != null?vertices.WithTransform(xinst) : vertices; var vtype = vertices.GetCompatibleVertexType(); foreach (var(ta, tb, tc) in triangles) { var va = xvertices.GetVertex(vtype, ta); var vb = xvertices.GetVertex(vtype, tb); var vc = xvertices.GetVertex(vtype, tc); yield return(va, vb, vc, prim.Material); } } }