/// <summary> /// Add a line segment to the end of the specified Robot polyline /// </summary> /// <param name="result"></param> /// <param name="v"></param> private static void AddPolylinePoint(RobotGeoPolyline result, Vertex v) { var segment = new RobotGeoSegmentLine(); segment.P1 = Convert(v.Position); result.Add((RobotGeoSegment)segment); // Wow! RobotOM has an F'd up inheritance structure! }
/// <summary> /// Convert a Nucleus polyline to a RobotGeoPolyline /// </summary> /// <param name="polyline"></param> /// <returns></returns> public static RobotGeoPolyline Convert(PolyLine polyline) { RobotGeoPolyline result = new RobotGeoPolyline(); foreach (Vertex v in polyline.Vertices) { AddPolylinePoint(result, v); } if (polyline.Closed) { AddPolylinePoint(result, polyline.Start); } return(result); }
/// <summary> /// Convert a Robot polyline geometry into a Nucleus polyline /// </summary> /// <param name="polyline"></param> /// <returns></returns> public static PolyLine Convert(RobotGeoPolyline polyline) { PolyLine result = new PolyLine(); RobotGeoSegmentCollection segments = polyline.Segments as RobotGeoSegmentCollection; for (int i = 1; i <= segments.Count; i++) { RobotGeoSegment segment = segments.Get(i); Vector pt = Convert(segment.P1); if (i == segments.Count && pt.Equals(result.StartPoint, Tolerance.Distance)) { result.Close(true); } else { result.Add(pt); } } return(result); }