网上已经有人写过一些视图联动的帖子了,我这里将这个功能封装成一个类,以方便使用。

核心思想

第一步:组织需要关联的视图集合。这些视图要存在对应的UIView才有意义;

第二步:绑定UIApplication的Idling和ViewActivated事件;

1、Idling事件处理UI视图显示范围同步,以ActiveView为基准,调整其他视图;

2、ViewActivated事件监控是否要结束掉联动行为。

第三步: 触发自动撤销联动行为;

1、 当前激活操作视图不是传入视图集合中的一个,或者关联视图对应的UIView数量为0时,自动关闭关联;
               2、其他异常情况时同样关闭事件关联。

源码

  /// <summary>/// 视图联动集合/// </summary>public class LinkViews{/** 关联关系自动关闭场景:* 当前激活操作视图不是传入视图集合中的一个,或者关联视图对应的UIView数量为0时,自动关闭关联;* 其他异常情况方式时同样关闭事件关联*/public LinkViews(IEnumerable<View> views){Views = new ReadOnlyCollection<View>(new List<View>(views));}/// <summary>/// 开启联动/// </summary>/// <param name="uiApplication"></param>public void Start(UIApplication uiApplication){uiApplication.Idling += OnIdling;uiApplication.ViewActivated += OnViewActivated;}/// <summary>/// 结束联动/// </summary>/// <param name="uiApplication"></param>public void Stop(UIApplication uiApplication){uiApplication.Idling -= OnIdling;uiApplication.ViewActivated -= OnViewActivated;}/// <summary>///关联视图信息/// </summary>public ReadOnlyCollection<View> Views { get; private set; }private void OnViewActivated(object sender, ViewActivatedEventArgs e){var uiApp = sender as UIApplication;try{var uidoc = uiApp.ActiveUIDocument;var doc = uidoc.Document;var acview = doc.ActiveView;if (!Views.Any(v => v.Id == acview.Id)){Stop(uiApp);}}catch (Exception){Stop(uiApp);}}private void OnIdling(object sender, IdlingEventArgs e){var uiApp = sender as UIApplication;try{var uidoc = uiApp.ActiveUIDocument;var acview = uidoc.Document.ActiveView;var uiViews = uidoc.GetOpenUIViews();var baseView = uiViews.FirstOrDefault(uView => uView.ViewId == acview.Id);if (baseView == null){Stop(uiApp);return;}var viewCorners = baseView.GetZoomCorners();bool hasLinkView = false;foreach (View view in Views){if (view.Id == baseView.ViewId)continue;var uiView = uiViews.FirstOrDefault(uView => uView.ViewId == view.Id);uiView?.ZoomAndCenterRectangle(viewCorners[0], viewCorners[1]);hasLinkView = true;}if (!hasLinkView){Stop(uiApp);}}catch (Exception){Stop(uiApp);}}}

使用方法 

下面的命令使用了我架构中的基类,测试的话直接Copy使用Excute方法里的代码就可以了

    [Transaction(TransactionMode.Manual)][Regeneration(RegenerationOption.Manual)][Button(ButtonName = "视图联动", TabName = "Test", PanelName = "Test")]public class LinkViewCommand : ExternalCommand{private LinkViews m_LinkViews;public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){if(m_LinkViews!=null){m_LinkViews.Stop(commandData.Application);}var views=commandData.Application.ActiveUIDocument.Document.GetElements<View>();m_LinkViews = new LinkViews(views);m_LinkViews.Start(commandData.Application);return Result.Succeeded;}}

效果

点击激活视图,则该视图成为基准视图

