public LineBounds(CanvasShape canvasShape, LineShape lineShape) { _lineShape = lineShape; _canvasShape = canvasShape; _hitResult = HitResult.None; _linePolygon = CreatePolygon(4); _point1Polygon = CreatePolygon(4); _point2Polygon = CreatePolygon(4); _rectangleShape = new RectangleShape(); }
public LineTool(CanvasShape drawingCanvas, CanvasShape boundsCanvas) { _drawingCanvas = drawingCanvas; _boundsCanvas = boundsCanvas; var moves = _drawingCanvas.Moves.Where(_ => _drawingCanvas.IsCaptured?.Invoke() == true); var drags = Observable.Merge(_drawingCanvas.Downs, _drawingCanvas.Ups, moves); _downs = _drawingCanvas.Downs.Where(_ => IsEnabled).Subscribe(p => { if (_drawingCanvas.IsCaptured?.Invoke() == true) { _lineShape.Bounds.Hide(); _drawingCanvas.InvalidateShape?.Invoke(); _boundsCanvas.InvalidateShape?.Invoke(); _state = State.None; _drawingCanvas.ReleaseCapture?.Invoke(); } else { _lineShape = new LineShape(); _lineShape.Point1.X = p.X; _lineShape.Point1.Y = p.Y; _lineShape.Point2.X = p.X; _lineShape.Point2.Y = p.Y; _drawingCanvas.Children.Add(_lineShape); _lineShape.Bounds = new LineBounds(_boundsCanvas, _lineShape); _lineShape.Bounds.Update(); _lineShape.Bounds.Show(); _drawingCanvas.Capture?.Invoke(); _drawingCanvas.InvalidateShape?.Invoke(); _boundsCanvas.InvalidateShape?.Invoke(); _state = State.End; } }); _drags = drags.Where(_ => IsEnabled).Subscribe(p => { if (_state == State.End) { _lineShape.Point2.X = p.X; _lineShape.Point2.Y = p.Y; _lineShape.Bounds.Update(); _drawingCanvas.InvalidateShape?.Invoke(); _boundsCanvas.InvalidateShape?.Invoke(); } }); }