public void AssertInManualMode(Action action) { if (Machine.Mode != OperatingMode.Manual) { Machine.AddStatusMessage(StatusMessageTypes.Warning, "Machine Busy"); } else { action(); } }
public void Refresh() { Points.Clear(); RawBoardOutline.Clear(); RaisePropertyChanged(nameof(Points)); RaisePropertyChanged(nameof(RawBoardOutline)); var min = Min; var max = Max; var gridSize = GridSize; if (min.X == max.X) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min X must not equal Max X, both are {min.X}"); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min X must not equal Max X, both are {min.X}"); return; } if (min.Y == max.Y) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min Y must not equal Max Y, both are {min.Y}"); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min Y must not equal Max Y, both are {min.Y}"); return; } if (min.X > max.X) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min X [{min.X}] must be greater than Max X [{max.X}]"); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min X [{min.X}] must be greater than Max X [{max.X}]"); return; } if (min.Y > max.Y) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min Y [{min.Y}] must be greater than Max Y [{max.Y}]"); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min Y [{min.Y}] must be greater than Max Y [{max.Y}]"); return; } if (gridSize == 0) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Grid Size must not equal to 0."); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Grid Size must not be equal to 0."); return; } var pointsX = (int)Math.Ceiling((max.X - min.X) / gridSize) + 1; var pointsY = (int)Math.Ceiling((max.Y - min.Y) / gridSize) + 1; if (pointsX == 0 || pointsY == 0) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Grid Size too large for board size."); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Grid Size too large for board size.."); return; } SizeX = pointsX; SizeY = pointsY; for (var x = 0; x < SizeX; x++) { for (var y = 0; y < SizeY; y++) { var xPosition = (x * (Max.X - Min.X)) / (SizeX - 1) + Min.X; var yPosition = (y * (Max.Y - Min.Y)) / (SizeY - 1) + Min.Y; Points.Add(new HeightMapProbePoint() { XIndex = x, YIndex = y, Point = new Vector3(xPosition, yPosition, 0), Status = HeightMapProbePointStatus.NotProbed }); } } RawBoardOutline.Add(Line3D.Create(Min.X, Min.Y, 0, Min.X, Max.Y, 0)); RawBoardOutline.Add(Line3D.Create(Min.X, Max.Y, 0, Max.X, Max.Y, 0)); RawBoardOutline.Add(Line3D.Create(Max.X, Max.Y, 0, Max.X, Min.Y, 0)); RawBoardOutline.Add(Line3D.Create(Max.X, Min.Y, 0, Min.X, Min.Y, 0)); RaisePropertyChanged(nameof(RawBoardOutline)); RaisePropertyChanged(nameof(Points)); RaisePropertyChanged(nameof(Min)); RaisePropertyChanged(nameof(Max)); Initialized = true; }
public void Timer_Tick(object state) { switch (_state) { case BoardAlignmentManagerStates.StabilzingAfterFirstFiducialMove: case BoardAlignmentManagerStates.StabilzingAfterSecondFiducialMove: case BoardAlignmentManagerStates.EvaluatingInitialAlignment: /* * This is after the move has stabilzed and we are looking for circle with * an in tolerance center point. If this times out there could be too * much noise coming from the vision center OR it's not locating the fiducial */ if ((DateTime.Now - _lastEvent).TotalSeconds > 5) { _timer.Change(Timeout.Infinite, Timeout.Infinite); _machine.AddStatusMessage(StatusMessageTypes.FatalError, "TimeedOut - Board Alignment: " + State.ToString()); State = BoardAlignmentManagerStates.TimedOut; _machine.SetMode(OperatingMode.Manual); _targetLocation = null; } break; case BoardAlignmentManagerStates.CenteringSecondFiducial: case BoardAlignmentManagerStates.CenteringFirstFiducial: if ((DateTime.Now - _lastEvent).TotalSeconds > 5) { _timer.Change(Timeout.Infinite, Timeout.Infinite); _machine.AddStatusMessage(StatusMessageTypes.FatalError, "TimeedOut - Board Alignment: " + State.ToString()); State = BoardAlignmentManagerStates.TimedOut; _machine.SetMode(OperatingMode.Manual); _targetLocation = null; } break; case BoardAlignmentManagerStates.MovingToSecondFiducial: if ((DateTime.Now - _lastEvent).TotalSeconds > 5) { _timer.Change(Timeout.Infinite, Timeout.Infinite); _machine.AddStatusMessage(StatusMessageTypes.FatalError, "TimeedOut - Board Alignment: " + State.ToString()); State = BoardAlignmentManagerStates.TimedOut; _machine.SetMode(OperatingMode.Manual); _targetLocation = null; } break; } }