diff --git a/README.md b/README.md index c233d285..328ec72c 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@

VegasScripts

State - Version + Version Downloads

diff --git a/otomad_helper/Otomad Helper.cs b/otomad_helper/Otomad Helper.cs index a2457fd9..ca308e78 100644 --- a/otomad_helper/Otomad Helper.cs +++ b/otomad_helper/Otomad Helper.cs @@ -90,9 +90,9 @@ namespace Otomad.VegasScript.OtomadHelper.V4 { /// public class EntryPoint { /// 版本号 - public static readonly Version VERSION = new Version(4, 28, 1, 0); + public static readonly Version VERSION = new Version(4, 28, 3, 0); /// 修订日期 - public static readonly DateTime REVISION_DATE = new DateTime(2023, 4, 1); + public static readonly DateTime REVISION_DATE = new DateTime(2023, 4, 3); // 配置参数变量 #region 视频属性 @@ -11095,16 +11095,15 @@ private Track FindASuitableTrack(Timecode start, Timecode length, IEnumerable if (typeof(T) == typeof(AudioEvent) && NoAudio || typeof(T) == typeof(VideoEvent) && NoVideo) return null; Track track = null; IEnumerable tracks = IsAudio() ? audioTracks.Cast() : videoTracks.Cast(); + Timecode end = start + length; if (!IsSingleTrack()) { - Timecode end = start + length; foreach (Track otherTrack in tracks) { if (exceptTracks != null && exceptTracks.Contains(otherTrack)) continue; TrackOtherInfo info = GetTrackOtherInfo(otherTrack); if (length.ToMilliseconds() == 0) goto ok; if (info.length > Round(start)) continue; if (!IsAlwaysNewTrack()) { - bool _; - List inEvents = FindEventsAlmostIn(otherTrack, start, end, out _, EXAMPLE_EVENT_NAME, true); + List inEvents = FindEventsAlmostIn(otherTrack, start, end, EXAMPLE_EVENT_NAME, true); if (inEvents.Count != 0) continue; } ok: @@ -11113,11 +11112,28 @@ private Track FindASuitableTrack(Timecode start, Timecode length, IEnumerable break; } } else track = tracks.FirstOrDefault(); - if (track == null) + if (track == null) { track = IsAudio() ? AddAudioTrackAfter() as Track : AddVideoTrackBefore() as Track; + GetTrackOtherInfo(track).Length = end; + } return track; } + /// + /// 查找轨道中不完全在指定的时间范围内的所有事件。 + /// + /// 注意:使用本函数会非常地慢。 + /// 轨道。 + /// 开始时间。 + /// 结束时间。 + /// 如事件名称为此的话则排除在外。 + /// 只找一个,用于仅判断是否有内容而不是获取内容,以节约性能。 + /// 在指定的时间范围内的所有轨道事件。 + public static List FindEventsAlmostIn(Track track, Timecode start, Timecode end, string exceptName = null, bool justFindOne = false) { + bool _; + return FindEventsAlmostIn(track, start, end, out _, exceptName, justFindOne); + } + /// /// 查找轨道中不完全在指定的时间范围内的所有事件。 /// @@ -11151,7 +11167,7 @@ public static List FindEventsAlmostIn(Track track, Timecode start, T private readonly static Dictionary trackOtherInfos = new Dictionary(); private class TrackOtherInfo { public List originalEvents; - public int length = -1; + public int length = 0; public Timecode Length { set { int ms = Round(value);