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); }
/// <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); }
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); }