Beispiel #1
0
        private void TryApply(IWriteableGrid <TCell> canvas, IGridBrushArgs args, TPaint paint)
        {
            var segment = new Segment(args.WorldPoint, _previousWorldPoint);

            IEnumerable <int[]> indexIntersection = canvas.IndexIntersection(segment);

            foreach (int[] indexes in indexIntersection)
            {
                int x = indexes[1];
                int y = indexes[0];

                for (int i = 0; i < _brushRange.Lengths[0]; i++)
                {
                    for (int j = 0; j < _brushRange.Lengths[1]; j++)
                    {
                        Point   gridPoint  = new Point(x + _brushRange.StartingIndex[1] + j, y + _brushRange.StartingIndex[0] + i);
                        Vector2 worldPoint = canvas.ToWorldPoint(gridPoint);

                        var cellArgs = new GridBrushArgs(gridPoint, worldPoint);
                        if (paint.CanApply(canvas, cellArgs))
                        {
                            paint.Apply(canvas, cellArgs);
                        }
                    }
                }
            }
        }
Beispiel #2
0
        public override void StartApply(IWriteableGrid <TCell> canvas, IGridBrushArgs args, TPaint paint)
        {
            _previousGridPoint  = args.GridPoint;
            _previousWorldPoint = args.WorldPoint;

            TryApply(canvas, args, paint);
        }
Beispiel #3
0
        public override void UpdateApply(IWriteableGrid <TCell> canvas, IGridBrushArgs args, TPaint paint)
        {
            if (_previousGridPoint != args.GridPoint)
            {
                TryApply(canvas, args, paint);
            }

            _previousGridPoint  = args.GridPoint;
            _previousWorldPoint = args.WorldPoint;
        }
Beispiel #4
0
        public override void EndApply(IWriteableGrid <TCell> canvas, IGridBrushArgs args, TPaint paint)
        {
            Rectangle rectangle = MathUtils.GetBoundingBox(args.GridPoint, _startPoint).ClampToRectangle(canvas.IndexesBounds());

            for (int i = rectangle.Top; i <= rectangle.Bottom; i++)
            {
                for (int j = rectangle.Left; j <= rectangle.Right; j++)
                {
                    var point = new Point(j, i);
                    paint.Apply(canvas, new GridBrushArgs(point, canvas.ToWorldPoint(point)));
                }
            }
        }
Beispiel #5
0
 public override bool CanEndApply(IWriteableGrid <TCell> canvas, IGridBrushArgs args, TPaint paint) => true;
Beispiel #6
0
 public override void StartApply(IWriteableGrid <TCell> canvas, IGridBrushArgs args, TPaint paint)
 {
     _startPoint = args.GridPoint;
 }
Beispiel #7
0
 public override bool CanEndApply(IWriteableGrid <TCell> canvas, IGridBrushArgs args, TPaint paint)
 {
     return(paint.CanApply(canvas, args));
 }
Beispiel #8
0
 public override void EndApply(IWriteableGrid <TCell> canvas, IGridBrushArgs args, TPaint paint)
 {
     paint.Apply(canvas, args);
 }
Beispiel #9
0
 static public IWriteableGrid <TNewValue> Retype <TOldValue, TNewValue>(this IWriteableGrid <TOldValue> array, Func <TOldValue, TNewValue> getter, Action <TOldValue, TNewValue> setter)
 {
     return(new RetypedWriteableGrid <TOldValue, TNewValue>(array, getter, setter));
 }