Exemple #1
0
        public virtual void vmethod_2(Class95 firstLoop, Class608 wires)
        {
            Interface26 pointParamMapper = this.PointParamMapper;

            if (pointParamMapper != null)
            {
                List <Polygon2D> polygon2DList1 = new List <Polygon2D>();
                List <Polygon2D> polygon2DList2 = new List <Polygon2D>();
                foreach (Class95 loop in (IEnumerable <Class95>)Class80.smethod_0 <Class95>(firstLoop))
                {
                    Class917  approximation = new Class917();
                    Polygon2D polygon2D1    = new Polygon2D();
                    foreach (ns9.Class107 coedge in (IEnumerable <ns9.Class107>)loop.Coedges)
                    {
                        ns9.Class88 curve = (ns9.Class88)coedge.Edge.Curve;
                        if (curve != null)
                        {
                            curve.CurvePrimitive.imethod_3(loop, curve, coedge, approximation, wires.Accuracy);
                        }
                        else
                        {
                            Polyline2D polyline2D = this.vmethod_1(coedge);
                            polygon2D1.AddRange((IEnumerable <Point2D>)polyline2D);
                        }
                    }
                    if (polygon2D1.Count > 0)
                    {
                        if (pointParamMapper.IsRightHandedParametric)
                        {
                            if (polygon2D1.GetArea() >= 0.0)
                            {
                                polygon2DList1.Add(polygon2D1);
                            }
                            else
                            {
                                polygon2DList2.Add(polygon2D1);
                            }
                        }
                        else if (polygon2D1.GetArea() < 0.0)
                        {
                            polygon2DList1.Add(polygon2D1);
                        }
                        else
                        {
                            polygon2DList2.Add(polygon2D1);
                        }
                    }
                    Point3D[] points = approximation.Points;
                    if (points.Length > 0)
                    {
                        Polygon2D polygon2D2 = new Polygon2D(points.Length);
                        foreach (Point3D point in points)
                        {
                            polygon2D2.Add(pointParamMapper.imethod_0(point));
                        }
                        if (pointParamMapper.IsRightHandedParametric)
                        {
                            if (polygon2D2.GetArea() >= 0.0)
                            {
                                polygon2DList1.Add(polygon2D2);
                            }
                            else
                            {
                                polygon2DList2.Add(polygon2D2);
                            }
                        }
                        else if (polygon2D2.GetArea() < 0.0)
                        {
                            polygon2DList1.Add(polygon2D2);
                        }
                        else
                        {
                            polygon2DList2.Add(polygon2D2);
                        }
                    }
                }
                if (polygon2DList1.Count == 0 && polygon2DList2.Count != 0)
                {
                    foreach (List <Point2D> point2DList in polygon2DList2)
                    {
                        point2DList.Reverse();
                    }
                    polygon2DList1.AddRange((IEnumerable <Polygon2D>)polygon2DList2);
                    polygon2DList2.Clear();
                }
                Polygon2D[] paramShape = Class794.smethod_9(this.ExtendedIntervalU, this.ExtendedIntervalV, polygon2DList1.ToArray(), polygon2DList2.ToArray(), pointParamMapper.IsRightHandedParametric, wires.Accuracy.Epsilon);
                if (paramShape == null)
                {
                    return;
                }
                foreach (Polygon2D polygon2D in paramShape)
                {
                    Polygon3D polygon3D = new Polygon3D(polygon2D.Count);
                    foreach (Point2D point2D in (List <Point2D>)polygon2D)
                    {
                        polygon3D.Add(pointParamMapper.imethod_1(point2D.X, point2D.Y));
                    }
                    wires.method_9((ICollection <Point3D>)polygon3D, true);
                }
                this.vmethod_0(wires, paramShape, pointParamMapper);
            }
            else
            {
                Class80.smethod_2((Class80)firstLoop, wires);
            }
        }