/// <summary> /// Mapping the point /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PenFound(object sender, PenFoundEventArgs e) { var point = _mapper.FromPresentation(e.Frame.Point.X, e.Frame.Point.Y); var frame = e.Frame.ApplyRebase(point); if (PenPositionChanged != null) { PenPositionChanged(this, new VirtualPenPositionEventArgs(frame, CalibratorGrid.Contains(point))); } }
/// <summary> /// calculate the blob's position based on the grids position /// </summary> /// <param name="b"></param> /// <param name="offset"></param> private void ProcessBlobs(BlobCounter b, int offset) { double xOff = ((_calibrationStep - 3) % (int)Math.Sqrt(CalibrationFrames - 3)) * _sqrwidth / (int)Math.Sqrt(CalibrationFrames - 3); double yOff = Math.Floor((_calibrationStep - 3) / Math.Sqrt(CalibrationFrames - 3)) * _sqrwidth / (int)Math.Sqrt(CalibrationFrames - 3); foreach (var blob in b.GetObjectsInformation()) { var pos = _mapper.FromPresentation(blob.CenterOfGravity); if (pos.X >= 0 && pos.X <= _vs.Width && pos.Y >= 0 && pos.Y <= _vs.Height) { var xPos = (int)Math.Floor((pos.X - xOff) / _sqrwidth); var yPos = (int)Math.Floor((pos.Y - yOff) / _sqrheight); #if DEBUG using (var g = Graphics.FromImage(actImg)) { g.DrawString(yPos + "," + xPos, new Font(FontFamily.GenericSansSerif, 8.0f), new SolidBrush(Color.White), blob.CenterOfGravity.X, blob.CenterOfGravity.Y); g.Flush(); //Debug.WriteLine("wrote to image"); } #endif if (xPos % 2 == offset && yPos % 2 == offset) // check if the position is plausible { var corners = PointsCloud.FindQuadrilateralCorners(b.GetBlobsEdgePoints(blob)); if (corners.Count == 4) { RecursiveAForgeCalibrator.GridBlobs.InPlaceSort(corners); Grid.AddPoint((int)(xPos * _sqrwidth + xOff), (int)(yPos * _sqrheight + yOff), corners[0].X, corners[0].Y); Grid.AddPoint((int)((xPos + 1) * _sqrwidth + xOff), (int)(yPos * _sqrheight + yOff), corners[1].X, corners[1].Y); Grid.AddPoint((int)(xPos * _sqrwidth + xOff), (int)((yPos + 1) * _sqrheight + yOff), corners[2].X, corners[2].Y); Grid.AddPoint((int)((xPos + 1) * _sqrwidth + xOff), (int)((yPos + 1) * _sqrheight + yOff), corners[3].X, corners[3].Y); } } } } }