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); }
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); }
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); }