Exemplo n.º 1
0
        /// <summary>
        /// Apply Transform to vertices and normals of mesh
        /// </summary>
        public static void PerVertexTransform(IDeformableMesh mesh, TransformSequence xform)
        {
            int NV = mesh.MaxVertexID;

            if (mesh.HasVertexNormals)
            {
                for (int vid = 0; vid < NV; ++vid)
                {
                    if (mesh.IsVertex(vid))
                    {
                        mesh.SetVertex(vid, xform.TransformP(mesh.GetVertex(vid)));
                        mesh.SetVertexNormal(vid, (Vector3f)xform.TransformV(mesh.GetVertexNormal(vid)));
                    }
                }
            }
            else
            {
                for (int vid = 0; vid < NV; ++vid)
                {
                    if (mesh.IsVertex(vid))
                    {
                        mesh.SetVertex(vid, xform.TransformP(mesh.GetVertex(vid)));
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static void FlipLeftRightCoordSystems(IDeformableMesh mesh)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = mesh.GetVertex(vid);
                    v.z = -v.z;
                    mesh.SetVertex(vid, v);

                    if (mesh.HasVertexNormals)
                    {
                        Vector3f n = mesh.GetVertexNormal(vid);
                        n.z = -n.z;
                        mesh.SetVertexNormal(vid, n);
                    }
                }
            }

            if (mesh is DMesh3)
            {
                (mesh as DMesh3).ReverseOrientation(false);
            }
            else
            {
                throw new Exception("argh don't want this in IDeformableMesh...but then for SimpleMesh??");
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Apply TransformF to subset of vertices of mesh
 /// </summary>
 public static void PerVertexTransform(IDeformableMesh mesh, IEnumerable <int> vertices, Func <Vector3d, int, Vector3d> TransformF)
 {
     foreach (int vid in vertices)
     {
         if (mesh.IsVertex(vid))
         {
             Vector3d newPos = TransformF(mesh.GetVertex(vid), vid);
             mesh.SetVertex(vid, newPos);
         }
     }
 }
Exemplo n.º 4
0
 /// <summary>
 /// Apply TransformF to subset of mesh vertices defined by MapV[vertices]
 /// </summary>
 public static void PerVertexTransform(IDeformableMesh targetMesh, IDeformableMesh sourceMesh, int[] mapV, Func <Vector3d, int, int, Vector3d> TransformF)
 {
     foreach (int vid in sourceMesh.VertexIndices())
     {
         int map_vid = mapV[vid];
         if (targetMesh.IsVertex(map_vid))
         {
             Vector3d newPos = TransformF(targetMesh.GetVertex(map_vid), vid, map_vid);
             targetMesh.SetVertex(map_vid, newPos);
         }
     }
 }
Exemplo n.º 5
0
        public static void ConvertYUpToZUp(IDeformableMesh mesh)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = mesh.GetVertex(vid);
                    mesh.SetVertex(vid, new Vector3d(v.x, -v.z, v.y));
                }
            }
        }
Exemplo n.º 6
0
        public static void Rotate(IDeformableMesh mesh, Vector3d origin, Quaterniond rotation)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = rotation * (mesh.GetVertex(vid) - origin) + origin;
                    mesh.SetVertex(vid, v);
                }
            }
        }
Exemplo n.º 7
0
        public static void PerVertexTransform(IDeformableMesh mesh, Func <Vector3d, Vector3f, Vector3d> TransformF)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d newPos = TransformF(mesh.GetVertex(vid), mesh.GetVertexNormal(vid));
                    mesh.SetVertex(vid, newPos);
                }
            }
        }
Exemplo n.º 8
0
        public static void VertexNormalOffset(IDeformableMesh mesh, double offsetDistance)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d newPos = mesh.GetVertex(vid) + offsetDistance * (Vector3d)mesh.GetVertexNormal(vid);
                    mesh.SetVertex(vid, newPos);
                }
            }
        }
Exemplo n.º 9
0
        public static void Scale(IDeformableMesh mesh, double sx, double sy, double sz)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = mesh.GetVertex(vid);
                    v.x *= sx; v.y *= sy; v.z *= sz;
                    mesh.SetVertex(vid, v);
                }
            }
        }
Exemplo n.º 10
0
        public static void FromFrame(IDeformableMesh mesh, Frame3f f)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d vf = mesh.GetVertex(vid);
                    Vector3d v  = f.FromFrameP((Vector3f)vf);
                    mesh.SetVertex(vid, v);
                }
            }
        }
Exemplo n.º 11
0
        public static void Translate(IDeformableMesh mesh, double tx, double ty, double tz)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = mesh.GetVertex(vid);
                    v.x += tx; v.y += ty; v.z += tz;
                    mesh.SetVertex(vid, v);
                }
            }
        }
