示例#1
0
 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)
示例#2
0
        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)));
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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);
            }
        }
示例#6
0
        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);
            }

                       )
                   ));
        }
示例#7
0
 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));
 }
示例#8
0
        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);
                }
            }
        }