加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Revit二次开发可停靠窗体+闲置事件+外部事件

(2018-11-28 16:28:09)
分类: Revit开发笔记
     public Result OnStartup(UIControlledApplication application)

 //可停靠窗口
            string m_mainPageGuid = "C8BFE771-D9F1-47E1-8934-A425D2358F80";
            DockablePaneTest m_mainPage = new DockablePaneTest(application);
            Guid retval = Guid.Empty;
            retval = new Guid(m_mainPageGuid);
            DockablePaneId sm_UserDockablePaneId = new DockablePaneId(retval);
            application.RegisterDockablePane(sm_UserDockablePaneId,"DockblePaneTest",m_mainPage as IDockablePaneProvider);


            //注册事件
            try
            {
                //注册事件
               // application.ControlledApplication.DocumentOpened += new EventHandler(application_DocumentOpened);
              //  application.Idling += new EventHandler(ComponentManager_UIElementActivated);
            }
            catch (Exception)
            {
                return Result.Failed;
            }

--------------------------------------------------------------------------------------------------



///
    /// DockablePaneTest.xaml 的交互逻辑
    ///
    public partial class DockablePaneTest : Page,Autodesk.Revit.UI.IDockablePaneProvider
    {
        NewWall myCommand = null;
        ExternalEvent hander = null;
        public DockablePaneTest(UIControlledApplication uiapp)
        {
            InitializeComponent();
            uiapp.Idling +=  MyFun; //闲置事件用于获取参数

            myCommand = new NewWall();
            hander = ExternalEvent.Create(myCommand);

        }

        public void SetupDockablePane(DockablePaneProviderData data)
        {
            data.FrameworkElement = this as FrameworkElement;
            DockablePaneProviderData d = new DockablePaneProviderData();
            data.InitialState = new DockablePaneState();
            data.InitialState.DockPosition = Autodesk.Revit.UI.DockPosition.Bottom;
        }

        private void MyFun(object sender, Autodesk.Revit.UI.Events.IdlingEventArgs e)
        {
            UIApplication uiapp = sender as Autodesk.Revit.UI.UIApplication;
            Document doc = uiapp.ActiveUIDocument.Document;
            ElementId id = uiapp.ActiveUIDocument.Selection.GetElementIds().First();
            Element elm = doc.GetElement(id);
          //  this.ElmName.Content = elm.Name;
            this.label.Content = elm.Name;
        }



        //按钮
        private void button_Click(object sender, RoutedEventArgs e)
        {
            hander.Raise();
          //  MessageBox.Show("收到信息了");
        }
    }

    //外部事件体:用于修改参数
    public class NewWall : IExternalEventHandler
    {
        public void Execute(UIApplication app)
        {
            Document doc = app.ActiveUIDocument.Document;
            FilteredElementCollector lvlFilter = new FilteredElementCollector(doc);
            lvlFilter.OfClass(typeof(Level));
            Level lvl = lvlFilter.First() as Level;
            Transaction tans = new Transaction(doc, "New Wall");
            tans.Start();
            Autodesk.Revit.DB.Line wallLine = Autodesk.Revit.DB.Line.CreateBound(new XYZ(), new XYZ(10, 0, 0));
            Wall wall = Wall.Create(doc, wallLine, lvl.Id, false);
            tans.Commit();
        }
        public string GetName()
        {
            return "NewWall";
        }
    }
--------------------------------------------------------------------------


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有