public void SetTimeRegion(double originalRegionBegin, double originalRegionEnd, double finalRegionBegin, double finalRegionEnd) { using (SceneEditTransaction editTransaction = this.ViewModel.CreateEditTransaction(StringTable.UndoUnitMoveScheduledProperties)) { double scaleFactor = (finalRegionEnd - finalRegionBegin) / (originalRegionEnd - originalRegionBegin); TimeRegionChangeDetails details = TimeRegionChangeDetails.None; if (Tolerances.AreClose(originalRegionEnd - originalRegionBegin, 0.0)) { details |= TimeRegionChangeDetails.FromZero; } if (Tolerances.AreClose(finalRegionEnd - finalRegionBegin, 0.0)) { details |= TimeRegionChangeDetails.ToZero; } if (!Tolerances.AreClose(scaleFactor, 1.0)) { details |= TimeRegionChangeDetails.Scale; } if (!Tolerances.AreClose(originalRegionBegin, finalRegionBegin)) { details |= TimeRegionChangeDetails.Translate; } this.RecursiveSetTimeRegion(details, scaleFactor, originalRegionBegin, originalRegionEnd, finalRegionBegin, finalRegionEnd); editTransaction.Commit(); } }
private void RecursiveSetTimeRegion(TimeRegionChangeDetails details, double scaleFactor, double originalRegionBegin, double originalRegionEnd, double finalRegionBegin, double finalRegionEnd) { StoryboardTimelineSceneNode timelineSceneNode = this as StoryboardTimelineSceneNode; if (timelineSceneNode != null) { for (int index = 0; index < timelineSceneNode.Children.Count; ++index) { timelineSceneNode.Children[index].RecursiveSetTimeRegion(details, scaleFactor, originalRegionBegin, originalRegionEnd, finalRegionBegin, finalRegionEnd); } } this.SetTimeRegionCore(details, scaleFactor, originalRegionBegin, originalRegionEnd, finalRegionBegin, finalRegionEnd); }
protected virtual void SetTimeRegionCore(TimeRegionChangeDetails details, double scaleFactor, double originalRegionBegin, double originalRegionEnd, double finalRegionBegin, double finalRegionEnd) { if ((details & TimeRegionChangeDetails.FromZero) != TimeRegionChangeDetails.None || (details & TimeRegionChangeDetails.ToZero) != TimeRegionChangeDetails.None) { this.Begin = finalRegionBegin; this.Duration = finalRegionEnd - finalRegionBegin; } else if ((details & TimeRegionChangeDetails.Scale) != TimeRegionChangeDetails.None) { System.Windows.Duration?nullable = this.GetLocalOrDefaultValueAsWpf(TimelineSceneNode.DurationProperty) as System.Windows.Duration?; this.Duration = (!nullable.HasValue || !nullable.Value.HasTimeSpan ? this.NaturalDuration : nullable.Value.TimeSpan.TotalSeconds) * scaleFactor; this.Begin = (this.Begin - originalRegionBegin) * scaleFactor + finalRegionBegin; } else { if ((details & TimeRegionChangeDetails.Translate) == TimeRegionChangeDetails.None) { return; } this.Begin += finalRegionBegin - originalRegionBegin; } }
protected override void SetTimeRegionCore(TimeRegionChangeDetails details, double scaleFactor, double originalRegionBegin, double originalRegionEnd, double finalRegionBegin, double finalRegionEnd) { if ((details & TimeRegionChangeDetails.ToZero) != TimeRegionChangeDetails.None) { IList <KeyFrameSceneNode> keyFrameCollection = this.KeyFrameCollection; if (keyFrameCollection.Count > 0) { for (int index = keyFrameCollection.Count - 1; index > 0; --index) { this.RemoveKeyFrame(keyFrameCollection[index].Time); } keyFrameCollection[0].Time = finalRegionBegin; } } if ((details & TimeRegionChangeDetails.Scale) != TimeRegionChangeDetails.None && (details & TimeRegionChangeDetails.FromZero) == TimeRegionChangeDetails.None) { IList <KeyFrameSceneNode> keyFrameCollection = this.KeyFrameCollection; for (int index = 0; index < keyFrameCollection.Count; ++index) { KeyFrameSceneNode keyFrameSceneNode = keyFrameCollection[index]; keyFrameSceneNode.Time = (keyFrameSceneNode.Time - originalRegionBegin) * scaleFactor + finalRegionBegin; } } else { if ((details & TimeRegionChangeDetails.Translate) == TimeRegionChangeDetails.None) { return; } double num = finalRegionBegin - originalRegionBegin; IList <KeyFrameSceneNode> keyFrameCollection = this.KeyFrameCollection; for (int index = 0; index < keyFrameCollection.Count; ++index) { keyFrameCollection[index].Time += num; } } }
protected override void SetTimeRegionCore(TimeRegionChangeDetails details, double scaleFactor, double originalRegionBegin, double originalRegionEnd, double finalRegionBegin, double finalRegionEnd) { }