private void InitializeDisplayObjects() { grid = new GridDisplayObject(); // add seperate from display object service Services.DisplayObjectService.Add(grid, true); // car object CarDisplayObject carDisplayObject = new CarDisplayObject("tahoe", Color.SkyBlue); carDisplayObject.AttachToVehicleState = true; Services.DisplayObjectService.Add(carDisplayObject, true); // tracked paths TrackedPathDisplayObject posePath = new TrackedPathDisplayObject("paths/pose", Color.LightBlue); disposables.Add(DataItemAttacher.Attach(posePath, OperationalInterface.Dataset.ItemAs<Coordinates>("xy"))); Services.DisplayObjectService.Add(posePath, true); TrackedPathDisplayObject posteriorPosePath = new TrackedPathDisplayObject("paths/posterior pose", Color.DarkGreen); disposables.Add(DataItemAttacher.Attach(posteriorPosePath, OperationalInterface.Dataset.ItemAs<Coordinates>("posterior pose"))); Services.DisplayObjectService.Add(posteriorPosePath, true); TrackedPathDisplayObject hpPath = new TrackedPathDisplayObject("paths/hp", Color.HotPink); disposables.Add(DataItemAttacher.Attach(hpPath, OperationalInterface.Dataset.ItemAs<Coordinates>("hp xy"))); Services.DisplayObjectService.Add(hpPath, true); TrackedPathDisplayObject sepPath = new TrackedPathDisplayObject("paths/septentrio", Color.DarkRed); disposables.Add(DataItemAttacher.Attach(sepPath, OperationalInterface.Dataset.ItemAs<Coordinates>("gps xy"))); Services.DisplayObjectService.Add(sepPath, true); // path point PointDisplayObject pathPoint = new PointDisplayObject("tracking/path point", "path point", Color.Green, ControlPointStyle.LargeX, ContentAlignment.BottomRight); disposables.Add(DataItemAttacher.Attach(pathPoint, OperationalInterface.Dataset.ItemAs<Coordinates>("path point"))); Services.DisplayObjectService.Add(pathPoint, true); LineListDisplayObject trackingPath = new LineListDisplayObject("tracking/tracking path", Color.DeepPink); disposables.Add(DataItemAttacher.Attach(trackingPath, OperationalInterface.Dataset.ItemAs<LineList>("tracking path"))); Services.DisplayObjectService.Add(trackingPath, false); // u-turn stuff CircleDisplayObject uturnCircle = new CircleDisplayObject("u-turn/planned circle", Color.Magenta); disposables.Add(DataItemAttacher.Attach(uturnCircle, OperationalInterface.Dataset.ItemAs<Circle>("uturn circle"))); Services.DisplayObjectService.Add(uturnCircle, true); PointDisplayObject uturnStopPoint = new PointDisplayObject("u-turn/stop point", null, Color.Black, ControlPointStyle.SmallX, ContentAlignment.BottomRight); disposables.Add(DataItemAttacher.Attach(uturnStopPoint, OperationalInterface.Dataset.ItemAs<Coordinates>("uturn stop point"))); Services.DisplayObjectService.Add(uturnStopPoint, true); PolygonDisplayObject uturnPolygon = new PolygonDisplayObject("u-turn/polygon", Color.BurlyWood, false); disposables.Add(DataItemAttacher.Attach(uturnPolygon, OperationalInterface.Dataset.ItemAs<Polygon>("uturn polygon"))); Services.DisplayObjectService.Add(uturnPolygon, true); // original path objects (paths frank sends) LineListDisplayObject originalPath1 = new LineListDisplayObject("planning/original path 1", Color.DarkOrchid); disposables.Add(DataItemAttacher.Attach(originalPath1, OperationalInterface.Dataset.ItemAs<LineList>("original path1"))); Services.DisplayObjectService.Add(originalPath1, true); LineListDisplayObject originalpath2 = new LineListDisplayObject("planning/original path 2", Color.DarkSeaGreen); disposables.Add(DataItemAttacher.Attach(originalpath2, OperationalInterface.Dataset.ItemAs<LineList>("original path2"))); Services.DisplayObjectService.Add(originalpath2, true); // planned path objects LineListDisplayObject smoothedPath = new LineListDisplayObject("planning/smoothed path", Color.OrangeRed); disposables.Add(DataItemAttacher.Attach(smoothedPath, OperationalInterface.Dataset.ItemAs<LineList>("smoothed path"))); Services.DisplayObjectService.Add(smoothedPath, true); LineListDisplayObject leftBound = new LineListDisplayObject("planning/left bound", Color.Blue); disposables.Add(DataItemAttacher.Attach(leftBound, OperationalInterface.Dataset.ItemAs<LineList>("left bound"))); Services.DisplayObjectService.Add(leftBound, true); LineListDisplayObject rightBound = new LineListDisplayObject("planning/right bound", Color.Red); disposables.Add(DataItemAttacher.Attach(rightBound, OperationalInterface.Dataset.ItemAs<LineList>("right bound"))); Services.DisplayObjectService.Add(rightBound, true); LineListDisplayObject subPath = new LineListDisplayObject("planning/subpath", Color.SaddleBrown); disposables.Add(DataItemAttacher.Attach(subPath, OperationalInterface.Dataset.ItemAs<LineList>("subpath"))); Services.DisplayObjectService.Add(subPath, false); LineListDisplayObject predictionPath = new LineListDisplayObject("planning/prediction", Color.DarkViolet); disposables.Add(DataItemAttacher.Attach(predictionPath, OperationalInterface.Dataset.ItemAs<LineList>("prediction path"))); Services.DisplayObjectService.Add(predictionPath, false); LineListDisplayObject predictionPath2 = new LineListDisplayObject("planning/prediction2", Color.Magenta); disposables.Add(DataItemAttacher.Attach(predictionPath2, OperationalInterface.Dataset.ItemAs<LineList>("prediction path2"))); Services.DisplayObjectService.Add(predictionPath2, false); LineListDisplayObject subPath2 = new LineListDisplayObject("planning/subpath2", Color.Lime); disposables.Add(DataItemAttacher.Attach(subPath2, OperationalInterface.Dataset.ItemAs<LineList>("subpath2"))); Services.DisplayObjectService.Add(subPath2, true); PointsDisplayObject leftPoints = new PointsDisplayObject("planning/left hits", Color.Blue, ControlPointStyle.LargeX); disposables.Add(DataItemAttacher.Attach(leftPoints, OperationalInterface.Dataset.ItemAs<Coordinates[]>("left bound points"))); Services.DisplayObjectService.Add(leftPoints, true); PointsDisplayObject rightPoints = new PointsDisplayObject("planning/right hits", Color.Red, ControlPointStyle.LargeX); disposables.Add(DataItemAttacher.Attach(rightPoints, OperationalInterface.Dataset.ItemAs<Coordinates[]>("right bound points"))); Services.DisplayObjectService.Add(rightPoints, true); LineListDisplayObject avoidancePath = new LineListDisplayObject("planning/avoidance path", Color.DarkSalmon); disposables.Add(DataItemAttacher.Attach(avoidancePath, OperationalInterface.Dataset.ItemAs<LineList>("avoidance path"))); Services.DisplayObjectService.Add(avoidancePath, true); // extended debugging stuff PlanningGridExtDisplayObject gridDisplay = new PlanningGridExtDisplayObject("planning/grid", Color.DarkOrchid, Color.LightSkyBlue); Services.DisplayObjectService.Add(gridDisplay, false); SmoothingResultsDisplayObject smoothingDisplay = new SmoothingResultsDisplayObject("planning/smoothing"); Services.DisplayObjectService.Add(smoothingDisplay, false); ArcDisplayObject arcs = new ArcDisplayObject(); disposables.Add(DataItemAttacher.Attach(arcs, OperationalInterface.Dataset.ItemAs<ArcVotingResults>("arc voting results"))); Services.DisplayObjectService.Add(arcs, false); // obstacle data untrackedClustersDisplayObject = new UntrackedClustersDisplayObject("obstacles/untracked points", true, Color.DarkMagenta); untrackedClusterAttacher = new ChannelListenerAttacher<SceneEstimatorUntrackedClusterCollection>(untrackedClustersDisplayObject, null); Services.DisplayObjectService.Add(untrackedClustersDisplayObject, true); ObstacleDisplayObject perimeterObstacles = new ObstacleDisplayObject("obstacles/perimeter obstacles"); disposables.Add(DataItemAttacher.Attach(perimeterObstacles, OperationalInterface.Dataset.ItemAs<OperationalObstacle[]>("perimeter obstacles"))); Services.DisplayObjectService.Add(perimeterObstacles, true); ObstacleDisplayObject wrappedClusters = new ObstacleDisplayObject("obstacles/wrapped obstacles"); disposables.Add(DataItemAttacher.Attach(wrappedClusters, OperationalInterface.Dataset.ItemAs<OperationalObstacle[]>("obstacles"))); Services.DisplayObjectService.Add(wrappedClusters, true); // subscribe to the attached event so we can bind the untracked clusters data appropriately OperationalInterface.Attached += OperationalInterface_Attached; // lane models LocalLaneModelDisplayObject centerLane = new LocalLaneModelDisplayObject("lanes/center", Color.DarkGreen); disposables.Add(DataItemAttacher.Attach(centerLane, OperationalInterface.Dataset.ItemAs<LocalLaneModel>("center lane"))); Services.DisplayObjectService.Add(centerLane, false); LocalLaneModelDisplayObject leftLane = new LocalLaneModelDisplayObject("lanes/left", Color.Goldenrod); disposables.Add(DataItemAttacher.Attach(leftLane, OperationalInterface.Dataset.ItemAs<LocalLaneModel>("left lane"))); Services.DisplayObjectService.Add(leftLane, false); LocalLaneModelDisplayObject rightLane = new LocalLaneModelDisplayObject("lanes/right", Color.LightCoral); disposables.Add(DataItemAttacher.Attach(rightLane, OperationalInterface.Dataset.ItemAs<LocalLaneModel>("right lane"))); Services.DisplayObjectService.Add(rightLane, false); LineListDisplayObject leftRoadEdge = new LineListDisplayObject("lanes/left road edge", Color.Firebrick); disposables.Add(DataItemAttacher.Attach(leftRoadEdge, OperationalInterface.Dataset.ItemAs<LineList>("left road edge"))); Services.DisplayObjectService.Add(leftRoadEdge, true); LineListDisplayObject rightRoadEdge = new LineListDisplayObject("lanes/right road edge", Color.DarkViolet); disposables.Add(DataItemAttacher.Attach(rightRoadEdge, OperationalInterface.Dataset.ItemAs<LineList>("right road edge"))); Services.DisplayObjectService.Add(rightRoadEdge, true); LineListDisplayObject roadBearing = new LineListDisplayObject("lanes/road bearing", Color.Orange); disposables.Add(DataItemAttacher.Attach(roadBearing, OperationalInterface.Dataset.ItemAs<LineList>("road bearing"))); Services.DisplayObjectService.Add(roadBearing, true); // intersections LineListDisplayObject intersectionPath = new LineListDisplayObject("intersections/pull path", Color.DarkCyan); disposables.Add(DataItemAttacher.Attach(intersectionPath, OperationalInterface.Dataset.ItemAs<LineList>("intersection path"))); Services.DisplayObjectService.Add(intersectionPath, true); PolygonDisplayObject intersectionPolygon = new PolygonDisplayObject("intersections/polygon", Color.DarkGoldenrod, false); disposables.Add(DataItemAttacher.Attach(intersectionPolygon, OperationalInterface.Dataset.ItemAs<Polygon>("intersection polygon"))); Services.DisplayObjectService.Add(intersectionPolygon, true); // zones PolygonSetDisplayObject zoneBadRegions = new PolygonSetDisplayObject("zone/bad regions", Color.DarkMagenta, false); disposables.Add(DataItemAttacher.Attach(zoneBadRegions, OperationalInterface.Dataset.ItemAs<Polygon[]>("zone bad regions"))); Services.DisplayObjectService.Add(zoneBadRegions, true); PolygonDisplayObject zonePerimeter = new PolygonDisplayObject("zone/perimeter", Color.DarkSeaGreen, false); disposables.Add(DataItemAttacher.Attach(zonePerimeter, OperationalInterface.Dataset.ItemAs<Polygon>("zone perimeter"))); Services.DisplayObjectService.Add(zonePerimeter, true); PointDisplayObject frontLeftPoint = new PointDisplayObject("zone/parker front left", "front left", Color.DarkBlue, ControlPointStyle.LargeX, ContentAlignment.MiddleRight); disposables.Add(DataItemAttacher.Attach(frontLeftPoint, OperationalInterface.Dataset.ItemAs<Coordinates>("front left point"))); Services.DisplayObjectService.Add(frontLeftPoint, true); PointDisplayObject rearRightPoint = new PointDisplayObject("zone/parker rear right", "rear right", Color.DarkOrchid, ControlPointStyle.LargeX, ContentAlignment.MiddleRight); disposables.Add(DataItemAttacher.Attach(rearRightPoint, OperationalInterface.Dataset.ItemAs<Coordinates>("rear right point"))); Services.DisplayObjectService.Add(rearRightPoint, true); CircleSegmentDisplayObject parkPath = new CircleSegmentDisplayObject("zone/parking path", Color.DarkRed); disposables.Add(DataItemAttacher.Attach(parkPath, OperationalInterface.Dataset.ItemAs<CircleSegment>("parking path"))); Services.DisplayObjectService.Add(parkPath, true); Services.DisplayObjectService.MoveToBefore(gridDisplay, carDisplayObject); }
private void InitializeDisplayObjects() { grid = new GridDisplayObject(); // add seperate from display object service Services.DisplayObjectService.Add(grid, true); // car object CarDisplayObject carDisplayObject = new CarDisplayObject("tahoe", Color.SkyBlue); carDisplayObject.AttachToVehicleState = true; Services.DisplayObjectService.Add(carDisplayObject, true); // tracked paths TrackedPathDisplayObject posePath = new TrackedPathDisplayObject("paths/pose", Color.LightBlue); disposables.Add(DataItemAttacher.Attach(posePath, OperationalInterface.Dataset.ItemAs <Coordinates>("xy"))); Services.DisplayObjectService.Add(posePath, true); TrackedPathDisplayObject posteriorPosePath = new TrackedPathDisplayObject("paths/posterior pose", Color.DarkGreen); disposables.Add(DataItemAttacher.Attach(posteriorPosePath, OperationalInterface.Dataset.ItemAs <Coordinates>("posterior pose"))); Services.DisplayObjectService.Add(posteriorPosePath, true); TrackedPathDisplayObject hpPath = new TrackedPathDisplayObject("paths/hp", Color.HotPink); disposables.Add(DataItemAttacher.Attach(hpPath, OperationalInterface.Dataset.ItemAs <Coordinates>("hp xy"))); Services.DisplayObjectService.Add(hpPath, true); TrackedPathDisplayObject sepPath = new TrackedPathDisplayObject("paths/septentrio", Color.DarkRed); disposables.Add(DataItemAttacher.Attach(sepPath, OperationalInterface.Dataset.ItemAs <Coordinates>("gps xy"))); Services.DisplayObjectService.Add(sepPath, true); // path point PointDisplayObject pathPoint = new PointDisplayObject("tracking/path point", "path point", Color.Green, ControlPointStyle.LargeX, ContentAlignment.BottomRight); disposables.Add(DataItemAttacher.Attach(pathPoint, OperationalInterface.Dataset.ItemAs <Coordinates>("path point"))); Services.DisplayObjectService.Add(pathPoint, true); LineListDisplayObject trackingPath = new LineListDisplayObject("tracking/tracking path", Color.DeepPink); disposables.Add(DataItemAttacher.Attach(trackingPath, OperationalInterface.Dataset.ItemAs <LineList>("tracking path"))); Services.DisplayObjectService.Add(trackingPath, false); // u-turn stuff CircleDisplayObject uturnCircle = new CircleDisplayObject("u-turn/planned circle", Color.Magenta); disposables.Add(DataItemAttacher.Attach(uturnCircle, OperationalInterface.Dataset.ItemAs <Circle>("uturn circle"))); Services.DisplayObjectService.Add(uturnCircle, true); PointDisplayObject uturnStopPoint = new PointDisplayObject("u-turn/stop point", null, Color.Black, ControlPointStyle.SmallX, ContentAlignment.BottomRight); disposables.Add(DataItemAttacher.Attach(uturnStopPoint, OperationalInterface.Dataset.ItemAs <Coordinates>("uturn stop point"))); Services.DisplayObjectService.Add(uturnStopPoint, true); PolygonDisplayObject uturnPolygon = new PolygonDisplayObject("u-turn/polygon", Color.BurlyWood, false); disposables.Add(DataItemAttacher.Attach(uturnPolygon, OperationalInterface.Dataset.ItemAs <Polygon>("uturn polygon"))); Services.DisplayObjectService.Add(uturnPolygon, true); // original path objects (paths frank sends) LineListDisplayObject originalPath1 = new LineListDisplayObject("planning/original path 1", Color.DarkOrchid); disposables.Add(DataItemAttacher.Attach(originalPath1, OperationalInterface.Dataset.ItemAs <LineList>("original path1"))); Services.DisplayObjectService.Add(originalPath1, true); LineListDisplayObject originalpath2 = new LineListDisplayObject("planning/original path 2", Color.DarkSeaGreen); disposables.Add(DataItemAttacher.Attach(originalpath2, OperationalInterface.Dataset.ItemAs <LineList>("original path2"))); Services.DisplayObjectService.Add(originalpath2, true); // planned path objects LineListDisplayObject smoothedPath = new LineListDisplayObject("planning/smoothed path", Color.OrangeRed); disposables.Add(DataItemAttacher.Attach(smoothedPath, OperationalInterface.Dataset.ItemAs <LineList>("smoothed path"))); Services.DisplayObjectService.Add(smoothedPath, true); LineListDisplayObject leftBound = new LineListDisplayObject("planning/left bound", Color.Blue); disposables.Add(DataItemAttacher.Attach(leftBound, OperationalInterface.Dataset.ItemAs <LineList>("left bound"))); Services.DisplayObjectService.Add(leftBound, true); LineListDisplayObject rightBound = new LineListDisplayObject("planning/right bound", Color.Red); disposables.Add(DataItemAttacher.Attach(rightBound, OperationalInterface.Dataset.ItemAs <LineList>("right bound"))); Services.DisplayObjectService.Add(rightBound, true); LineListDisplayObject subPath = new LineListDisplayObject("planning/subpath", Color.SaddleBrown); disposables.Add(DataItemAttacher.Attach(subPath, OperationalInterface.Dataset.ItemAs <LineList>("subpath"))); Services.DisplayObjectService.Add(subPath, false); LineListDisplayObject predictionPath = new LineListDisplayObject("planning/prediction", Color.DarkViolet); disposables.Add(DataItemAttacher.Attach(predictionPath, OperationalInterface.Dataset.ItemAs <LineList>("prediction path"))); Services.DisplayObjectService.Add(predictionPath, false); LineListDisplayObject predictionPath2 = new LineListDisplayObject("planning/prediction2", Color.Magenta); disposables.Add(DataItemAttacher.Attach(predictionPath2, OperationalInterface.Dataset.ItemAs <LineList>("prediction path2"))); Services.DisplayObjectService.Add(predictionPath2, false); LineListDisplayObject subPath2 = new LineListDisplayObject("planning/subpath2", Color.Lime); disposables.Add(DataItemAttacher.Attach(subPath2, OperationalInterface.Dataset.ItemAs <LineList>("subpath2"))); Services.DisplayObjectService.Add(subPath2, true); PointsDisplayObject leftPoints = new PointsDisplayObject("planning/left hits", Color.Blue, ControlPointStyle.LargeX); disposables.Add(DataItemAttacher.Attach(leftPoints, OperationalInterface.Dataset.ItemAs <Coordinates[]>("left bound points"))); Services.DisplayObjectService.Add(leftPoints, true); PointsDisplayObject rightPoints = new PointsDisplayObject("planning/right hits", Color.Red, ControlPointStyle.LargeX); disposables.Add(DataItemAttacher.Attach(rightPoints, OperationalInterface.Dataset.ItemAs <Coordinates[]>("right bound points"))); Services.DisplayObjectService.Add(rightPoints, true); LineListDisplayObject avoidancePath = new LineListDisplayObject("planning/avoidance path", Color.DarkSalmon); disposables.Add(DataItemAttacher.Attach(avoidancePath, OperationalInterface.Dataset.ItemAs <LineList>("avoidance path"))); Services.DisplayObjectService.Add(avoidancePath, true); // extended debugging stuff PlanningGridExtDisplayObject gridDisplay = new PlanningGridExtDisplayObject("planning/grid", Color.DarkOrchid, Color.LightSkyBlue); Services.DisplayObjectService.Add(gridDisplay, false); SmoothingResultsDisplayObject smoothingDisplay = new SmoothingResultsDisplayObject("planning/smoothing"); Services.DisplayObjectService.Add(smoothingDisplay, false); ArcDisplayObject arcs = new ArcDisplayObject(); disposables.Add(DataItemAttacher.Attach(arcs, OperationalInterface.Dataset.ItemAs <ArcVotingResults>("arc voting results"))); Services.DisplayObjectService.Add(arcs, false); // obstacle data untrackedClustersDisplayObject = new UntrackedClustersDisplayObject("obstacles/untracked points", true, Color.DarkMagenta); untrackedClusterAttacher = new ChannelListenerAttacher <SceneEstimatorUntrackedClusterCollection>(untrackedClustersDisplayObject, null); Services.DisplayObjectService.Add(untrackedClustersDisplayObject, true); ObstacleDisplayObject perimeterObstacles = new ObstacleDisplayObject("obstacles/perimeter obstacles"); disposables.Add(DataItemAttacher.Attach(perimeterObstacles, OperationalInterface.Dataset.ItemAs <OperationalObstacle[]>("perimeter obstacles"))); Services.DisplayObjectService.Add(perimeterObstacles, true); ObstacleDisplayObject wrappedClusters = new ObstacleDisplayObject("obstacles/wrapped obstacles"); disposables.Add(DataItemAttacher.Attach(wrappedClusters, OperationalInterface.Dataset.ItemAs <OperationalObstacle[]>("obstacles"))); Services.DisplayObjectService.Add(wrappedClusters, true); // subscribe to the attached event so we can bind the untracked clusters data appropriately OperationalInterface.Attached += OperationalInterface_Attached; // lane models LocalLaneModelDisplayObject centerLane = new LocalLaneModelDisplayObject("lanes/center", Color.DarkGreen); disposables.Add(DataItemAttacher.Attach(centerLane, OperationalInterface.Dataset.ItemAs <LocalLaneModel>("center lane"))); Services.DisplayObjectService.Add(centerLane, false); LocalLaneModelDisplayObject leftLane = new LocalLaneModelDisplayObject("lanes/left", Color.Goldenrod); disposables.Add(DataItemAttacher.Attach(leftLane, OperationalInterface.Dataset.ItemAs <LocalLaneModel>("left lane"))); Services.DisplayObjectService.Add(leftLane, false); LocalLaneModelDisplayObject rightLane = new LocalLaneModelDisplayObject("lanes/right", Color.LightCoral); disposables.Add(DataItemAttacher.Attach(rightLane, OperationalInterface.Dataset.ItemAs <LocalLaneModel>("right lane"))); Services.DisplayObjectService.Add(rightLane, false); LineListDisplayObject leftRoadEdge = new LineListDisplayObject("lanes/left road edge", Color.Firebrick); disposables.Add(DataItemAttacher.Attach(leftRoadEdge, OperationalInterface.Dataset.ItemAs <LineList>("left road edge"))); Services.DisplayObjectService.Add(leftRoadEdge, true); LineListDisplayObject rightRoadEdge = new LineListDisplayObject("lanes/right road edge", Color.DarkViolet); disposables.Add(DataItemAttacher.Attach(rightRoadEdge, OperationalInterface.Dataset.ItemAs <LineList>("right road edge"))); Services.DisplayObjectService.Add(rightRoadEdge, true); LineListDisplayObject roadBearing = new LineListDisplayObject("lanes/road bearing", Color.Orange); disposables.Add(DataItemAttacher.Attach(roadBearing, OperationalInterface.Dataset.ItemAs <LineList>("road bearing"))); Services.DisplayObjectService.Add(roadBearing, true); // intersections LineListDisplayObject intersectionPath = new LineListDisplayObject("intersections/pull path", Color.DarkCyan); disposables.Add(DataItemAttacher.Attach(intersectionPath, OperationalInterface.Dataset.ItemAs <LineList>("intersection path"))); Services.DisplayObjectService.Add(intersectionPath, true); PolygonDisplayObject intersectionPolygon = new PolygonDisplayObject("intersections/polygon", Color.DarkGoldenrod, false); disposables.Add(DataItemAttacher.Attach(intersectionPolygon, OperationalInterface.Dataset.ItemAs <Polygon>("intersection polygon"))); Services.DisplayObjectService.Add(intersectionPolygon, true); // zones PolygonSetDisplayObject zoneBadRegions = new PolygonSetDisplayObject("zone/bad regions", Color.DarkMagenta, false); disposables.Add(DataItemAttacher.Attach(zoneBadRegions, OperationalInterface.Dataset.ItemAs <Polygon[]>("zone bad regions"))); Services.DisplayObjectService.Add(zoneBadRegions, true); PolygonDisplayObject zonePerimeter = new PolygonDisplayObject("zone/perimeter", Color.DarkSeaGreen, false); disposables.Add(DataItemAttacher.Attach(zonePerimeter, OperationalInterface.Dataset.ItemAs <Polygon>("zone perimeter"))); Services.DisplayObjectService.Add(zonePerimeter, true); PointDisplayObject frontLeftPoint = new PointDisplayObject("zone/parker front left", "front left", Color.DarkBlue, ControlPointStyle.LargeX, ContentAlignment.MiddleRight); disposables.Add(DataItemAttacher.Attach(frontLeftPoint, OperationalInterface.Dataset.ItemAs <Coordinates>("front left point"))); Services.DisplayObjectService.Add(frontLeftPoint, true); PointDisplayObject rearRightPoint = new PointDisplayObject("zone/parker rear right", "rear right", Color.DarkOrchid, ControlPointStyle.LargeX, ContentAlignment.MiddleRight); disposables.Add(DataItemAttacher.Attach(rearRightPoint, OperationalInterface.Dataset.ItemAs <Coordinates>("rear right point"))); Services.DisplayObjectService.Add(rearRightPoint, true); CircleSegmentDisplayObject parkPath = new CircleSegmentDisplayObject("zone/parking path", Color.DarkRed); disposables.Add(DataItemAttacher.Attach(parkPath, OperationalInterface.Dataset.ItemAs <CircleSegment>("parking path"))); Services.DisplayObjectService.Add(parkPath, true); Services.DisplayObjectService.MoveToBefore(gridDisplay, carDisplayObject); }