예제 #1
0
        public bool Modify(IEnumerable <Point2D> newPosition)
        {
            if (!(Positions.Except(newPosition).Any() || newPosition.Except(Positions).Any()))
            {
                return(false);
            }
            var ev = BeforeMoved;

            var eva = new Point2DEventArgs(newPosition);

            if (ev != null)
            {
                ev.Invoke(this, eva);
            }

            if (eva.Abort)
            {
                return(false);
            }

            Positions = newPosition;

            var ev2 = Moved;

            if (ev2 != null)
            {
                ev2.Invoke(this, new Point2DEventArgs(newPosition));
            }

            return(true);
        }
예제 #2
0
        /// <summary>
        /// Moves the thing in the direction of the specified vector
        /// </summary>
        public bool Move(Point2D vector)
        {
            var newPos = Positions.Select(p => p.Translate(vector)).ToList();
            var ev     = BeforeMoved;

            var eva = new Point2DEventArgs(newPos);

            if (ev != null)
            {
                ev.Invoke(this, eva);
            }

            if (eva.Abort)
            {
                return(false);
            }

            Positions = newPos;

            var ev2 = Moved;

            if (ev2 != null)
            {
                ev2.Invoke(this, new Point2DEventArgs(newPos));
            }

            if (_rotationalCentre.HasValue)
            {
                _rotationalCentre = _rotationalCentre.Value.Translate(vector);
            }

            return(true);
        }
예제 #3
0
        public bool Rotate(Point2D?origin = null, int angle = 90)
        {
            var o = origin.GetValueOrDefault(RotationalCentre);

            var newPos = Positions.Select(p => p.Rotate(o, angle)).ToList();

            var ev = BeforeMoved;

            var eva = new Point2DEventArgs(newPos);

            if (ev != null)
            {
                ev.Invoke(this, eva);
            }

            if (eva.Abort)
            {
                return(false);
            }

            Positions = newPos;

            var ev2 = Moved;

            if (ev2 != null)
            {
                ev2.Invoke(this, eva);
            }

            return(true);
        }