Beispiel #1
0
        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));
        }
Beispiel #9
0
        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;
 }
Beispiel #13
0
 private void button3_Click(object sender, EventArgs e)
 {
     tool = new CircleState(bitmap);
     drawer.SetState(tool);
 }
Beispiel #14
0
 public void SetState(IToolState state)
 {
     ToolState = state;
 }