/// <summary>
        /// Create a column.
        /// </summary>
        /// <param name="curve">The curve which defines the center line of the column.</param>
        /// <param name="level">The level with which you'd like the column to be associated.</param>
        /// <param name="structuralColumnType">The structural column type representing the column.</param>
        /// <returns></returns>
        public static StructuralFraming ColumnByCurve(
            Autodesk.DesignScript.Geometry.Curve curve, Revit.Elements.Level level, Revit.Elements.FamilyType structuralColumnType)
        {
            if (curve == null)
            {
                throw new System.ArgumentNullException("curve");
            }

            if (level == null)
            {
                throw new System.ArgumentNullException("level");
            }

            if (structuralColumnType == null)
            {
                throw new System.ArgumentNullException("structuralColumnType");
            }

            var start = curve.PointAtParameter(0);
            var end   = curve.PointAtParameter(1);

            // Revit will throw an exception if you attempt to create a column whose
            // base is above its top.
            if (end.Z <= start.Z)
            {
                throw new Exception(Properties.Resources.InvalidColumnBaseLocation);
            }

            return(new StructuralFraming(curve.ToRevitType(), level.InternalLevel, Autodesk.Revit.DB.Structure.StructuralType.Column, structuralColumnType.InternalFamilySymbol));
        }
        /// <summary>
        /// Creates a vector between the midpoint of two curves
        /// </summary>
        /// <param name="crv1"></param>
        /// <param name="crv2"></param>
        /// <search></search>
        public static Autodesk.DesignScript.Geometry.Vector ByTwoCurves(this Autodesk.DesignScript.Geometry.Curve crv1, Autodesk.DesignScript.Geometry.Curve crv2)
        {
            Autodesk.DesignScript.Geometry.Point pt1 = crv1.PointAtParameter(0.5);
            Autodesk.DesignScript.Geometry.Point pt2 = crv2.PointAtParameter(0.5);

            Autodesk.DesignScript.Geometry.Vector vec = Autodesk.DesignScript.Geometry.Vector.ByTwoPoints(pt1, pt2);

            pt1.Dispose();
            pt2.Dispose();

            return(vec);
        }
        /// <summary>
        /// 判断两条曲线相等(通过两条曲线上的点来判断精确度越高判断越准确
        /// </summary>
        /// <param name="curve"></param>
        /// <param name="curve2"></param>
        /// <param name="Accuracy"></param>
        /// <returns></returns>
        public static bool IsAlmostEqualsTo(this DyCurve curve, DyCurve curve2, int Accuracy = 100)
        {
            //判断从0到1的 分段点上  点相等 而且 所在点的切线平行
            double accuracyPercent = -1;

            if (Accuracy == 0)
            {
                throw new Exception("wrong parameter");
            }
            for (int i = 0; i <= Accuracy; i++)
            {
                accuracyPercent = i == 0?0:i / Accuracy;
                if (!curve.PointAtParameter(accuracyPercent).IsAlmostEqualTo(curve2.PointAtParameter(accuracyPercent)) ||
                    !curve.TangentAtParameter(accuracyPercent).IsParallel(curve2.TangentAtParameter(accuracyPercent))
                    )
                {
                    return(false);
                }
            }
            return(true);
        }
Example #4
0
 /// <summary>
 /// 获取点
 /// </summary>
 /// <param name="curve"></param>
 /// <param name="t"></param>
 /// <returns></returns>
 public static Autodesk.DesignScript.Geometry.Point GetPoint(Autodesk.DesignScript.Geometry.Curve curve, double t)
 {
     return(curve.PointAtParameter(t));
 }