public static Autodesk.Revit.DB.CurveLoop ToRevitType(this Autodesk.DesignScript.Geometry.PolyCurve pcrv,
                                                              bool performHostUnitConversion = true)
        {
            if (!pcrv.IsClosed)
            {
                throw new Exception("The input PolyCurve must be closed");
            }

            Autodesk.DesignScript.Geometry.Curve[] crvs = null;
            if (performHostUnitConversion)
            {
                pcrv = pcrv.InHostUnits();
                crvs = pcrv.Curves();
                pcrv.Dispose();
            }
            else
            {
                crvs = pcrv.Curves();
            }

            var cl = new CurveLoop();

            foreach (Autodesk.DesignScript.Geometry.Curve curve in crvs)
            {
                using (var nc = curve.ToNurbsCurve())
                {
                    Autodesk.Revit.DB.Curve converted = nc.ToRevitType(false);
                    cl.Append(converted);
                }
            }

            crvs.ForEach(x => x.Dispose());

            return(cl);
        }
Exemple #2
0
        internal sCurve TosCurve(Dyn.Curve dc)
        {
            sCurve sc = null;

            Dyn.Line dl = dc as Dyn.Line;
            if (dl != null)
            {
                sc           = TosLine(dl);
                sc.curveType = eCurveType.LINE;
                dl.Dispose();
            }
            Dyn.PolyCurve pc = dc as Dyn.PolyCurve;
            if (pc != null)
            {
                if (pc.NumberOfCurves == 1)
                {
                    ////
                    //what if this segement is nurbsCurve??????
                    //PolyCurve can be joined nurbsCurve!!!!!!!!!

                    ///
                    Dyn.Line dtl = Dyn.Line.ByStartPointEndPoint(pc.StartPoint, pc.EndPoint);
                    sc           = TosLine(dtl);
                    sc.curveType = eCurveType.LINE;
                    dtl.Dispose();
                }
                else
                {
                    sc           = TosPolyLine(pc);
                    sc.curveType = eCurveType.POLYLINE;
                }
                pc.Dispose();
            }
            // Dyn.NurbsCurve nc = dc as Dyn.NurbsCurve;
            // if(nc != null)
            // {
            //
            // }

            return(sc);
        }
Exemple #3
0
        public static Dictionary <string, Autodesk.DesignScript.Geometry.Curve[]> OffsetPerimeterCurves(this Autodesk.DesignScript.Geometry.Surface surface, double offset)
        {
            List <Autodesk.DesignScript.Geometry.Curve> srfPerimCrvs = surface.PerimeterCurves().ToList();

            Autodesk.DesignScript.Geometry.PolyCurve plyCrv = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(srfPerimCrvs);

            double inOffset;
            double outOffset;

            if (offset < 0)
            {
                inOffset  = offset;
                outOffset = -offset;
            }
            else
            {
                inOffset  = -offset;
                outOffset = offset;
            }

            Autodesk.DesignScript.Geometry.Curve[] inPerimCrvs;
            try
            {
                List <Autodesk.DesignScript.Geometry.Curve> inOffsetCrv = new List <Autodesk.DesignScript.Geometry.Curve>()
                {
                    (plyCrv.Offset(inOffset))
                };
                Autodesk.DesignScript.Geometry.PolyCurve    inOffsetPolyCrv = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(inOffsetCrv);
                List <Autodesk.DesignScript.Geometry.Curve> inOffsetCrvList = inOffsetPolyCrv.Curves().ToList();
                List <Autodesk.DesignScript.Geometry.Point> inPts           = new List <Autodesk.DesignScript.Geometry.Point>();
                foreach (Autodesk.DesignScript.Geometry.Curve c in inOffsetCrvList)
                {
                    inPts.Add(c.StartPoint);
                }
                Autodesk.DesignScript.Geometry.PolyCurve inOffsetPolyCrv2 = PolyCurve.ByPoints(inPts, true);
                Autodesk.DesignScript.Geometry.Surface   inOffsetSrf      = Autodesk.DesignScript.Geometry.Surface.ByPatch(inOffsetPolyCrv2);
                inPerimCrvs = inOffsetSrf.PerimeterCurves();
                inOffsetSrf.Dispose();
                inOffsetPolyCrv.Dispose();
                inOffsetPolyCrv2.Dispose();
            }
            catch (Exception)
            {
                inPerimCrvs = null;
            }

            Autodesk.DesignScript.Geometry.Curve[] outPerimCrvs;
            try
            {
                List <Autodesk.DesignScript.Geometry.Curve> outOffsetCrv = new List <Autodesk.DesignScript.Geometry.Curve>()
                {
                    (plyCrv.Offset(outOffset))
                };
                Autodesk.DesignScript.Geometry.PolyCurve    outOffsetPolyCrv = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(outOffsetCrv);
                List <Autodesk.DesignScript.Geometry.Curve> outOffsetCrvList = outOffsetPolyCrv.Curves().ToList();
                List <Autodesk.DesignScript.Geometry.Point> outPts           = new List <Autodesk.DesignScript.Geometry.Point>();
                foreach (Autodesk.DesignScript.Geometry.Curve c in outOffsetCrvList)
                {
                    outPts.Add(c.StartPoint);
                }
                Autodesk.DesignScript.Geometry.PolyCurve outOffsetPolyCrv2 = PolyCurve.ByPoints(outPts, true);
                Autodesk.DesignScript.Geometry.Surface   outOffsetSrf      = Autodesk.DesignScript.Geometry.Surface.ByPatch(outOffsetPolyCrv2);
                outPerimCrvs = outOffsetSrf.PerimeterCurves();
                outOffsetSrf.Dispose();
                outOffsetPolyCrv.Dispose();
                outOffsetPolyCrv2.Dispose();
            }
            catch (Exception)
            {
                outPerimCrvs = null;
            }


            Dictionary <string, Autodesk.DesignScript.Geometry.Curve[]> newOutput;

            newOutput = new Dictionary <string, Autodesk.DesignScript.Geometry.Curve[]>
            {
                { "insetCrvs", inPerimCrvs },
                { "outsetCrvs", outPerimCrvs }
            };

            //Dispose all redundant geometry

            plyCrv.Dispose();
            foreach (Autodesk.DesignScript.Geometry.Curve c in srfPerimCrvs)
            {
                c.Dispose();
            }

            return(newOutput);
        }