public FilledRegion Apply(FillData data) { float OuterCircle = data.BeingFilled.Width * 0.5f; if (OuterCircle <= InnerCircle) { throw new ArgumentOutOfRangeException("The outer radius has to be larger than the inner radius!"); } Location center = data.BeingFilled.Center; //Make the circles. data.FillCircle(true, center, OuterCircle); data.FillCircle(false, center, InnerCircle); //Make the lines to get to the inner circle. data.FillLine(false, center, data.BeingFilled.BottomMid); data.FillLine(false, center, data.BeingFilled.TopMid); data.FillLine(false, center, data.BeingFilled.LeftMid); data.FillLine(false, center, data.BeingFilled.RightMid); //For spawn points, give the two points just to the left/right of the inner circle. return(new CircleRegion(data.BeingFilled, InnerCircle)); }