Esempio n. 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);
        }
Esempio n. 2
0
        /// <summary>
        /// Convert a Nucleus polyCurve to a Robot Contour
        /// </summary>
        /// <param name="polyCurve"></param>
        /// <returns></returns>
        public static RobotGeoContour Convert(PolyCurve polyCurve)
        {
            RobotGeoContour result = new RobotGeoContour();

            foreach (Curve subCrv in polyCurve.SubCurves)
            {
                AddContourSegment(result, subCrv);
            }
            return(result);
        }
Esempio n. 3
0
 private static void AddContourSegment(RobotGeoContour result, Curve crv)
 {
     if (crv.IsValid)
     {
         if (crv is Arc)
         {
             Arc arc     = (Arc)crv;
             var segment = new RobotGeoSegmentArc();
             segment.P1 = Convert(arc.Vertices[1].Position);
             segment.P2 = Convert(arc.EndPoint);
             result.Add((RobotGeoSegment)segment);
         }
         else if (crv is PolyLine)
         {
             foreach (Vertex v in crv.Vertices)
             {
                 var segment = new RobotGeoSegmentLine();
                 segment.P1 = Convert(v.Position);
                 result.Add((RobotGeoSegment)segment);
             }
         }
         else if (crv is PolyCurve)
         {
             foreach (Curve subCrv in ((PolyCurve)crv).SubCurves)
             {
                 AddContourSegment(result, subCrv);
             }
         }
         else // Everything else treated as a line
         {
             var segment = new RobotGeoSegmentLine();
             segment.P1 = Convert(crv.EndPoint);
             result.Add((RobotGeoSegment)segment);
         }
     }
 }