示例#1
0
        internal List <Dyn.Curve> SplitCurveByCurves(Dyn.Curve c, List <Dyn.Curve> crvs, double intTol, out List <Dyn.Point> assPts, List <Dyn.Point> pts = null)
        {
            List <Dyn.Geometry> disposeGeo = new List <Dyn.Geometry>();
            List <Dyn.Point>    paras      = new List <Dyn.Point>();
            List <Dyn.Point>    apts       = new List <Dyn.Point>();

            foreach (Dyn.Curve dc in crvs)
            {
                Dyn.Geometry [] intg = c.Intersect(dc);
                if (intg != null)
                {
                    for (int i = 0; i < intg.Length; ++i)
                    {
                        if (intg[i] is Dyn.Point)
                        {
                            paras.Add(intg[i] as Dyn.Point);
                        }
                        else
                        {
                            disposeGeo.Add(intg[i]);
                        }
                    }
                }
            }
            if (pts != null)
            {
                foreach (Dyn.Point p in pts)
                {
                    if (c.DistanceTo(p) < intTol)
                    {
                        paras.Add(Dyn.Point.ByCoordinates(p.X, p.Y, p.Z));
                        apts.Add(Dyn.Point.ByCoordinates(p.X, p.Y, p.Z));
                    }
                }
            }

            if (apts.Count == 0)
            {
                assPts = null;
            }
            else
            {
                assPts = apts;
            }

            List <Dyn.Curve> splitedCulled = new List <Dyn.Curve>();

            foreach (Dyn.Curve sc in c.SplitByPoints(paras))
            {
                if (sc.Length > 0.005)
                {
                    splitedCulled.Add(sc);
                }
                else
                {
                    disposeGeo.Add(sc);
                }
            }
            foreach (Dyn.Point p in paras)
            {
                disposeGeo.Add(p);
            }
            this.DisposeGeometries(disposeGeo);

            return(splitedCulled.ToList());
        }