/// <summary> /// Create an Advance Steel Concrete Bent Beam from a Dynamo Arc /// </summary> /// <param name="concName"> Concrete Profile Name</param> /// <param name="arc"> Dynamo Arc to define beam</param> /// <param name="additionalConcParameters"> Optional Input Build Properties </param> /// <returns name="beam"> beam</returns> public static ConcreteBentBeam ByArc(string concName, Autodesk.DesignScript.Geometry.Arc arc, [DefaultArgument("null")] List <Property> additionalConcParameters) { Autodesk.DesignScript.Geometry.Point start = arc.StartPoint; Autodesk.DesignScript.Geometry.Point end = arc.EndPoint; Autodesk.DesignScript.Geometry.Point ptOnArc = arc.PointAtChordLength(); additionalConcParameters = PreSetDefaults(additionalConcParameters); return(new ConcreteBentBeam(concName, start, end, ptOnArc, arc.Normal, additionalConcParameters)); }
/// <summary> /// Create an Advance Steel bent beam on a Dynamo Arc- inc ModelRole and Section Size /// </summary> /// <param name="arc">Input Dynamo Node</param> /// <param name="orientation">Section orientation</param> /// <param name="refAxis">Input Beam reference axis UpperLeft = 0, UpperSys = 1, UpperRight = 2, MidLeft = 3, SysSys = 4, MidRight = 5, LowerLeft = 6, LowerSys = 7, LowerRight = 8, ContourCenter = 9</param> /// <param name="crossSectionMirror">Input Beam Mirror Option</param> /// <param name="additionalBeamParameters"> Optional Input Beam Build Properties </param> /// <returns name="bentBeam"> beam</returns> public static BentBeam ByArc(Autodesk.DesignScript.Geometry.Arc arc, [DefaultArgument("Autodesk.DesignScript.Geometry.Vector.ZAxis();")] Autodesk.DesignScript.Geometry.Vector orientation, [DefaultArgument("5;")] int refAxis, [DefaultArgument("false;")] bool crossSectionMirror, [DefaultArgument("null")] List <Property> additionalBeamParameters) { Autodesk.DesignScript.Geometry.Point[] cvs = arc.PointsAtEqualSegmentLength(2); additionalBeamParameters = PreSetDefaults(additionalBeamParameters); return(new BentBeam(arc.StartPoint, arc.EndPoint, cvs[0], orientation, refAxis, crossSectionMirror, additionalBeamParameters)); }
/// <summary> /// Create Edge (Arc2) from Dynamo Arc. /// Used for bar definition. /// </summary> public static Geometry.Edge FromDynamoArc2(Autodesk.DesignScript.Geometry.Arc obj) { FdPoint3d p0 = FdPoint3d.FromDynamo(obj.StartPoint); FdPoint3d p1 = FdPoint3d.FromDynamo(obj.PointAtParameter(0.5)); FdPoint3d p2 = FdPoint3d.FromDynamo(obj.EndPoint); // lcs FdCoordinateSystem cs = FdCoordinateSystem.FromDynamoCurve(obj); // return return(new Geometry.Edge(p0, p1, p2, cs)); }
/// <summary> /// Create Edge (Arc1) from Dynamo Arc. /// </summary> public static Geometry.Edge FromDynamoArc1(Autodesk.DesignScript.Geometry.Arc obj) { double radius = obj.Radius; double startAngle = 0; double endAngle = startAngle + Degree.ToRadians(obj.SweepAngle); FdPoint3d centerPoint = FdPoint3d.FromDynamo(obj.CenterPoint); FdVector3d xAxis = new FdVector3d(centerPoint, FdPoint3d.FromDynamo(obj.StartPoint)).Normalize(); // lcs FdCoordinateSystem cs = FdCoordinateSystem.FromDynamoCurve(obj); // return return(new Geometry.Edge(radius, startAngle, endAngle, centerPoint, xAxis, cs)); }
/// <summary> /// Create a Revit Grid Element in a project along an Arc /// </summary> /// <param name="arc"></param> /// <returns></returns> public static Grid ByArc(Autodesk.DesignScript.Geometry.Arc arc) { if (Document.IsFamilyDocument) { throw new Exception("A Grid Element can only be created in a Revit Project"); } if (arc == null) { throw new ArgumentNullException("arc"); } return(new Grid((Autodesk.Revit.DB.Arc)arc.ToRevitType())); }
/// <summary> /// Create a Revit Grid Element in a project along an Arc /// </summary> /// <param name="arc"></param> /// <returns></returns> public static Grid ByArc(Autodesk.DesignScript.Geometry.Arc arc) { if (Document.IsFamilyDocument) { throw new Exception(Properties.Resources.GridCreationFailure); } if (arc == null) { throw new ArgumentNullException("arc"); } return(new Grid((Autodesk.Revit.DB.Arc)arc.ToRevitType())); }
/// <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."); } } }
/// <summary> /// Create an Advance Steel Unfolded Beam between two points from an arc /// </summary> /// <param name="arc"></param> /// <param name="orientation"> Input reference vector of arc</param> /// <param name="startPoint"> Input Start Point of Unfolded Beam</param> /// <param name="endPoint"> Input End Point of Unfolded Beam</param> /// <param name="thickness"> Input thickness of Unfolded Beam</param> /// <param name="additionalBeamParameters"> Optional Input Beam Build Properties </param> /// <returns name="unFoldedBeam"> beam</returns> public static UnFoldedBeam ByArc(Autodesk.DesignScript.Geometry.Arc arc, Autodesk.DesignScript.Geometry.Vector orientation, Autodesk.DesignScript.Geometry.Point startPoint, Autodesk.DesignScript.Geometry.Point endPoint, double thickness, [DefaultArgument("null")] List <Property> additionalBeamParameters) { additionalBeamParameters = PreSetDefaults(additionalBeamParameters, Utils.ToInternalDistanceUnits(thickness, true)); CircArc3d cc = new CircArc3d(Utils.ToAstPoint(arc.StartPoint, true), Utils.ToAstPoint(arc.PointAtSegmentLength(arc.Length / 2), true), Utils.ToAstPoint(arc.EndPoint, true)); Polyline3d poly = new Polyline3d(); poly = cc.GetPolyline3d(); if (poly == null) { throw new System.Exception("No Valid Poly"); } return(new UnFoldedBeam(poly, startPoint, endPoint, orientation, additionalBeamParameters)); }
private static double BulgeFromCurve(Autodesk.DesignScript.Geometry.Curve cv, bool clockwise) { double bulge = 0.0; Autodesk.DesignScript.Geometry.Arc a = cv as Autodesk.DesignScript.Geometry.Arc; if (a != null) { double newStart; // The start angle is usually greater than the end // as arcs are all counter-clockwise. // (If it isn't it's because the arc crosses the // 0-degree line, and we can subtract 2PI from the // start angle.) if (a.StartAngle > a.SweepAngle) { newStart = a.StartAngle - 8 * Math.Atan(1); } else { newStart = a.StartAngle; } // Bulge is defined as the tan of // one fourth of the included angle bulge = Math.Tan((a.SweepAngle - newStart) / 4); // If the curve is clockwise, we negate the bulge if (clockwise) { bulge = -bulge; } } return(bulge); }