Beispiel #1
0
        /// <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;
        }
Beispiel #2
0
 /// <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);
        }
Beispiel #4
0
 /// <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();
     }
 }
Beispiel #5
0
        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;
 }