/// <summary> /// Create Edge (Line) from Dynamo NurbsCurve. /// </summary> public static Geometry.Edge FromDynamoLinearNurbsCurve(Autodesk.DesignScript.Geometry.NurbsCurve obj) { FdPoint3d startPoint = FdPoint3d.FromDynamo(obj.StartPoint); FdPoint3d endPoint = FdPoint3d.FromDynamo(obj.EndPoint); // lcs FdCoordinateSystem cs = FdCoordinateSystem.FromDynamoCurve(obj); // return return(new Geometry.Edge(startPoint, endPoint, cs)); }
/// <summary> /// Create Edge (Line or Circle or Arc) from Dynamo NurbsCurve. /// </summary> public static Geometry.Edge FromDynamoNurbsCurve(Autodesk.DesignScript.Geometry.NurbsCurve obj) { // points on curve Autodesk.DesignScript.Geometry.Point startPoint, midPoint, endPoint; startPoint = obj.StartPoint; midPoint = obj.PointAtParameter(0.5); endPoint = obj.EndPoint; // distances to compare with curve length. double dist0 = Autodesk.DesignScript.Geometry.Vector.ByTwoPoints(startPoint, endPoint).Length; double dist1 = Autodesk.DesignScript.Geometry.Vector.ByTwoPoints(startPoint, midPoint).Length; // check if NurbsCurve is a Line if (Math.Abs(dist0 - obj.Length) < Tolerance.LengthComparison) { return(Edge.FromDynamoLinearNurbsCurve(obj)); } // check if NurbsCurve is a Circle else if (obj.IsClosed && Math.Abs(dist1 * Math.PI - obj.Length) < Tolerance.LengthComparison) { Autodesk.DesignScript.Geometry.Point p0, p1, p2; p0 = obj.PointAtParameter(0); p1 = obj.PointAtParameter(0.333); p2 = obj.PointAtParameter(0.667); Autodesk.DesignScript.Geometry.Circle circle = Autodesk.DesignScript.Geometry.Circle.ByThreePoints(p0, p1, p2); return(Edge.FromDynamoCircle(circle)); } // if NurbsCurve is not a Line or a Circle. else { // See if it can be cast to an Arc by three points try { Autodesk.DesignScript.Geometry.Arc arc = Autodesk.DesignScript.Geometry.Arc.ByThreePoints(startPoint, midPoint, endPoint); return(Edge.FromDynamoArc1(arc)); } // If casting was not successful the NurbsCurve is not a Line, a Circle or an Arc catch { throw new System.ArgumentException("NurbsCurve is not a Line, a Circle or an Arc. Unable to convert NurbsCurve to an Edge."); } } }