Example #1
0
 private Slice(Lime.Animesh mesh, AnimeshSlice sliceBefore,
               AnimeshSlice sliceAfter, bool skipFirstSync)
 {
     this.mesh          = mesh;
     this.sliceBefore   = sliceBefore;
     this.sliceAfter    = sliceAfter;
     this.skipFirstSync = skipFirstSync;
 }
Example #2
0
                private void Do(Lime.Animesh mesh, AnimeshSlice slice, bool skipSync)
                {
                    var controller = mesh.Controller();

                    AnimeshTools.State = slice.State;
                    mesh.Vertices.Clear();
                    foreach (var v in slice.Vertices)
                    {
                        mesh.Vertices.Add(v);
                    }
                    mesh.Faces.Clear();
                    foreach (var i in slice.IndexBuffer)
                    {
                        mesh.Faces.Add(i);
                    }
                    mesh.ConstrainedEdges.Clear();
                    foreach (var cp in slice.ConstrainedVertices)
                    {
                        mesh.ConstrainedEdges.Add(cp);
                    }
                    if (!skipSync)
                    {
                        controller.Topology.ConstructFrom(mesh.Vertices, mesh.ConstrainedEdges, mesh.Faces);
                    }
                    if (mesh.Animators.TryFind(nameof(mesh.TransientVertices), out var animator))
                    {
                        animator.Keys.Clear();
                        foreach (var key in slice.Keyframes)
                        {
                            animator.Keys.AddOrdered(key);
                            animator.ResetCache();
                        }
                        mesh.Animators.Invalidate();
                    }
                    else
                    {
                        mesh.TransientVertices.Clear();
                        foreach (var v in slice.Vertices)
                        {
                            mesh.TransientVertices.Add(v);
                        }
                    }
                    mesh.Invalidate();
                }
Example #3
0
 public static void Perform(Lime.Animesh mesh, AnimeshSlice sliceBefore,
                            AnimeshSlice sliceAfter, bool skipFirstSync = true)
 {
     Document.Current.History.Perform(new Slice(mesh, sliceBefore, sliceAfter, skipFirstSync));
 }