using Microsoft.ML.Runtime; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using Wpf_AiSportsMicrospace; using Wpf_AiSportsMicrospace.Common; using Wpf_AiSportsMicrospace.Enum; using Wpf_AiSportsMicrospace.MyUserControl; using Wpf_AiSportsMicrospace.Views; using Wpf_AiSportsMicrospace.Views.JumpRope; using Yztob.AiSports.Inferences.Abstractions; using Yztob.AiSports.Inferences.Things; using Yztob.AiSports.Postures; using Yztob.AiSports.Postures.Abstractions; using Yztob.AiSports.Postures.Sports; using Yztob.AiSports.Postures.Things; using Yztob.AiSports.Sensors.Abstractions; using Yztob.AiSports.Sensors.Things; namespace Wpf_AiSportsMicrospace { /// /// Home.xaml 的交互逻辑 /// public partial class Home : UserControl { public static Uri loadingImage = new Uri("/Resources/Img/Album/1.gif", UriKind.Relative); private Main _mainWin => Application.Current.MainWindow as Main; public Home() { InitializeComponent(); string projectRoot = Path.Combine(AppContext.BaseDirectory, @"..\..\.."); string albumPath = Path.Combine(projectRoot, "Resources", "Img"); coverFlow.Images.Add(new CoverFlowItem { ImageUri = new Uri(Path.Combine(albumPath, "test_img/test_rope.png")), ProgressColor1 = "#215bc7", ProgressColor2 = "#fc640e" }); coverFlow.Images.Add(new CoverFlowItem { ImageUri = new Uri(Path.Combine(albumPath, "play_img/play_music.png")), ProgressColor1 = "#e73d42", ProgressColor2 = "#fd8212" }); coverFlow.Images.Add(new CoverFlowItem { ImageUri = new Uri(Path.Combine(albumPath, "Album/home_history.png")), ProgressColor1 = "#e73d42", ProgressColor2 = "#215bc7" }); // 默认选中第3张 coverFlow.SelectedIndex = 0; Loaded += Window_Loaded; Unloaded += Home_Unloaded; Utils.PlayBackgroundMusic("homeprojectselected.mp3", true); } private void Window_Loaded(object sender, RoutedEventArgs e) { _mainWin.HumanFrameUpdated += OnHumanFrameUpdated; } private void Home_Unloaded(object sender, RoutedEventArgs e) { _mainWin.HumanFrameUpdated -= OnHumanFrameUpdated; } private void OnHumanFrameUpdated(object sender, List humans) { var human = humans.FirstOrDefault(); if (human == null) return; //检测挥手动作 var wavingaction = _mainWin.SportOperate.VerifyWavingAction(humans); switch (wavingaction) { case (int)WavingAction.LeftWave: // 左手挥动 Application.Current.Dispatcher.BeginInvoke(() => coverFlow.SlideRight()); break; case (int)WavingAction.RightWave: // 右手挥动 Application.Current.Dispatcher.BeginInvoke(() => coverFlow.SlideLeft()); break; case (int)WavingAction.FirstHand: // 举手开始 Application.Current.Dispatcher.BeginInvoke(() => coverFlow.StartSelectedProgress()); break; case (int)WavingAction.Raising: // 举手中,实时更新进度 break; case (int)WavingAction.RaiseHand: // 举手完成 coverFlow.ProgressCompleted += CoverFlow_ProgressCompleted; break; default: // 没有动作 → 取消进度 Application.Current.Dispatcher.BeginInvoke(() => coverFlow.CancelSelectedProgress()); break; } } private void CoverFlow_ProgressCompleted(CoverFlowItem item) { // 停止抽帧线程/释放资源 try { RouterGoNew(); } catch (Exception ex) { Debug.WriteLine($"停止抽帧异常: {ex.Message}"); } } //测试点击 private void GoNew(object sender, MouseButtonEventArgs e) { // 跳转逻辑(如导航到新页面并传递参数) //例如:RaiseEvent、调用外部委托、或使用导航框架 var mainWin = Application.Current.MainWindow as Main; //var newPage = new CenterHome //{ // NowSelect = coverFlow.SelectedIndex == 0 ? "test" : "play" //}; //mainWin?.SwitchPage(newPage, true); if (coverFlow.SelectedIndex == 0) { var newPage = new GroupJumpRope(); mainWin?.SwitchPage(newPage, true); } else { var newPage = new MusicJumpRope(); mainWin?.SwitchPage(newPage, true); } } //跳转二级页面 private void RouterGoNew() { // 跳转逻辑(如导航到新页面并传递参数) // 例如:RaiseEvent、调用外部委托、或使用导航框架 var mainWin = Application.Current.MainWindow as Main; if (coverFlow.SelectedIndex == 0) { var newPage = new GroupJumpRope(); mainWin?.SwitchPage(newPage, true); } else { var newPage = new MusicJumpRope(); mainWin?.SwitchPage(newPage, true); } } } }