private void CalculatePoints() { List <MyPoint> ListToReturn = new List <MyPoint>(); MyPoint lastPoint, pointToAdd; PointF R1Center = new PointF(X, Y); PointF R2Center = new PointF(X, Y); float A_visible = A - E; float B_Visible = (B - R3 * 2) / 2; float D_visible = R1Center.X - R1 + D - GetPointByAngle(R1Center, R1, GetCollisionAngle(R1, C)).X; //outer part //R2 circle points float CollAngle = GetCollisionAngle(R2, B); ListToReturn.AddRange(CirclePoints(R2Center, R2, CollAngle, 360 - CollAngle)); //E upper lastPoint = ListToReturn.Last(); pointToAdd = new MyPoint(lastPoint.GetPoint().X + E, lastPoint.GetPoint().Y, false); ListToReturn.Add(pointToAdd); pointToAdd = null; //B upper half lastPoint = ListToReturn.Last(); pointToAdd = new MyPoint(lastPoint.GetPoint().X, lastPoint.GetPoint().Y + B_Visible, false); ListToReturn.Add(pointToAdd); pointToAdd = null; //A upper lastPoint = ListToReturn.Last(); pointToAdd = new MyPoint(lastPoint.GetPoint().X + A_visible, lastPoint.GetPoint().Y, false); ListToReturn.Add(pointToAdd); pointToAdd = null; //R3 circle points lastPoint = ListToReturn.Last(); PointF R3Center = new PointF(lastPoint.GetPoint().X, lastPoint.GetPoint().Y + R3); ListToReturn.AddRange(CirclePoints(R3Center, R3, 270, 90)); //A bottom lastPoint = ListToReturn.Last(); pointToAdd = new MyPoint(lastPoint.GetPoint().X - A_visible, lastPoint.GetPoint().Y, false); ListToReturn.Add(pointToAdd); pointToAdd = null; //B bottom half lastPoint = ListToReturn.Last(); pointToAdd = new MyPoint(lastPoint.GetPoint().X, lastPoint.GetPoint().Y + B_Visible, false); ListToReturn.Add(pointToAdd); pointToAdd = null; //E bottom lastPoint = ListToReturn.Last(); pointToAdd = new MyPoint(lastPoint.GetPoint().X - E, lastPoint.GetPoint().Y, false); ListToReturn.Add(pointToAdd); pointToAdd = null; //inner part //R1 circle CollAngle = GetCollisionAngle(R1, C); ListToReturn.AddRange(CirclePoints(R1Center, R1, CollAngle, 360 - CollAngle)); //D upper lastPoint = ListToReturn.Last(); pointToAdd = new MyPoint(lastPoint.GetPoint().X + D_visible, lastPoint.GetPoint().Y, false); ListToReturn.Add(pointToAdd); pointToAdd = null; //C line lastPoint = ListToReturn.Last(); pointToAdd = new MyPoint(lastPoint.GetPoint().X, lastPoint.GetPoint().Y + C, false); ListToReturn.Add(pointToAdd); pointToAdd = null; //D bottom lastPoint = ListToReturn.Last(); pointToAdd = new MyPoint(lastPoint.GetPoint().X - D_visible, lastPoint.GetPoint().Y, false); ListToReturn.Add(pointToAdd); pointToAdd = null; DetailPoints = ListToReturn; }