Revit WPF WinForms那点事

19 篇文章 0 订阅
1 篇文章 0 订阅

Revit WPF WinForms那点事

最近团队内关于Revit的用户交互界面到底是使用WinForm还是WPF意见也不是特别统一,自己看了一些github上的代码,有些想法分享一下。加上最近在看Jeremy 博客,的时候发现,其实国外这也是一直持续被人讨论的话题,不过从他的博客上看其实是已经趋近于有一个统一的结论。


到底是WinForms 还是 WPF?

在这里插入图片描述


文章大概意思是:

在Revit API的论坛上,大家广泛讨论了关于在Revit 插件中使用 WinForms 还是WPF的问题,比较明确推荐使用WPF为一个更好的选择,理由很多如下:

  • WPF能更好的完成动态的UI界面
  • WPF绑定的机制很好
  • WinForms在高分辨率的屏幕下有非常严重的缩放问题

-----------例子来源国外一家近10年商业Revit开发公司,发现越来越多的用户开始抱怨在4K屏幕下运行插件有问题,一般人在电脑上爱设置150%,200%的文字缩放,一旦这么设置,如果是WInform界面的用户就会发现滚动条不能用了,按钮飞出窗体等问题。

  • WPF的app没有缩放问题
  • WPF的UI界面是采用更为现代化方式搭建的,如:style样式,XML的布局(XML layout),代码逻辑文件分离

1)类似我们在其他像Android / iOS / macOS / web 开发上用框架搭建UI那样

2)为拓展我们开发知识面做了更好的准备

3)将层次结构区分更加清晰,更加灵活,更多可复用代码

  • WPF界面看上去更好,友好的UI,用户更青睐

——样式和动态绑定天然使我们能更容易创造出更具现代化的用户交互(UX)

  • MVVM架构是一个很好的特性,特别是在处理对象(objects )和视图(views)关系时

  • 你可以把WPF界面内置入Revit的窗体中

唯一不好的一点是许多现有的Revit SDK或者其他地方例子都是用的Winforms
Revit IFC 开源组织的 UI 是用的 WPF, 如果想要可以去那上面找你们需要的例子,这也是Jeremy问过官方后的回复。

Revit WPF Template开发模板

Github上也有一个非常不错的开源模板(revit-wpf-template)可供我们参考,git 上有关于使用的全部说明,文档齐全,也说了在自己项目重构有哪几个地方是需要注意的,非常的开箱即用,很友好。


在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这个样例主要还是继承的Revit的外部事件IExternalEventHandler接口,在这个基础上封装了一层,做到一定程度的与UI界面和Revit的解耦。

封装的类中下面几个是比较核心的:

EntryCommand
EntryCommandSeparateThread

这个两个类主要是外部应用加载命令的入口,非常的薄的一层,只是用于展示WPF窗体,获取Revit的上下文(ExternalCommandData)。文档说,如果不需要窗体的话也可以作为执行主要业务逻辑的入口。

RevitEventWrapper

这个类在RevitEventWrapper.cs文件中是整个逻辑的核心思想部分,虽然文档介绍很少,但是这个抽象类继承了IExternalEventHandler,用了参数泛型,更加适合不同类型参数传参。

EventHandlerWithStringArg
EventHandlerWithWpfArg

这两个类是在刚才抽象类的具体实现,作者基于ExternalEventHandler针对string类型和WPF窗体作为参数,对方法又封装了一层。其实参数的类型也局限于这两种,作者只是表示了值类型和引用类型参数传递的方式如何使用。

文档中还建议WPF方式适用于更小型的应用程序,更加方便拿到WPF中的属性,但是在较大应用程序中,就会变得很笨重。所以建议多用更低等级“low-level”封装,比如string类型方式。

具体代码实现可以去git上看下,传送门:
https://github.com/mitevpi/revit-wpf-template

鄙人愚见:

(required)在Revit使用WPF做为UI界面看来是非常必要和业内未来主流趋势;

(optional)在WPF基础上引入一些MVVM框架,做到前后端分离是被推荐的,可以做到很大程度的UI和逻辑分离,更贴合现在开发习惯。但是不建议引入过于复杂框架,学习成本过高。

(recommend)参考了很多其他人的demo,在调用Revit上,基本都是采用的外部事件或者自定义事件方式,这是更为主流做法。


BIM树洞

做一个静谧的树洞君

用建筑的语言描述IT事物;

用IT的思维解决建筑问题;

共建BIM桥梁,聚合团队。

本学习分享资料不得用于商业用途,仅做学习交流!!如有侵权立即删除!!


  • 微信公众号: BIM树洞
    在这里插入图片描述

  • 知乎专栏:BIM树洞

  • 气氛组博客:http://www.31bim.com

  • BIM应用及咨询,CAD,Revit, OpenGL,图形开发交流,加Q群1083064224

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值