// Removes a control from the event. If the control is present in any course as a course-control, those
// course-controls are also removed.
public static void RemoveControl(EventDB eventDB, Id<ControlPoint> controlId)
{
// Find all of the courses/course-controls that are this control.
foreach (Id<Course> courseId in QueryEvent.CoursesUsingControl(eventDB, controlId)) {
Id<CourseControl> courseControlId;
do {
// Remove one course control could remove multiple, so only remove first of the course controls that use that control, then
// check again.
courseControlId = QueryEvent.GetCourseControlsInCourse(eventDB, new CourseDesignator(courseId), controlId).FirstOrDefault();
if (courseControlId.IsNotNone)
RemoveCourseControl(eventDB, courseId, courseControlId);
} while (courseControlId.IsNotNone);
}
// Find all of the legs that use this control and remove them.
List<Id<Leg>> legIdList = new List<Id<Leg>>();
foreach (Id<Leg> legId in eventDB.AllLegIds) {
Leg leg = eventDB.GetLeg(legId);
if (leg.controlId1 == controlId || leg.controlId2 == controlId)
legIdList.Add(legId);
}
foreach (Id<Leg> legId in legIdList)
eventDB.RemoveLeg(legId);
// Remove the control point itself.
eventDB.RemoveControlPoint(controlId);
}