关于revit二次开发中,用winform剖切房间进行房间定位的问题

1.外部事件的添加
revit中的Transaction对象无法非静态对话框中直接进行访问,所以需要定义外部事件来解决该问题

2.获取房间BoundingBoxXYZ
3.剖框显示

核心代码的展示

public class CmdFromForm : IExternalEventHandler  {
        private string roomNum;
        public string RoomNum
        {
            get
            {
                return roomNum;
            }
            set
            {
                roomNum = value;
            }
        }

        public void Execute(UIApplication app)
        {
            //获取当前视图
            UIDocument uidoc = app.ActiveUIDocument;
            Autodesk.Revit.DB.View view = uidoc.ActiveView;
            if (!(view is View3D))
            {
                TaskDialog.Show("提示", "请转到三维视图");
                return;
            }
            //获取room对象
            Room room1 = null;
            //获取revit文档
            UIDocument uiDoc = app.ActiveUIDocument;
            Document revitDoc = uiDoc.Document;

            RoomFilter filter = new RoomFilter();
            FilteredElementCollector collector = new FilteredElementCollector(revitDoc);
            //获取到房间的List
            IList<Element> roomElements = collector.WherePasses(filter).ToElements();
            List<Autodesk.Revit.DB.Architecture.Room> rooms = new

List<Autodesk.Revit.DB.Architecture.Room>();
            foreach (Element room in roomElements)
            {
                //转化成Room对象
                Autodesk.Revit.DB.Architecture.Room room2 = room as

Autodesk.Revit.DB.Architecture.Room;
                if (room2.Number == roomNum)
                {
                    room1 = room2;
                }
            }
            View3D view3D = view as View3D;
            Transaction tran = new Transaction(view3D.Document,"Cmd From Form");
            tran.Start("box change");
            //显示剖框     
            BoundingBoxXYZ boundingBox = view3D.GetSectionBox();
            if (!boundingBox.Enabled)
            {
                boundingBox.Enabled = true;
            }

            //获取revit中的剖框
            BoundingBoxXYZ newBox = room1.get_BoundingBox(view3D);
            view3D.SetSectionBox(newBox);
            tran.Commit();
        }

        public string GetName()
        {
            throw new NotImplementedException();
        }
    }

在外部winform进行调用

//在winform中访问调用外部事件
public class MyForm :Form{
    private ExternalEvent handler;
    private CmdFromForm cff;
    public MyForm(//...这里省略参数){
        InitializeComponent();
        cff = new CmdFromForm();
        handler = ExternalEvent.Create(cff);
    }
    public void button1_click(){
        handler.Raise();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值