in this pic.
i select these two events
i want a script which can just shuffle these both events positions like below pic
means below event move to above track and vice versa.
i created this one with ChatGPT guidance. but not working
using ScriptPortal.Vegas;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
public class EntryPoint
{
public void FromVegas(Vegas vegas)
{
// Ensure exactly two video events are selected
List<TrackEvent> selectedEvents = new List<TrackEvent>();
foreach (Track track in vegas.Project.Tracks)
{
foreach (TrackEvent trackEvent in track.Events)
{
if (trackEvent.Selected && trackEvent.IsVideo())
{
selectedEvents.Add(trackEvent);
}
}
}
if (selectedEvents.Count != 2)
{
MessageBox.Show("Please select exactly two video events.");
return;
}
// Ensure the selected events are on different tracks and have the same length
TrackEvent event1 = selectedEvents[0];
TrackEvent event2 = selectedEvents[1];
if (event1.Track == event2.Track)
{
MessageBox.Show("Selected events must be on different tracks.");
return;
}
if (event1.Length != event2.Length)
{
MessageBox.Show("Selected events must be of the same length.");
return;
}
// Swap the events by moving them to the other event's timecode
SwapEvents(event1, event2);
}
private void SwapEvents(TrackEvent event1, TrackEvent event2)
{
// Capture initial properties
Timecode start1 = event1.Start;
Timecode start2 = event2.Start;
Track track1 = event1.Track;
Track track2 = event2.Track;
// Add a new event at start2 for event1's media
TrackEvent newEvent1 = DuplicateEvent(event1, track2, start2);
track2.Events.Add(newEvent1);
// Add a new event at start1 for event2's media
TrackEvent newEvent2 = DuplicateEvent(event2, track1, start1);
track1.Events.Add(newEvent2);
// Remove original events
track1.Events.Remove(event1);
track2.Events.Remove(event2);
}
private TrackEvent DuplicateEvent(TrackEvent originalEvent, Track targetTrack, Timecode startTime)
{
// Create a new event
VideoEvent newEvent = new VideoEvent(startTime, originalEvent.Length);
// Copy takes from original event to new event
foreach (Take take in originalEvent.Takes)
{
newEvent.AddTake(take.Media);
}
// Add the new event to the target track
targetTrack.Events.Add(newEvent);
return newEvent;
}
}
@jetdv pls help.