Revit—视图联动相关推荐

  1. android开发 视图联动_新版首页技术设计和实现方案(Android)

    动效设计 1.两级吸顶 CoordinatorLayout+AppBarLayout可以轻松的实现一级吸顶的功能,两级吸顶并不支持.要实现两级吸顶,可以有两种思考:一,在此基础之上再完成一次吸顶:二, ...

  2. Revit 视图范围的知识总结

    我们先来解释一下视图范围的几个参数值到底是什么意思. 偏移值就不说了,共有四个面(括号里对应的是API中的枚举值): 1.顶部(PlanViewPlane.TopClipPlane) 2.剖切面(Pl ...

  3. 【BIM入门实战】Revit视图中图元看不见的原因总结

    在Revit模型设计的过程中,有时会提示绘制的图元不可见,通常情况下,可以采用以下三种方法让隐藏的图元显示出来. 原因一:视图范围 平面视图的形成是由操作平面对三维进行 水平切割的俯视图,如果绘制的图 ...

  4. 编程获取Revit视图中的所有实例对象数量

    转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7678923 作者: 叶雄进, Autodesk ADN 问题: ...

  5. android开发 视图联动_android开发_ViewGroup(组视图)-- 五大布局

    view组--ViewGroup(组视图) ViewGroup的作用:在view中添加子控件.ViewGroup的5个子类,就是五大布局: (1) LinearLayout  线性布局(常用) (2) ...

  6. android开发 视图联动_Flutter混合APP开发

    混合开发简介 使用Flutter从零开始开发App是一件轻松惬意的事情,但对于某些成熟的产品而言,完全替代弃用App的历史沉淀,全面转向Flutter是不现实的.因此使用Flutter去统一Andro ...

  7. android开发 视图联动_仿支付宝“全部应用”模块,联动布局的demo

    RecyclerViewTabLayout 页面布局,采用CoordinatorLayout嵌套Recyclerview,TabLayout吸顶.和支付宝页面类似 内容区域采取嵌套Recyclervi ...

  8. 仪表板展示|DataEase可视化数据分析工具中的视图钻取和联动设置

    最近使用DataEase做了一组2021年8月居民消费价格数据分析的图表.DataEase是开源的数据可视化分析工具,可以帮助用户快速分析数据并洞察业务趋势,实现业务的改进与优化.DataEase支持 ...

  9. Revit API:View 视图概述

    前言 本文介绍 Revit 视图相关的基本接口. 内容 View 继承结构 所有的视图都是继承自 Autodesk.Revit.DB.View,分别对应各种视图类型. View 的实例 以官方给的文件 ...

最新文章

  1. 【问链-EOS公开课】第八课 EOS 数据库与持久化 API(一)
  2. Java EE 7社区调查结果!
  3. 用Java写有关早上的语录,实用的适合早上发的早安问候语语录汇编39句
  4. office2010 启动man_Office2010打开很慢怎么回事如何解决 Office2010无法安装怎么解决办法...
  5. 交换两个变量的值(三种方式、完整代码)
  6. Direct2D处理几何图形之间的碰撞检测(下)
  7. 关于map的几种非常规排序
  8. swpu计算机科学学院推荐免试,西南石油大学2020届本科毕业生推荐免试硕士研究生结果公示 - 千里马招标网...
  9. zbbz的lisp_学习LISP语言的体会
  10. java 页眉页脚_Java 添加Word页眉、页脚
  11. 04-Redis 数据持久化实践
  12. 17AHU排位赛1 C题(经典DP)
  13. ORACLE 全角数字转半角数字
  14. PPT不能编辑,如何取消PPT的只读模式?
  15. 电视剧《大秧歌》随感
  16. Fedora 17正式版 亮点抢先体验
  17. 荣耀6 H60-L01连接上WIFI但是无法上网
  18. java poi-tl处理world动态表格
  19. Java高铁的速度是火车的两倍_亚洲最大的三座高铁站, 全部都是特等站, 毫无疑问都在中国...
  20. Jmeter压测输出可观报告--用表格察看结果(view results in table)输出excel格式

热门文章

  1. 武林外传手游怎么在电脑上玩,武林外传安卓模拟器电脑版教程
  2. 基于51单片机多功能智能心率检测仪设计(毕设课设)
  3. Blazor组件自做十二 : Blazor Pdf Reader PDF阅读器 组件
  4. JAVA和H5的优势有哪些
  5. 《看板实战》读书笔记 XMIND版本
  6. 阳光宽频加密算法破解,找出隐藏真实地址。
  7. 码农深夜骑车逆行被拦后爆发大哭,称压力好大!
  8. Game Plug-ins(2)
  9. 用单链表编程实现一个简易的高校学籍管理系统_SSM框架实现学生学籍管理系统...
  10. Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