Revit内部基本单位是英尺,如果要获取或设置构件参数数值需要进行单位转换,比如转换为基本的毫米或米等单位
1.可以使用常规方式进行转换:1英尺等于0.3047999995367米,等于304.7999995367毫米
2.可以使用RevitAPI内置的转换函数进行目标单位的转换
使用UnitUtils函数的public static double Convert(double value,DisplayUnitType currentDisplayUnit,DisplayUnitType desiredDisplayUnit)方法
可以判断参数是以何种单位显示在界面上的。如:Parameter.DisplayUnitType属性,然后根据DisplayUnitType枚举找到想要转换的单位类型
//英尺到米
double d = UnitUtils.Convert(value, DisplayUnitType.DUT_DECIMAL_FEET, DisplayUnitType.DUT_METERS);
//英尺到毫米
double d = UnitUtils.Convert(value,DisplayUnitType.DUT_DECIMAL_FEET,DisplayUnitType.DUT_MILLIMETERS);
//平方英尺到平方米
double d = UnitUtils.Convert(value, DisplayUnitType.DUT_SQUARE_FEET, DisplayUnitType.DUT_SQUARE_METERS);
//立方英尺到立方米
double d = UnitUtils.Convert(value, DisplayUnitType.DUT_CUBIC_FEET, DisplayUnitType.DUT_CUBIC_METERS);
DisplayUnitType枚举内含有大量的单位类型 读者可以根据所需单位进行查找。
实际项目中使用的代码,写死了,所有单位都转换为M制。
private const double METERS_IN_FEET = 0.3048;
public static double CovertFromAPI(DisplayUnitType to, double value)
{
switch (to)
{
case DisplayUnitType.DUT_METERS:
return value * METERS_IN_FEET;
case DisplayUnitType.DUT_CENTIMETERS:
return value * METERS_IN_FEET * 100;
case DisplayUnitType.DUT_MILLIMETERS:
return value * METERS_IN_FEET * 1000;
default:
return value;
}
}
public static double CovertFromAPIToMeters(UnitType to, double value)
{
switch (to)
{
case UnitType.UT_Length:
return value * METERS_IN_FEET;
default:
return value;
}
}
public static double LengthConverFromAPI(Document document, double dLength)
{
UnitType unitType = UnitType.UT_Length;
var projectUnits = document.GetUnits();
Autodesk.Revit.DB.FormatOptions formatOption = projectUnits.GetFormatOptions(unitType);
//return CovertFromAPI(formatOption.DisplayUnits, dLength);
return CovertFromAPIToMeters(unitType, dLength);
}
public static XYZ ConvertXyzToProjectUnit(Document document, XYZ zyx)
{
var xx = RevitUtil.LengthConverFromAPI(document, zyx.X);
var yy = RevitUtil.LengthConverFromAPI(document, zyx.Y);
var zz = RevitUtil.LengthConverFromAPI(document, zyx.Z);
return new XYZ(xx, yy, zz);
}