public CropService(FrameworkElement adornedElement) { _adornedElement = adornedElement; _canvas = new Canvas { Height = adornedElement.ActualHeight, Width = adornedElement.ActualWidth }; _cropAdorner = new CropAdorner(adornedElement, _canvas); var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); Debug.Assert(adornerLayer != null, nameof(adornerLayer) + " != null"); adornerLayer.Add(_cropAdorner); _cropTool = new CropTool(_canvas); _cropTool.CroppedAreaChangedEvent += OnCroppedAreaChanged; _createState = new CreateState(_cropTool, _canvas); _completeState = new CompleteState(); _dragState = new DragState(_cropTool, _canvas); _currentToolState = _completeState; _cropAdorner.MouseLeftButtonDown += AdornerOnMouseLeftButtonDown; _cropAdorner.MouseMove += AdornerOnMouseMove; _cropAdorner.MouseLeftButtonUp += AdornerOnMouseLeftButtonUp; _cropTool.Redraw(0, 0, 0, 0); }
public CNCState.CNCState ProcessToolStart(int tool_id, IReadOnlyDictionary <string, decimal> options, ActionProgram.ActionProgram program, CNCState.CNCState state) { state = state.BuildCopy(); IToolState toolState = state.ToolStates[tool_id]; if (toolState is SpindleState ss) { ss.SpindleSpeed = options["speed"]; if (options["ccw"] != 0) { ss.RotationState = SpindleState.SpindleRotationState.CounterClockwise; } else { ss.RotationState = SpindleState.SpindleRotationState.Clockwise; } } else if (toolState is BinaryState bs) { bs.Enabled = true; } return(CommitTool(tool_id, program, state)); }
void GuardAgainstInvalidState(IDictionary <string, string> runParameters, IToolState toolState) { if (RunParametersAreDifferent(runParameters, toolState)) { var sb = new StringBuilder(); sb.AppendLine("In progress migration parameters didn't match, either rerun with the --abort option or adjust the parameters to match to continue the current migration:"); sb.AppendLine($"\t'--endpoint': '{toolState.EndpointName}'."); foreach (var setting in toolState.RunParameters) { sb.AppendLine($"\t'{setting.Key}': '{setting.Value}'."); } throw new Exception(sb.ToString()); } if (toolState.Status == MigrationStatus.Preparing) { throw new Exception( "The last migration must have failed while preparing. You need to first run abort."); } logger.LogInformation("Resuming in progress migration"); }
async Task Run(IToolState toolState) { BatchInfo batch; await using var endpointTarget = await timeoutsTarget.PrepareTargetEndpointBatchMigrator(toolState.EndpointName); while ((batch = await toolState.TryGetNextBatch()) != null) { var batchWatch = Stopwatch.StartNew(); logger.LogInformation($"Migrating batch {batch.Number}"); var needToRecover = false; if (batch.State == BatchState.Pending) { logger.LogDebug($"Reading batch number {batch.Number}"); var timeouts = await timeoutsSource.ReadBatch(batch.Number); if (timeouts.Count != batch.NumberOfTimeouts) { throw new Exception($"Expected to retrieve {batch.NumberOfTimeouts} timeouts but only found {timeouts.Count}"); } logger.LogDebug($"Staging batch number {batch.Number}"); var stagedTimeoutCount = await endpointTarget.StageBatch(timeouts, batch.Number); if (batch.NumberOfTimeouts != stagedTimeoutCount) { throw new InvalidOperationException($"The amount of staged timeouts does not match the amount of timeouts in the batch of a number: {batch.Number}. Staged amount of timeouts: {stagedTimeoutCount}, batch contains {batch.NumberOfTimeouts}."); } batch.State = BatchState.Staged; await timeoutsSource.MarkBatchAsStaged(batch.Number); } else { needToRecover = true; logger.LogWarning($"Batch {batch.Number} is recovering."); } logger.LogDebug($"Migrating batch number {batch.Number} from staging to destination"); var completedTimeoutsCount = await endpointTarget.CompleteBatch(batch.Number); if (!needToRecover && batch.NumberOfTimeouts != completedTimeoutsCount) { throw new InvalidOperationException($"The amount of completed timeouts does not match the amount of timeouts in the batch of a number: {batch.Number}. Completed amount of timeouts: {completedTimeoutsCount}, batch contains {batch.NumberOfTimeouts}."); } batch.State = BatchState.Completed; await timeoutsSource.MarkBatchAsCompleted(batch.Number); batchWatch.Stop(); logger.LogInformation($"Batch {batch.Number} migrated in {batchWatch.Elapsed:hh\\:mm\\:ss}"); } await timeoutsSource.Complete(); await timeoutsTarget.Complete(toolState.EndpointName); }
public CropService(FrameworkElement adornedElement) { if (adornedElement == null) { return; } // Make sure menus are hidden when cropping UILogic.UC.Close_UserControls(); // Show context menu _ = new CropContextMenu(); canvas = new Canvas { Height = adornedElement.ActualHeight, Width = adornedElement.ActualWidth }; cropAdorner = new CropAdorner(adornedElement, canvas); var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); Debug.Assert(adornerLayer != null, nameof(adornerLayer) + " != null"); adornerLayer.Add(cropAdorner); var cropShape = new CropShape( new Rectangle { Height = 4, Width = 4, Stroke = (SolidColorBrush)Application.Current.Resources["MainColorBrush"], StrokeThickness = 2 } ); cropTool = new CropTool(canvas); createState = new CreateState(cropTool, canvas); completeState = new CompleteState(); dragState = new DragState(cropTool, canvas); currentToolState = completeState; cropAdorner.PreviewMouseLeftButtonDown += AdornerOnMouseLeftButtonDown; cropAdorner.PreviewMouseMove += AdornerOnMouseMove; cropAdorner.PreviewMouseLeftButtonUp += AdornerOnMouseLeftButtonUp; cropTool.Redraw(0, 0, 0, 0); }
private void AdornerOnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { _canvas.CaptureMouse(); var point = e.GetPosition(_canvas); var touch = GetTouchPoint(point); if (touch == TouchPoint.OutsideRectangle) { _currentToolState = _createState; } else if (touch == TouchPoint.InsideRectangle) { _currentToolState = _dragState; } _currentToolState.OnMouseDown(point); }
public CropService(FrameworkElement adornedElement, bool squareSelection) { //Hack: added by thr _squareSelection = squareSelection; _canvas = new Canvas { Height = adornedElement.ActualHeight, Width = adornedElement.ActualWidth }; _cropAdorner = new CropAdorner(adornedElement, _canvas); var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); Debug.Assert(adornerLayer != null, nameof(adornerLayer) + " != null"); adornerLayer.Add(_cropAdorner); var cropShape = new CropShape( new Rectangle { Height = 0, Width = 0, Stroke = Brushes.Black, StrokeThickness = 1.5 }, new Rectangle { Stroke = Brushes.White, StrokeDashArray = new DoubleCollection(new double[] { 4, 4 }) } ); _cropTool = new CropTool(_canvas, _squareSelection); _createState = new CreateState(_cropTool, _canvas); _completeState = new CompleteState(); _dragState = new DragState(_cropTool, _canvas); _currentToolState = _completeState; _cropAdorner.MouseLeftButtonDown += AdornerOnMouseLeftButtonDown; _cropAdorner.MouseMove += AdornerOnMouseMove; _cropAdorner.MouseLeftButtonUp += AdornerOnMouseLeftButtonUp; _cropTool.Redraw(0, 0, 0, 0); }
public CNCState.CNCState ProcessToolStop(int tool_id, ActionProgram.ActionProgram program, CNCState.CNCState state) { state = state.BuildCopy(); IToolState toolState = state.ToolStates[tool_id]; if (toolState is SpindleState ss) { ss.RotationState = SpindleState.SpindleRotationState.Off; } else if (toolState is BinaryState bs) { bs.Enabled = false; } return(CommitTool(tool_id, program, state)); }
private void AdornerOnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { canvas.CaptureMouse(); var point = e.GetPosition(canvas); var touch = GetTouchPoint(point); if (touch == TouchPoint.OutsideRectangle) { if (cropTool.Width >= 1 && cropTool.Height >= 1) { // Don't deselect when clicking outside rect return; } currentToolState = createState; } else if (touch == TouchPoint.InsideRectangle) { currentToolState = dragState; } currentToolState.OnMouseDown(point); }
bool RunParametersAreDifferent(IDictionary <string, string> runParameters, IToolState currentRunState) { var currentRunParameters = currentRunState.RunParameters; if (runParameters.Count != currentRunParameters.Count) { return(true); } foreach (var parameterKey in runParameters.Keys) { if (!currentRunParameters.ContainsKey(parameterKey)) { return(true); } if (!string.Equals(runParameters[parameterKey], currentRunParameters[parameterKey], StringComparison.OrdinalIgnoreCase)) { return(true); } } return(false); }
private void AdornerOnMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { _canvas.ReleaseMouseCapture(); _currentToolState = _completeState; }
public void SetupToolStateToReturn(IToolState toolState) { existingToolState = toolState; }
private void button3_Click(object sender, EventArgs e) { tool = new CircleState(bitmap); drawer.SetState(tool); }
public void SetState(IToolState state) { ToolState = state; }