Revit 二次开发,长度单位转换位,坐标系转换为M

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值