Example #1
0
        public override Vector3d Project(Vector3d vPoint, int identifier = -1)
        {
            Vector3d vTargetPt   = SourceToTargetXForm.TransformP(vPoint);
            Vector3d vTargetProj = base.Project(vTargetPt, identifier);

            return(TargetToSourceXForm.TransformP(vTargetProj));
        }
        /// <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)));
                    }
                }
            }
        }
        /// <summary>
        /// compute axis-aligned bounds of set of points after transforming
        /// </summary>
        public static AxisAlignedBox3d Bounds(IEnumerable <Vector3d> values, TransformSequence xform)
        {
            AxisAlignedBox3d box = AxisAlignedBox3d.Empty;

            foreach (Vector3d v in values)
            {
                box.Contain(xform.TransformP(v));
            }
            return(box);
        }