173 lines
4.7 KiB
C#
173 lines
4.7 KiB
C#
using Autodesk.Revit.DB;
|
||
using Autodesk.Revit.DB.Structure;
|
||
|
||
namespace ShrlAlgo.Toolkit.Revit.Assist
|
||
{
|
||
/// <summary>
|
||
/// 单位转换
|
||
/// </summary>
|
||
public static class UnitAssist
|
||
{
|
||
/// <summary>
|
||
/// 小数四舍五入
|
||
/// </summary>
|
||
/// <param name="a"></param>
|
||
/// <param name="digits">保留小数位数</param>
|
||
/// <returns></returns>
|
||
public static double FloatRounding(this double a, int digits)
|
||
{
|
||
return (double)Math.Round((decimal)a, digits, MidpointRounding.AwayFromZero);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 向上取整
|
||
/// </summary>
|
||
/// <param name="a"></param>
|
||
/// <returns></returns>
|
||
public static int GetCeiling(this double a)
|
||
{
|
||
return (int)Math.Ceiling(a);
|
||
}
|
||
|
||
public static double GetDiameterInMillimeter(this RebarBarType rbt)
|
||
{
|
||
#if REVIT2025
|
||
var d = rbt.BarNominalDiameter.ToMillimeter();
|
||
#else
|
||
var d = rbt.BarDiameter.ToMillimeter();
|
||
#endif
|
||
return Math.Round(d, 1, MidpointRounding.ToEven);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 向下取整
|
||
/// </summary>
|
||
/// <param name="a"></param>
|
||
/// <returns></returns>
|
||
public static int GetFloor(this double a)
|
||
{
|
||
return (int)Math.Floor(a);
|
||
//return (int)a;
|
||
}
|
||
|
||
public static double? GetValueFromString(this string text, Units units)
|
||
{
|
||
#if USE_FORGETYPEID
|
||
if (UnitFormatUtils.TryParse(units, SpecTypeId.Length, text, out var value))
|
||
#elif REVIT2018 || REVIT2020
|
||
if (UnitFormatUtils.TryParse(units, UnitType.UT_Length, text, out var value))
|
||
#elif REVIT2025
|
||
if (UnitFormatUtils.TryParse(units, SpecTypeId.Length, text, out var value))
|
||
#endif
|
||
{
|
||
return value;
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 基于Revit的精度,判断值是否近似相等
|
||
/// </summary>
|
||
/// <param name="a"></param>
|
||
/// <param name="b"></param>
|
||
/// <returns></returns>
|
||
public static bool IsAlmostEqual(double a, double b)
|
||
{
|
||
return IsZero(b - a);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 基于Revit的精度,判断值是否为零
|
||
/// </summary>
|
||
/// <param name="a"></param>
|
||
/// <param name="tolerance"></param>
|
||
/// <returns></returns>
|
||
public static bool IsZero(double a, double tolerance = 1.0e-9)
|
||
{
|
||
return tolerance > Math.Abs(a);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 四舍五入取整
|
||
/// </summary>
|
||
/// <param name="a"></param>
|
||
/// <returns></returns>
|
||
public static int Rounding(this double a)
|
||
{
|
||
return (int)Math.Round(a, MidpointRounding.AwayFromZero);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 弧度转角度
|
||
/// </summary>
|
||
/// <param name="radian"></param>
|
||
/// <returns></returns>
|
||
public static double ToDegree(this double radian)
|
||
{
|
||
return radian * 180.0 / Math.PI;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 毫米转英尺
|
||
/// </summary>
|
||
/// <param name="mm"></param>
|
||
/// <returns></returns>
|
||
public static double ToFeet(this int mm)
|
||
{
|
||
return mm / 304.8;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 毫米转英尺
|
||
/// </summary>
|
||
/// <param name="mm"></param>
|
||
/// <returns></returns>
|
||
public static double ToFeet(this double mm)
|
||
{
|
||
return mm / 304.8;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 英尺转毫米
|
||
/// </summary>
|
||
/// <param name="ft"></param>
|
||
/// <returns></returns>
|
||
public static double ToMillimeter(this double ft)
|
||
{
|
||
return ft * 304.8;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 角度转弧度
|
||
/// </summary>
|
||
/// <param name="degree"></param>
|
||
/// <returns></returns>
|
||
public static double ToRadian(this double degree)
|
||
{
|
||
return degree * Math.PI / 180.0;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 平方毫米转平方英尺
|
||
/// </summary>
|
||
/// <param name="squaremm"></param>
|
||
/// <returns></returns>
|
||
public static double ToSquareFeet(this int squaremm)
|
||
{
|
||
return squaremm / (304.8 * 304.8);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 平方英尺转平方毫米
|
||
/// </summary>
|
||
/// <param name="squareft"></param>
|
||
/// <returns></returns>
|
||
public static double ToSquareMillimeter(this double squareft)
|
||
{
|
||
return squareft * (304.8 * 304.8);
|
||
|
||
}
|
||
}
|
||
}
|