private void CreateControlNumber(CourseView.ControlView controlView, ControlPosition controlPosition) { Id<ControlPoint> controlId = controlView.controlId; Id<CourseControl> courseControlId = controlView.courseControlIds[0]; ControlPoint control = eventDB.GetControl(controlId); PointF location = LocationFromAbstractPosition(controlPosition.x, controlPosition.y); CourseLayer layer; if (ControlViewInSpecificVariation(controlView)) layer = courseLayerSpecificVariation; else layer = courseLayerAllVariationsAndParts; CourseObj courseObj; switch (control.kind) { case ControlPointKind.Start: case ControlPointKind.MapExchange: // Triangle looks best if we displace it down a bit (0.8 looks right). courseObj = new StartCourseObj(controlId, courseControlId, scaleRatio * 0.75F, appearance, 0, new PointF(location.X, location.Y - 0.8F), CrossHairOptions.NoCrossHair); break; case ControlPointKind.Finish: courseObj = new FinishCourseObj(controlId, courseControlId, scaleRatio * 0.75F, appearance, null, location, CrossHairOptions.NoCrossHair); break; case ControlPointKind.Normal: courseObj = new ControlNumberCourseObj(controlId, courseControlId, scaleRatio, appearance, control.code, location); break; case ControlPointKind.CrossingPoint: courseObj = new CrossingCourseObj(controlId, courseControlId, Id<Special>.None, scaleRatio * 1.5F, appearance, 0, location); break; default: Debug.Fail("bad control kind"); return; } courseObj.layer = layer; courseLayout.AddCourseObject(courseObj); }
static CourseObj CreateCourseObject(EventDB eventDB, float scaleRatio, CourseAppearance appearance, float printScale, Id<ControlPoint> controlId, Id<CourseControl> courseControlId, double angleOut) { ControlPoint control = eventDB.GetControl(controlId); CircleGap[] gaps = QueryEvent.GetControlGaps(eventDB, controlId, printScale); CourseObj courseObj = null; switch (control.kind) { case ControlPointKind.Start: case ControlPointKind.MapExchange: courseObj = new StartCourseObj(controlId, courseControlId, scaleRatio, appearance, double.IsNaN(angleOut) ? 0 : (float)Geometry.RadiansToDegrees(angleOut), control.location, CrossHairOptions.HighlightCrossHair); break; case ControlPointKind.Finish: courseObj = new FinishCourseObj(controlId, courseControlId, scaleRatio, appearance, gaps, control.location, CrossHairOptions.HighlightCrossHair); break; case ControlPointKind.Normal: courseObj = new ControlCourseObj(controlId, courseControlId, scaleRatio, appearance, gaps, control.location); break; case ControlPointKind.CrossingPoint: courseObj = new CrossingCourseObj(controlId, courseControlId, Id<Special>.None, scaleRatio, appearance, control.orientation, control.location); break; default: Debug.Fail("bad control kind"); return null; } return courseObj; }