Hi sir..
need your help ...
look at this clip how my script is working and where is error..
using System; using System.Collections.Generic; using System.Windows.Forms; using ScriptPortal.Vegas; public class EntryPoint { public void FromVegas(Vegas vegas) { PNGSetting(vegas); } private void PNGSetting(Vegas vegas) { try { // Ensure there are at least one marker int markerCount = vegas.Project.Markers.Count; if (markerCount < 1) { MessageBox.Show("At least one marker is required.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // Get the positions of the first and second markers if they exist Timecode firstMarkerPosition = vegas.Project.Markers[0].Position; Timecode secondMarkerPosition = markerCount > 1 ? vegas.Project.Markers[1].Position : Timecode.FromSeconds(0); // Process events before the first marker DeselectEvents(vegas); SelectEventsInRange(vegas, Timecode.FromSeconds(0), firstMarkerPosition); SetEventsLength(vegas); if (markerCount > 1) { // Process events between the first and second markers DeselectEvents(vegas); SelectEventsInRange(vegas, firstMarkerPosition, secondMarkerPosition); SetEventsLength(vegas); // Process events after the second marker DeselectEvents(vegas); SelectEventsInRange(vegas, secondMarkerPosition, null); SetEventsLength(vegas); } else { // Process events after the first marker only if there is only one marker DeselectEvents(vegas); SelectEventsInRange(vegas, firstMarkerPosition, null); SetEventsLength(vegas); } // Final cleanup DeselectEvents(vegas); vegas.UpdateUI(); } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void DeselectEvents(Vegas vegas) { foreach (Track track in vegas.Project.Tracks) { foreach (TrackEvent trackEvent in track.Events) { trackEvent.Selected = false; } } } private void SelectEventsInRange(Vegas vegas, Timecode start, Timecode end) { foreach (Track track in vegas.Project.Tracks) { foreach (TrackEvent trackEvent in track.Events) { // Check if the event is within the range bool inRange = (start == null || trackEvent.Start >= start) && (end == null || trackEvent.Start < end); trackEvent.Selected = inRange; } } } private void SetEventsLength(Vegas vegas) { try { var selectedEventsByTrack = GetSelectedEventsByTrack(vegas); if (selectedEventsByTrack.Count == 0) return; var result = GetHighestTrackAndTotalLength(selectedEventsByTrack); Track highestTrack = result.Key; Timecode totalHighestEventLength = result.Value; if (highestTrack == null) return; AdjustEventLengths(selectedEventsByTrack, highestTrack, totalHighestEventLength); AdjustRegionEnd(vegas); vegas.UpdateUI(); } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private Dictionary<Track, List<TrackEvent>> GetSelectedEventsByTrack(Vegas vegas) { var selectedEventsByTrack = new Dictionary<Track, List<TrackEvent>>(); foreach (Track track in vegas.Project.Tracks) { foreach (TrackEvent trackEvent in track.Events) { if (trackEvent.Selected) { if (!selectedEventsByTrack.ContainsKey(track)) { selectedEventsByTrack[track] = new List<TrackEvent>(); } selectedEventsByTrack[track].Add(trackEvent); } } } return selectedEventsByTrack; } private KeyValuePair<Track, Timecode> GetHighestTrackAndTotalLength(Dictionary<Track, List<TrackEvent>> selectedEventsByTrack) { Track highestTrack = null; Timecode totalHighestEventLength = Timecode.FromSeconds(0); foreach (var kvp in selectedEventsByTrack) { Track track = kvp.Key; // Identify the highest track based on index if (highestTrack == null || track.Index > highestTrack.Index) { highestTrack = track; totalHighestEventLength = Timecode.FromSeconds(0); // Calculate the total length of selected events for this track foreach (TrackEvent ev in kvp.Value) { totalHighestEventLength += ev.Length; } } } return new KeyValuePair<Track, Timecode>(highestTrack, totalHighestEventLength); } private void AdjustEventLengths(Dictionary<Track, List<TrackEvent>> selectedEventsByTrack, Track highestTrack, Timecode totalHighestEventLength) { foreach (var kvp in selectedEventsByTrack) { Track track = kvp.Key; if (track == highestTrack) continue; Timecode totalPreviousLength = Timecode.FromSeconds(0); TrackEvent lastSelectedEvent = null; foreach (TrackEvent ev in kvp.Value) { if (lastSelectedEvent == null || ev.Start > lastSelectedEvent.Start) { if (lastSelectedEvent != null) { totalPreviousLength += lastSelectedEvent.Length; } lastSelectedEvent = ev; } else { totalPreviousLength += ev.Length; } } if (lastSelectedEvent != null) { Timecode newLength = totalHighestEventLength - totalPreviousLength; if (newLength > Timecode.FromSeconds(0)) { lastSelectedEvent.Length = newLength; } } } } private void AdjustRegionEnd(Vegas vegas) { var latestSelectedEvents = GetLastSelectedEvents(vegas); if (latestSelectedEvents.Count == 0) return; Timecode furthestEndTime = GetFurthestEndTime(latestSelectedEvents.Values); UpdateRegionEnd(vegas, furthestEndTime); } private Dictionary<Track, TrackEvent> GetLastSelectedEvents(Vegas vegas) { var lastSelectedEvents = new Dictionary<Track, TrackEvent>(); foreach (Track track in vegas.Project.Tracks) { TrackEvent lastSelectedEvent = null; foreach (TrackEvent trackEvent in track.Events) { if (trackEvent.Selected) { lastSelectedEvent = trackEvent; } } if (lastSelectedEvent != null) { lastSelectedEvents[track] = lastSelectedEvent; } } return lastSelectedEvents; } private Timecode GetFurthestEndTime(IEnumerable<TrackEvent> events) { Timecode furthestEndTime = Timecode.FromSeconds(0); foreach (TrackEvent trackEvent in events) { Timecode endTime = trackEvent.Start + trackEvent.Length; if (endTime > furthestEndTime) { furthestEndTime = endTime; } } return furthestEndTime; } private void UpdateRegionEnd(Vegas vegas, Timecode furthestEndTime) { Region latestRegion = null; foreach (Region region in vegas.Project.Regions) { if (region.Position < furthestEndTime) { if (latestRegion == null || region.Position > latestRegion.Position) { latestRegion = region; } } } if (latestRegion != null) { latestRegion.Length = furthestEndTime - latestRegion.Position; } } }