Revit插件兼容2022版本升级策略(3) —方案设计

三、方案设计

a、方案描述

     通过上面两篇文章对背景和问题的分析,我们设计如下解决方案:

     以兼容DIsplayUnityType和UnitForgeId(ForgeTypeId)为例

    1、定义Revit单位类型替换类(UnifyTypeId统一类型ID)

    2、将Revit对象实例中,包含DIsplayUnityType或者UnitForgeId(ForgeTypeId)的

          方法或者属性,进行扩展重写,使用UnifyTypeId替代相关的输入值或者返回值

    3、定义新的抽象静态工具类,将静态工具类中,包含DIsplayUnityType或者           UnitForgeId(ForgeTypeId)的方法进行重写,使用UnifyTypeId替代相关的输入值或者返回值

类型转换图:

方法映射图 

 

 

 

b、设计过程

第一条【1】:以类似2022的实现方式去兼容旧技术,类的表达能力要比枚举强,为了更好的应对未来的变化。适配类型为UnifyTypeId。静态业务分组类UnitForgeId——>AUnitTypeId。A表达抽象

第二条【2】:以扩展方法的形式去扩展,降低使用适配方法的差异化,更容易平滑过渡

例如:

public static FieldType Get<FieldType>(this Entity entity,string fieldName, UnifyTypeId unitTypeId)
        {
#if R20 || R19 || R18
            var current = (DisplayUnitType)GeneralRevitEnvironment.TypeIdMapManager.GetUnitValue(unitTypeId?.TypeId);
            return entity.Get<FieldType>(fieldName, current);
#else
            return entity.Get<FieldType>(fieldName,new ForgeTypeId(unitTypeId.TypeId));
#endif
            return default(FieldType);
        }

第三条【3】:定义统一前缀扩展的静态工具类,例如UnitUtils——>AUnitUtils。方法名称尽量与2022版本保持一致。

 

总结:

现在引申出了两个首要解决的问题:

1、如何找到那些发生变化的过时的枚举,以及这些枚举关联的其他类的方法,属性。

2、如何建立自定义对象UnifyTypeId 与Revit原生对象DisplayUnitType和ForgeTypeId的关系。

我们下一篇去解决这两个问题,并对方案进行初步实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值