/// <summary> /// this method computes the offset created by the translation of the slider and replays or keeps paused the stream/avatar /// </summary> /// <author> Alban Descottes 2018 </author> private void Slider_DragCompleted(object sender, DragCompletedEventArgs e) { ReplayAvatar.offset += ReplayViewModel.localOffset; ReplayViewModel.localOffset = 0; if (Stream.IsChecked == true) { if (isPlayed) { DrawingSheetView.Get().ReplayVideo.Play(); } DrawingSheetView.Get().ReplayVideo.Position = new TimeSpan(0, 0, 0, 0, (int)Tools.getStopWatch() - ReplayAvatar.offset); } if (isPlayed) { if (DrawingSheetView.Get().ReplayAudio.Source != null) { DrawingSheetView.Get().ReplayAudio.Position = new TimeSpan(0, 0, 0, 0, (int)Tools.getStopWatch() - ReplayAvatar.offset); DrawingSheetView.Get().ReplayAudio.Play(); } ReplayViewModel.PlayReplay(); isPlayed = false; } this.dragStarted = false; }
/// <summary> /// this method is called everytime, when the user drags the slider it changes the current avatar /// it selects the right avatar proportionally of the total length of the replay /// </summary> /// <author> Alban Descottes 2018 </author> private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs <double> e) { if (dragStarted) { var newTime = e.NewValue / 100 * ReplayViewModel.timeEnd; ReplayViewModel.changeCurrentAvatar((int)newTime); } }
public ExportAvatarVideoView() { // initializes the view InitializeComponent(); lengthSkeletonList = ReplayAvatar.SkeletonList.Count - 1; ExportProgressBar.Maximum = lengthSkeletonList; ExportProgressBar.Value = 0; // it opens the videoFileWriter on the current replay folder and get the width and height of the current screen avatarVideoStreamWriter = new VideoFileWriter(); var tuple = DrawingSheetAvatarViewModel.Get().getWidthAndHeight(); avatarVideoStreamWriter.Open(ReplayViewModel.Get().folderPath + "avatar.avi", tuple.Item1, tuple.Item2, 30, VideoCodec.MPEG4, 1000000); }
/// <summary> /// When the user strats to drag the slider the avatar/stream is paused /// </summary> /// <author> Alban Descottes 2018 </author> private void Slider_DragStarted(object sender, DragStartedEventArgs e) { this.dragStarted = true; ReplayViewModel.initTime = ReplayAvatar.SkeletonList[ReplayAvatar.CurrentSkeletonNumber].Item1; if (Stream.IsChecked == true) { DrawingSheetView.Get().ReplayVideo.Pause(); DrawingSheetView.Get().ReplayAudio.Pause(); } if (ReplayViewModel.played) { isPlayed = true; ReplayViewModel.PauseReplay(); } }
public ActionResult ReplayRecordedUserActions([FromBody] ReplayViewModel model) { var info = QPContext.CurrentDbConnectionInfo; new XmlDbUpdateReplayService( info.ConnectionString, info.DbType, CommonHelpers.GetDbIdentityInsertOptions(model.GenerateNewFieldIds, model.GenerateNewContentIds), QPContext.CurrentUserId, model.UseGuidSubstitution, _xmlDbUpdateLogService, _appInfoRepository, _actionsCorrecterService, _httpContextProcessor, throwActionReplayed: true ).Process(model.XmlString); return(JsonCamelCase(new JSendResponse { Status = JSendStatus.Success, Message = "Xml data successfully processed" })); }
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { // if the replay has faces, it displays the face plus the skeleton // and it takes two screenshot because during a recording with facetracking on it records two time less skeletons if (ReplayAvatar.faceTracking) { DrawingSheetAvatarViewModel.Get().drawFaceInReplay = true; DrawingSheetAvatarViewModel.Get().drawFace(ReplayAvatar.SkeletonList[e.ProgressPercentage].Item3.depthPointsList, ReplayAvatar.SkeletonList[e.ProgressPercentage].Item3.colorPointsList, ReplayAvatar.SkeletonList[e.ProgressPercentage].Item3.faceTriangles); DrawingSheetAvatarViewModel.Get().skToDrawInReplay = ReplayAvatar.SkeletonList[e.ProgressPercentage].Item2; ReplayViewModel.Get().currentFeedbackList = ReplayViewModel.ListFeedbacks[e.ProgressPercentage]; DrawingSheetAvatarViewModel.Get().draw(this, new EventArgs()); avatarVideoStreamWriter.WriteVideoFrame(DrawingSheetAvatarViewModel.Get().GrabScreenshot()); avatarVideoStreamWriter.WriteVideoFrame(DrawingSheetAvatarViewModel.Get().GrabScreenshot()); } // else it displays just the skeleton and takes one screenshot else { // it changes the current skeleton to draw, next it draws, grabs a screenshot and writes on the video DrawingSheetAvatarViewModel.Get().skToDrawInReplay = ReplayAvatar.SkeletonList[e.ProgressPercentage].Item2; ReplayViewModel.Get().currentFeedbackList = ReplayViewModel.ListFeedbacks[e.ProgressPercentage]; DrawingSheetAvatarViewModel.Get().draw(this, new EventArgs()); avatarVideoStreamWriter.WriteVideoFrame(DrawingSheetAvatarViewModel.Get().GrabScreenshot()); } // it changes the value for the progressBar ExportProgressBar.Value = e.ProgressPercentage; //if it's the last one it closes the video, the view and opens a messageBox to inform the user that is complete and the localization of the file if (e.ProgressPercentage == lengthSkeletonList) { avatarVideoStreamWriter.Close(); Close(); new MessageBoxPerso("Export avatar video", "Export complete\nThe video is located in " + ReplayViewModel.Get().folderPath).ShowDialog(); } }
public ReplayView() { InitializeComponent(); _viewModel = ViewModel.Source as ReplayViewModel; }