void RestorePointsIfNeeded(DistortionMesh mesh) { if (ValidateMeshPoints(mesh)) { return; } var rootFolder = mesh.RootFolder(); foreach (var item in rootFolder.Items.ToList()) { UnlinkFolderItem.Perform(mesh, item); } for (int i = 0; i <= mesh.NumRows; i++) { for (int j = 0; j <= mesh.NumCols; j++) { var pos = new Vector2((float)j / mesh.NumCols, (float)i / mesh.NumRows); var point = new DistortionMeshPoint { Id = $"{i};{j}", Color = Color4.White, UV = pos, Position = pos }; InsertFolderItem.Perform(mesh, new FolderItemLocation(rootFolder, rootFolder.Items.Count), point); } } }
public static void Perform() { var doc = Document.Current; foreach (var row in doc.TopLevelSelectedRows().ToList()) { if (!row.IsCopyPasteAllowed()) { continue; } if (row.Components.Get <PropertyRow>()?.Animator is IAnimator animator) { doc.History.DoTransaction(() => { foreach (var keyframe in animator.Keys.ToList()) { RemoveKeyframe.Perform(animator, keyframe.Frame); } }); } else if (row.Components.Get <AnimationTrackRow>()?.Track is AnimationTrack track) { doc.History.DoTransaction(() => { RemoveFromList <AnimationTrackList, AnimationTrack> .Perform(doc.Animation.Tracks, track); }); } else if (row.Components.Get <BoneRow>()?.Bone is Bone currentBone) { var bones = doc.Container.Nodes.OfType <Bone>().ToList(); var dependentBones = BoneUtils.FindBoneDescendats(currentBone, bones).ToList(); dependentBones.Insert(0, currentBone); UntieWidgetsFromBones.Perform(dependentBones, doc.Container.Nodes.OfType <Widget>()); foreach (var bone in dependentBones) { UnlinkFolderItem.Perform(doc.Container, bone); doc.Container.AsWidget.BoneArray[bone.Index] = default; } doc.History.DoTransaction(() => { foreach (var mesh in doc.Container.Nodes.OfType <Lime.Animesh>()) { mesh.OnBoneArrayChanged?.Invoke(); } }); } else if (Row.GetFolderItem(row) is IFolderItem item) { UnlinkFolderItem.Perform(doc.Container, item); } } }
public static Node Perform(Row sourceRow, Type destType, Type commonParent, ICollection <string> excludedProperties) { var node = sourceRow.Components.Get <NodeRow>()?.Node; Validate(node, destType, commonParent); var item = Row.GetFolderItem(sourceRow); var index = sourceRow.Parent.Rows.IndexOf(sourceRow); var location = Row.GetFolderItemLocation(sourceRow.Parent.Rows[index]); var result = CreateNode.Perform(destType, location); CopyProperties(node, result, excludedProperties); ReplaceContents.Perform(node, result); UnlinkFolderItem.Perform(Document.Current.Container, item); return(result); }
public static void Perform() { foreach (var row in Document.Current.TopLevelSelectedRows().ToList()) { var item = Row.GetFolderItem(row); if (item != null) { UnlinkFolderItem.Perform(Document.Current.Container, item); } var root = row.Components.Get <BoneRow>()?.Bone; if (root != null) { var bones = Document.Current.Container.Nodes.OfType <Bone>().ToList(); foreach (var bone in BoneUtils.FindBoneDescendats(root, bones)) { UnlinkFolderItem.Perform(Document.Current.Container, bone); } } } }
public static void Perform() { foreach (var row in Document.Current.TopLevelSelectedRows().ToList()) { if (!row.IsCopyPasteAllowed()) { continue; } if (row.Components.Get <PropertyRow>()?.Animator is IAnimator animator) { Document.Current.History.DoTransaction(() => { foreach (var keyframe in animator.Keys.ToList()) { RemoveKeyframe.Perform(animator, keyframe.Frame); } }); continue; } var item = Row.GetFolderItem(row); var currentBone = row.Components.Get <BoneRow>()?.Bone; if (currentBone != null) { var bones = Document.Current.Container.Nodes.OfType <Bone>().ToList(); var dependentBones = BoneUtils.FindBoneDescendats(currentBone, bones).ToList(); dependentBones.Insert(0, currentBone); UntieWidgetsFromBones.Perform(dependentBones, Document.Current.Container.Nodes.OfType <Widget>()); foreach (var bone in dependentBones) { UnlinkFolderItem.Perform(Document.Current.Container, bone); Document.Current.Container.AsWidget.BoneArray[bone.Index] = default(BoneArray.Entry); } } else if (item != null) { UnlinkFolderItem.Perform(Document.Current.Container, item); } } }