/// <summary> /// Convert point array string into array of points. /// </summary> /// <param name="pointArray">Point array string.</param> /// <returns>Returns ISignatureCaptureInfo.</returns> private static ISignatureCaptureInfo ParsePointArray(string pointArray) { ISignatureCaptureInfo signatureCaptureInfo = Peripherals.InternalApplication.BusinessLogic.Utility.CreateSignatureCaptureInfo(); signatureCaptureInfo.Left = int.MaxValue; signatureCaptureInfo.Top = int.MaxValue; if (!string.IsNullOrWhiteSpace(pointArray)) { Point point; int step = 4; // process 4 characters each step List <Point> points = new List <Point>(pointArray.Length / step); // Each point is represented by four characters: x(low 8 bits), x(hight 8 bits), y(low 8 bits), y(hight 8 bits) for (int i = 0; i + step <= pointArray.Length; i += step) { point = GetPoint(pointArray[i], pointArray[i + 1], pointArray[i + 2], pointArray[i + 3]); if (!IsEndPoint(point)) { signatureCaptureInfo.Right = signatureCaptureInfo.Right < point.X ? point.X : signatureCaptureInfo.Right; signatureCaptureInfo.Bottom = signatureCaptureInfo.Bottom < point.Y ? point.Y : signatureCaptureInfo.Bottom; signatureCaptureInfo.Left = signatureCaptureInfo.Left > point.X ? point.X : signatureCaptureInfo.Left; signatureCaptureInfo.Top = signatureCaptureInfo.Top > point.Y ? point.Y : signatureCaptureInfo.Top; } points.Add(point); } signatureCaptureInfo.Points = new ReadOnlyCollection <Point>(points); } return(signatureCaptureInfo); }
private void oposSigCapClass_DataEvent(int status) { NetTracer.Information("Peripheral [SigCap] - Data Event: {0}", status); if (this.CaptureCompleteEvent != null && !string.IsNullOrEmpty(this.oposSigCapClass.PointArray)) { // [romanv] // Verifone Only: ISignatureCaptureInfo signatureCaptureInfo = ParsePointArray(this.oposSigCapClass.RawData.Substring(10)); // Point array returns very choppy data. We need to follow up on why it has low accuracy. ISignatureCaptureInfo signatureCaptureInfo = ParsePointArray(this.oposSigCapClass.PointArray); signatureCaptureInfo.StatusCode = status; this.CaptureCompleteEvent(this, signatureCaptureInfo); } }