Exemple #1
0
        /// <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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
 /// <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;
 }
Exemple #6
0
 /// <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);
 }