コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
ファイル: CopyPaste.cs プロジェクト: kutselabskii/Citrus
        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);
                }
            }
        }
コード例 #3
0
ファイル: NodeTypeConvert.cs プロジェクト: x5f3759df/Citrus
        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);
        }
コード例 #4
0
 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);
             }
         }
     }
 }
コード例 #5
0
ファイル: CopyPaste.cs プロジェクト: aologos/Citrus
 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);
         }
     }
 }