Revit二开--视图同步 带源码

Revit二开–视图同步

之前有同学问我,视图同步怎么做。其实这个功能不复杂,直接上代码。
代码已集成到 唐僧解瓦项目
唐僧解瓦 项目 github地址:https://github.com/binbinstrong/tangsengjiewa

   [Transaction(TransactionMode.Manual)]
    class Cmd_ViewSimultaneous : IExternalCommand
    {
        public static ElementId Id_view1;
        public static ElementId Id_view2;
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            var uiapp = commandData.Application;
            var uidoc = uiapp.ActiveUIDocument;
            var doc = uidoc.Document;
            var sel = uidoc.Selection; 

            var planviewfilter = new ElementClassFilter(typeof(ViewPlan));
            var view3dfilter = new ElementClassFilter(typeof(View3D));
            var viewdraftingfilter = new ElementClassFilter(typeof(ViewDrafting));

            var logicfilter = new LogicalOrFilter(new List<ElementFilter>(){planviewfilter,view3dfilter,viewdraftingfilter});

            var views = new FilteredElementCollector(doc).WhereElementIsNotElementType().WherePasses(logicfilter)
                .Where(m => !(m as View).IsTemplate).ToList();
             
            //1.选择 联动的两个窗口
            var selector = ViewSemutaneousSelector.Instance;
            selector.combo1.ItemsSource = views;
            selector.combo1.DisplayMemberPath = "Name";
            selector.combo1.SelectedIndex = 0;

            views.Remove(selector.combo1.SelectionBoxItem as View);

            selector.combo2.ItemsSource = views  ;
            selector.combo2.DisplayMemberPath = "Name";
            selector.combo2.SelectedIndex = 0;
            selector.ShowDialog();

            Id_view1 = (selector.combo1.SelectionBoxItem as View).Id;
            Id_view2 = (selector.combo2.SelectionBoxItem as View).Id;
             

            //激活两个窗口 并关闭其余窗口
            uidoc.ActiveView = doc.GetElement(Id_view2) as View;
            uidoc.ActiveView = doc.GetElement(Id_view1) as View;
            var uiviews = uidoc.GetOpenUIViews();
            foreach (var uiview in uiviews)
            {
                if (uiview.ViewId == Id_view1 || uiview.ViewId == Id_view2)
                {
                    continue;
                }
                else
                {
                    uiview.Close();
                }
            }

            //2.平铺窗口
            var tileviewcommand = RevitCommandId.LookupPostableCommandId(PostableCommand.TileViews);
            uiapp.PostCommand(tileviewcommand);

            //在空闲事件中 同步视图
            uiapp.Idling += OnIdling;
            //视图激活事件中 检测目标视图是否关闭 若关闭则退出视图同步功能
            uiapp.ViewActivated += OnviewActivated;

            return Result.Succeeded;
        }

        private void OnviewActivated(object sender, ViewActivatedEventArgs e)
        {
            var uiapp = sender as UIApplication;
            var uidoc = uiapp.ActiveUIDocument;
            var doc = uidoc.Document;

            var acview = doc.ActiveView;
            if (acview.Id != Id_view1 && acview.Id != Id_view2)
            {
                uiapp.Idling -= OnIdling;
            }
        }

        private void OnIdling(object sender, IdlingEventArgs e)
        {
            var uiapp = sender as UIApplication;

            var uidoc = uiapp.ActiveUIDocument;
            var doc = uidoc.Document;
            var sel = uidoc.Selection;

            //var acview = doc.ActiveView;
            var view1 = doc.GetElement(Id_view1) as View;
            var view2 = doc.GetElement(Id_view2) as View;

            var uiview1 = uidoc.GetOpenUIViews().Where(m => m.ViewId == Id_view1).FirstOrDefault();
            var uiview2 = uidoc.GetOpenUIViews().Where(m => m.ViewId == Id_view2).FirstOrDefault();


            var viewcorners = uiview1.GetZoomCorners();
            var corner1 = viewcorners.First();
            var corner2 = viewcorners.Last();
             
            //LogHelper.LogWrite(corner1.ToString()+"::"+corner2.ToString(),@"c:\aaa.txt");
            uiview2.ZoomAndCenterRectangle(corner1, corner2);

        }
    }
  • 实现效果如下:

在这里插入图片描述

更多解密尽在唐僧课堂!

唐僧课堂BIM开发

在这里插入图片描述

发布了47 篇原创文章 · 获赞 51 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/binbinstrong/article/details/102960645