void CEllipseCenterGroup::AddPoint(CAtlList<EllipseCenter>& centers, IntersectFunction intersect, int x, int y) { POSITION pos = centers.GetTailPosition(); while (pos) { POSITION posCur = pos; auto& center = centers.GetPrev(pos); int dyIntersect = intersect(x - center.x, y - center.y); if (dyIntersect != CEllipse::NO_INTERSECT_INNER) { int yIntersect = (dyIntersect == CEllipse::NO_INTERSECT_OUTER) ? (y - m_pEllipse->GetYRadius() - 1) : (center.y + dyIntersect); if (yIntersect < center.yStopDrawing) { center.yStopDrawing = yIntersect; if (pos && center.yStopDrawing <= centers.GetAt(pos).yStopDrawing) { centers.RemoveAt(posCur); } } else { break; } } } auto& center = centers.GetAt(centers.AddTail()); center.x = x; center.y = y; center.yStopDrawing = y + m_pEllipse->GetYRadius(); }