コード例 #1
0
ファイル: SerializationHelper.cs プロジェクト: tuliosouza/ASG
        /// <summary>
        /// Builds GestureInfo objects from serialized xml content
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static GestureInfo Desirialize(string xml)
        {
            Contract.Requires(!string.IsNullOrEmpty(xml), "Xml content can not be null or empty");

            GestureInfo gInfo = new GestureInfo();
            // Create xml reader from string
            MemoryStream stream = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(xml));
            //XmlReader reader = XmlReader.Create(stream);

            try
            {
                // Build the deserializer
                DataContractSerializer serializer = new DataContractSerializer(typeof(FrameInfo), GetRequiredKnownTypesForTouchFrameEventArgSerialization());
                System.Diagnostics.Debug.WriteLine(xml);
                gInfo.Frames = serializer.ReadObject(stream) as List<FrameInfo>;

                return gInfo;
            }
            catch (Exception e)
            {
                //TODO: Testing
                string msg = e.Message;
                System.Diagnostics.Debug.WriteLine(msg);
                throw;
            }
            finally
            {
                stream.Dispose();
            }
        }
コード例 #2
0
ファイル: TouchPointHelper.cs プロジェクト: tuliosouza/ASG
        /// <summary>
        /// Merges the frame lists from different gestureInfo into one list
        /// </summary>
        /// <param name="self"></param>
        /// <returns></returns>
        public static GestureInfo Merge(this List<GestureInfo> self)
        {
            // touchIdPadding is used to ensure unique id for each touch point when multiple sets are merged
            int touchIdPadding = 0;

            DateTime startTime = DateTime.Now;
            DateTime timeline = DateTime.Now;
            GestureInfo mergedGestureInfo = new GestureInfo();

            int groupId = 0;
            foreach (var gesture in self)
            {
                touchIdPadding += 50;

                // 1. Update timestamp of each frame in all list
                timeline = startTime;
                foreach (var frame in gesture.Frames)
                {
                    timeline = timeline.AddMilliseconds(frame.WaitTime);
                    frame.TimeStamp = timeline.Ticks;

                    // 1.1 Update groupIds for individual touch
                    foreach (var touch in frame.Touches)
                    {
                        touch.GroupId = groupId;
                        touch.TouchDeviceId += touchIdPadding;
                    }
                }

                // 2. Combine lists into one
                mergedGestureInfo.Frames.AddRange(gesture.Frames);

                groupId++;
            }

            // 3. Sort the unified list
            mergedGestureInfo.Frames.Sort(new FrameInfoComparer());

            return mergedGestureInfo;
        }
コード例 #3
0
ファイル: TouchInputRecorder.cs プロジェクト: tuliosouza/ASG
        private void RunGesture(GestureInfo gestureInfo, GesturePlaybackCompleted playbackCompleted)
        {
            // Set touch provider to virtual touch provider
            var existingInputProvider = TouchInputManager.ActiveTouchProvider;
            GestureFramework.UpdateInputProvider(_touchListener);

            // Initializing background thread to playback recorded gestures
            var threadStart = new ParameterizedThreadStart(RunGesture);
            var backgroundThread = new Thread(threadStart);

            Tuple<GestureInfo, TouchInputRecorder.GesturePlaybackCompleted> args =
                new Tuple<GestureInfo, TouchInputRecorder.GesturePlaybackCompleted>(gestureInfo, playbackCompleted);

            backgroundThread.Start(args);

            // reset touch provider
            GestureFramework.UpdateInputProvider(existingInputProvider);
        }