/// <summary> /// Convert a Robot contour geometry to a Nucleus polycurve /// </summary> /// <param name="contour"></param> /// <returns></returns> public static PolyCurve Convert(RobotGeoContour contour) { PolyCurve result = new PolyCurve(); RobotGeoSegmentCollection segments = contour.Segments as RobotGeoSegmentCollection; RobotGeoSegment firstSegment = segments.Get(1); Vector lastPt = Convert(firstSegment.P1); for (int i = 2; i <= segments.Count; i++) { RobotGeoSegment segment = segments.Get(i); if (segment.Type == IRobotGeoSegmentType.I_GST_ARC) { RobotGeoSegmentArc arcSegment = (RobotGeoSegmentArc)segment; Vector endPt = Convert(arcSegment.P2); Arc arc = new Arc(lastPt, Convert(arcSegment.P1), endPt); result.Add(arc); lastPt = endPt; } else { Vector endPt = Convert(segment.P1); Line line = new Line(lastPt, endPt); result.Add(line); lastPt = endPt; } } result.Close(); return(result); }
public void SubdomainByCentreTest() { var polyCrv = new PolyCurve(new Line(0, 0, 10, 10)); polyCrv.AddArc(new Vector(10, 0)); polyCrv.Add(new PolyLine(new Vector(10, 0), new Vector(5, 0), new Vector(5, -5))); var domain = polyCrv.SubdomainByCentre(0.5, 20); Curve subCrv = polyCrv.Extract(domain); Assert.AreEqual(20, subCrv.Length, 0.00001); }
public void AreaCalculationTest() { var polyCrv = new PolyCurve(new Line(0, 0, 10, 10)); polyCrv.AddArc(new Vector(10, 0)); polyCrv.Add(new PolyLine(new Vector(10, 0), new Vector(5, 0), new Vector(5, -5))); polyCrv.Close(); Vector centroid; double area = polyCrv.CalculateEnclosedArea(out centroid); Assert.AreEqual(205.309725, area, 0.0001); }
public void DuplicateTest() { var polyCrv = new PolyCurve(new Line(0, 0, 10, 10)); polyCrv.AddArc(new Vector(10, 0)); polyCrv.Add(new PolyLine(new Vector(10, 0), new Vector(5, 0), new Vector(5, -5))); for (int i = 0; i < 1000; i++) { var polyCrv2 = polyCrv.Duplicate(); Assert.AreEqual(polyCrv.Length, polyCrv2.Length); } }
/// <summary> /// Convert a netDXF HatchBoundaryPath to a Nucleus PolyCurve /// or PolyLine /// </summary> /// <param name="path"></param> /// <returns></returns> public static Curve Convert(nDE.HatchBoundaryPath path) { PolyCurve result = new PolyCurve(); foreach (nDE.HatchBoundaryPath.Edge edge in path.Edges) { VertexGeometry edgeRep = Convert(edge.ConvertTo()); if (edgeRep != null && edgeRep is Curve) { result.Add((Curve)edgeRep); } } if (result.IsPolyline()) return result.ToPolyLine(); else return result; }
/// <summary> /// Convert a RhinoCommon PolyCurve to a Nucleus one /// </summary> /// <param name="polyCurve"></param> /// <returns></returns> public static PolyCurve Convert(RC.PolyCurve polyCurve) { if (polyCurve != null) { PolyCurve result = new PolyCurve(); RC.Curve[] subCrvs = polyCurve.Explode(); foreach (RC.Curve subCrv in subCrvs) { Curve crv = Convert(subCrv); if (crv != null) { result.Add(crv); } } return(result); } return(null); }