Пример #1
0
        public int[] getKeyFramesInGhostSelection(AMTakeData take, int startFrame, int endFrame, int track_id)
        {
            List <int> key_frames = new List <int>();

            if (track_id <= -1)
            {
                return(key_frames.ToArray());
            }
            foreach (AMKey key in take.getTrack(track_id).keys)
            {
                if (key.frame + ghost_selection_total_offset < startFrame)
                {
                    continue;
                }
                if (key.frame + ghost_selection_total_offset > endFrame)
                {
                    break;
                }
                if (isFrameInContextSelection(key.frame))
                {
                    key_frames.Add(key.frame + ghost_selection_total_offset);
                }
            }
            return(key_frames.ToArray());
        }
Пример #2
0
        public AMKey[] removeSelectedKeysFromTrack(AMTakeData take, AMITarget itarget, int track_id)
        {
            List <AMKey> dkeys = new List <AMKey>();

            bool    didDeleteKeys = false;
            AMTrack track         = take.getTrack(track_id);

            for (int i = 0; i < track.keys.Count; i++)
            {
                if (!isFrameInContextSelection(track.keys[i].frame))
                {
                    continue;
                }
                dkeys.Add(track.keys[i]);
                track.keys.Remove(track.keys[i]);
                i--;
                didDeleteKeys = true;
            }
            if (didDeleteKeys)
            {
                track.updateCache(itarget);
            }

            return(dkeys.ToArray());
        }
Пример #3
0
        /*public AMKey[] getContextSelectionKeys() {
         *  List<AMKey> keys = new List<AMKey>();
         *  foreach(AMKey key in getSelectedTrack().keys) {
         *      for(int i=0;i<contextSelection.Count;i+=2) {
         *          // if selection start frame > frame, break out of sorted list
         *          if(contextSelection[i] > key.frame) break;
         *          if(contextSelection[i] <= key.frame && contextSelection[i+1] >= key.frame) keys.Add(key);
         *      }
         *  }
         *  return keys.ToArray();
         * }*/

        // offset context selection frames by an amount. can be positive or negative
        //returns keys that are to be deleted
        public AMKey[] offsetContextSelectionFramesBy(AMTakeData take, AMITarget itarget, int offset)
        {
            if (offset == 0)
            {
                return(new AMKey[0]);
            }
            if (contextSelection.Count <= 0)
            {
                return(new AMKey[0]);
            }

            List <AMKey> rkeys        = new List <AMKey>();
            List <AMKey> keysToDelete = new List <AMKey>();

            foreach (int track_id in contextSelectionTracks)
            {
                bool    shouldUpdateCache = false;
                AMTrack _track            = take.getTrack(track_id);
                foreach (AMKey key in _track.keys)
                {
                    for (int i = 0; i < contextSelection.Count; i += 2)
                    {
                        // move context selection
                        if (contextSelection[i] <= key.frame && contextSelection[i + 1] >= key.frame)
                        {
                            // if there is already a key in the new frame position, mark for deletion
                            bool keyToOverwriteInContextSelection = false;
                            if (_track.hasKeyOnFrame(key.frame + offset))
                            {
                                // check if the key is in the selection
                                for (int j = 0; j < contextSelection.Count; j += 2)
                                {
                                    if (contextSelection[j] <= (key.frame + offset) && contextSelection[j + 1] >= (key.frame + offset))
                                    {
                                        keyToOverwriteInContextSelection = true;
                                        break;
                                    }
                                }
                                // if not key is not in selection, mark for deletion
                                if (!keyToOverwriteInContextSelection)
                                {
                                    keysToDelete.Add(_track.getKeyOnFrame(key.frame + offset));
                                }
                            }
                            key.frame += offset;
                            if (!shouldUpdateCache)
                            {
                                shouldUpdateCache = true;
                            }
                            break;
                        }
                    }
                }

                // delete keys that were overwritten
                foreach (AMKey key in keysToDelete)
                {
                    _track.keys.Remove(key);
                    rkeys.Add(key);
                }
                keysToDelete.Clear();

                // update cache
                if (shouldUpdateCache)
                {
                    _track.updateCache(itarget);
                }
            }
            // update context selection
            for (int i = 0; i < contextSelection.Count; i++)
            {
                // move context selection
                contextSelection[i] += offset;
            }
            // clear ghost selection
            ghostSelection = new List <int>();

            return(rkeys.ToArray());
        }