Exemplo n.º 12
0
        public static void Rotate(IDeformableMesh mesh, Vector3d origin, Quaternionf rotation)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = mesh.GetVertex(vid);
                    v -= origin;
                    v  = (Vector3d)(rotation * (Vector3f)v);
                    v += origin;
                    mesh.SetVertex(vid, v);
                }
            }
        }
Exemplo n.º 13
0
        public static void Scale(IDeformableMesh mesh, Vector3d scale, Vector3d origin)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = mesh.GetVertex(vid);
                    v.x -= origin.x; v.y -= origin.y; v.z -= origin.z;
                    v.x *= scale.x; v.y *= scale.y; v.z *= scale.z;
                    v.x += origin.x; v.y += origin.y; v.z += origin.z;
                    mesh.SetVertex(vid, v);
                }
            }
        }
Exemplo n.º 14
0
        /// <summary>
        /// Transfer new vertex positions to target
        /// </summary>
        public void UpdateVertices(IDeformableMesh target)
        {
            bool bNormals = target.HasVertexNormals;

            update_from();
            foreach (int vid in target.VertexIndices())
            {
                int i = MapV[vid];
                target.SetVertex(vid, From[i]);

                if (bNormals)
                {
                    target.SetVertexNormal(vid,
                                           Rotation * target.GetVertexNormal(vid));
                }
            }
        }
Exemplo n.º 15
0
        public static void Rotate(IDeformableMesh mesh, Vector3d origin, Quaterniond rotation)
        {
            bool bHasNormals = mesh.HasVertexNormals;
            int  NV          = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = rotation * (mesh.GetVertex(vid) - origin) + origin;
                    mesh.SetVertex(vid, v);
                    if (bHasNormals)
                    {
                        mesh.SetVertexNormal(vid, (Vector3f)(rotation * mesh.GetVertexNormal(vid)));
                    }
                }
            }
        }
Exemplo n.º 16
0
        public static void ConvertYUpToZUp(IDeformableMesh mesh)
        {
            int  NV          = mesh.MaxVertexID;
            bool bHasNormals = mesh.HasVertexNormals;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = mesh.GetVertex(vid);
                    mesh.SetVertex(vid, new Vector3d(v.x, -v.z, v.y));
                    if (bHasNormals)
                    {
                        Vector3f n = mesh.GetVertexNormal(vid);
                        mesh.SetVertexNormal(vid, new Vector3f(n.x, -n.z, n.y));
                    }
                }
            }
        }
Exemplo n.º 17
0
        /// <summary> Map mesh *from* local frame coordinates into "world" coordinates </summary>
        public static void FromFrame(IDeformableMesh mesh, Frame3f f)
        {
            int  NV          = mesh.MaxVertexID;
            bool bHasNormals = mesh.HasVertexNormals;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d vf = mesh.GetVertex(vid);
                    Vector3d v  = f.FromFrameP((Vector3f)vf);
                    mesh.SetVertex(vid, v);
                    if (bHasNormals)
                    {
                        Vector3f n  = mesh.GetVertexNormal(vid);
                        Vector3f nf = f.FromFrameV(n);
                        mesh.SetVertexNormal(vid, nf);
                    }
                }
            }
        }
Exemplo n.º 18
0
        // Modeled after FlipLeftRightCoordSystems and ConvertYUpToZUp examples
        public static void ApplyTransform(IDeformableMesh mesh, Matrix4X4 matrix, Vector2 printCenter)
        {
            int NV = mesh.MaxVertexID;

            for (int vid = 0; vid < NV; ++vid)
            {
                if (mesh.IsVertex(vid))
                {
                    Vector3d v = mesh.GetVertex(vid);

                    // Transform point to MatterControl bed translation
                    var vec3        = new Vector3(v.x, v.y, v.z);
                    var transformed = vec3.Transform(matrix);

                    // Update and reset
                    v.x = transformed.X - printCenter.X;
                    v.y = transformed.Y - printCenter.Y;
                    v.z = transformed.Z;

                    mesh.SetVertex(vid, v);
                }
            }
        }
Exemplo n.º 19
0
 public static void Scale(IDeformableMesh mesh, double s)
 {
     Scale(mesh, s, s, s);
 }
Exemplo n.º 20
0
 public static void Translate(IDeformableMesh mesh, Vector3d v)
 {
     Translate(mesh, v.x, v.y, v.z);
 }
Exemplo n.º 21
0
 public static void Scale(IDeformableMesh mesh, double sx, double sy, double sz)
 {
     Scale(mesh, new Vector3d(sx, sy, sz), Vector3d.Zero);
 }