Esempio n. 1
0
 /// <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));
 }
Esempio n. 2
0
 /// <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));
 }
Esempio n. 3
0
        /// <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));
        }
Esempio n. 4
0
        /// <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));
        }
Esempio n. 5
0
        /// <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()));
        }
Esempio n. 6
0
        /// <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()));
        }
Esempio n. 7
0
        /// <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.");
                }
            }
        }
Esempio n. 8
0
        /// <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);
        }