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