public bool AddOrUpdateKey(Keyframe f) { if (f.Time < validMin || f.Time > validMax) { throw new gException("KeyframeSequence.AddKey: time {0} is out of valid range", f.Time); } IChangeOp change; if (Keys.ContainsKey(f.Time)) { Keyframe prev = Keys[f.Time]; change = new KeyframeUpdateChange() { before = prev, after = f, sequence = this }; } else { change = new KeyframeAddRemoveChange() { key = f, sequence = this, bAdded = true }; } add_or_update_key(f); FUtil.SafeSendEvent(ChangeOpEvent, this, change); return(true); }
public bool UpdateKey(Keyframe f) { if (Keys.ContainsKey(f.Time)) { Keyframe prev = Keys[f.Time]; IChangeOp change = new KeyframeUpdateChange() { before = prev, after = f, sequence = this }; Keys[f.Time] = f; FUtil.SafeSendEvent(ChangeOpEvent, this, change); return(true); } return(false); }
public void ApplyTransformation(Func <Frame3f, Frame3f> TransformF) { List <IChangeOp> changes = new List <IChangeOp>(); foreach (Keyframe k in Keys.Values) { IChangeOp change = new KeyframeUpdateChange() { sequence = this, before = k, after = new Keyframe(k.Time, TransformF(k.Frame)) }; changes.Add(change); } for (int i = 0; i < changes.Count; ++i) { changes[i].Apply(); FUtil.SafeSendEvent(ChangeOpEvent, this, changes[i]); } FUtil.SafeSendEvent(ModifiedEvent, this, null); }