Exemple #1
0
        /// <summary>
        /// 选择点,带预览,空时返回null
        /// </summary>
        /// <param name="uiApp"></param>
        /// <param name="startPoint"></param>
        /// <returns></returns>
        public XYZ PickPointWithLinePreview(UIApplication uiApp, XYZ startPoint)
        {
            XYZ                  result    = null;
            Document             doc       = uiApp.ActiveUIDocument.Document;
            PickObjectsMouseHook mouseHook = null;

            mouseHook = InitMouseHook();
            System.Windows.Forms.Timer timer = null;
            var view = new DrawAreaView(uiApp);

            view.Show();
            view.StartPoint = new System.Windows.Point(startPoint.X, startPoint.Y);
            //开启定时器 实时绘图
            timer          = new System.Windows.Forms.Timer();
            timer.Interval = 6;
            timer.Tick    += (sender, e) =>
            {
                view.PreviewLine(System.Windows.Forms.Control.MousePosition);
            };
            timer.Start();
            //选点
            try
            {
                result = uiApp.ActiveUIDocument.Selection.PickPoint("PM-预览绘线中,鼠标左键确定,右键取消");//Autodesk.Revit.UI.Selection.ObjectSnapTypes.Endpoints,
            }
            catch
            {
                mouseHook.UninstallHook();
            }
            timer.Stop();
            view.Close();
            mouseHook.Dispose();
            mouseHook = null;
            return(result);
        }
Exemple #2
0
        private static PickObjectsMouseHook InitMouseHook()
        {
            PickObjectsMouseHook mouseHook;

            try
            {
                mouseHook = new PickObjectsMouseHook();
                mouseHook.InstallHook(PickObjectsMouseHook.OKModeENUM.Object);
            }
            catch
            {
                mouseHook = new PickObjectsMouseHook();
                mouseHook.InstallHook(PickObjectsMouseHook.OKModeENUM.Object);
            }
            return(mouseHook);
        }
        protected override bool DoUI()
        {
            Form = new ListForm(this.m_app.ActiveUIDocument);
            PickObjectsMouseHook mouseHook = new PickObjectsMouseHook();
            DialogResult         result    = DialogResult.Retry;

            while ((result = Form.ShowDialog(new RevitHandle(Process.GetCurrentProcess().MainWindowHandle))) == DialogResult.Retry)
            {
                switch (Form.ShowDialogType)
                {
                case ShowDialogType.AddElements_ForDetail:
                case ShowDialogType.DeleleElements_ForDetail:
                    switch (Form.SubFormType)
                    {
                    case SubFormType.Subsidence:
                        try
                        {
                            mouseHook.InstallHook();
                            Form.SubFormForSubsidence.SelectedElementIds = m_uiDoc.Selection.PickObjects(ObjectType.Element, "选择要添加的构件")
                                                                           .Select(p => m_doc.GetElement(p.ElementId).Id).ToList();
                            mouseHook.UninstallHook();
                        }
                        catch
                        {
                            mouseHook.UninstallHook();
                        }
                        Form.SubFormForSubsidence.FinishElementSelection();
                        break;

                    case SubFormType.SkewBack:
                        try
                        {
                            mouseHook.InstallHook();
                            Form.SubFormForSkewBack.SelectedElementIds = m_uiDoc.Selection.PickObjects(ObjectType.Element, "选择要添加的构件")
                                                                         .Select(p => m_doc.GetElement(p.ElementId).Id).ToList();
                            mouseHook.UninstallHook();
                        }
                        catch
                        {
                            mouseHook.UninstallHook();
                        }
                        Form.SubFormForSkewBack.FinishElementSelection();
                        break;
                    }
                    break;

                case ShowDialogType.ViewElementsBySelectedNodes:
                case ShowDialogType.ViewElementsByAllNodes:
                case ShowDialogType.ViewCurrentMaxByRed:
                case ShowDialogType.ViewCurrentMaxByAll:
                case ShowDialogType.ViewTotalMaxByRed:
                case ShowDialogType.ViewTotalMaxByAll:
                case ShowDialogType.ViewCloseWarn:
                case ShowDialogType.ViewOverWarn:
                    mouseHook.InstallHook();
                    m_uiDoc.Selection.PickObjects(ObjectType.Element, "");
                    mouseHook.UninstallHook();
                    break;
                }
            }
            return(true);
        }
        protected override bool DoUI()
        {
            Form = new ListForm(this.m_app.ActiveUIDocument);
            PickObjectsMouseHook mouseHook = new PickObjectsMouseHook();
            DialogResult         result    = DialogResult.Retry;

            while ((result = Form.ShowDialog(new RevitHandle(Process.GetCurrentProcess().MainWindowHandle))) == DialogResult.Retry)
            {
                switch (Form.ShowDialogType)
                {
                case ShowDialogType.AddElements:
                case ShowDialogType.DeleleElements:
                    switch (Form.SubFormType)
                    {
                    case SubFormType.Subsidence:
                        MouseHook.VLHooker.Hooker.DelegateCompletingAction(() =>
                        {
                            Form.SubFormForSubsidence.SelectedElementIds = new List <ElementId>()
                            {
                                m_uiDoc.Selection.PickObject(ObjectType.Element, "选择要添加的构件").ElementId
                            };
                        });
                        //try
                        //{
                        //    mouseHook.InstallHook();
                        //    Form.SubFormForSubsidence.SelectedElementIds = new List<ElementId>() { m_uiDoc.Selection.PickObject(ObjectType.Element, "选择要添加的构件").ElementId };
                        //    mouseHook.UninstallHook();
                        //}
                        //catch
                        //{
                        //    mouseHook.UninstallHook();
                        //}
                        Form.SubFormForSubsidence.FinishElementSelection();
                        break;

                    case SubFormType.SkewBack:
                        MouseHook.VLHooker.Hooker.DelegateCompletingAction(() =>
                        {
                            Form.SubFormForSkewBack.SelectedElementIds = new List <ElementId>()
                            {
                                m_uiDoc.Selection.PickObject(ObjectType.Element, "选择要添加的构件").ElementId
                            };
                        });
                        //try
                        //{
                        //    mouseHook.InstallHook();
                        //    Form.SubFormForSkewBack.SelectedElementIds = new List<ElementId>() { m_uiDoc.Selection.PickObject(ObjectType.Element, "选择要添加的构件").ElementId };
                        //    mouseHook.UninstallHook();
                        //}
                        //catch
                        //{
                        //    mouseHook.UninstallHook();
                        //}
                        Form.SubFormForSkewBack.FinishElementSelection();
                        break;
                    }
                    break;

                case ShowDialogType.ViewElementsBySelectedNodes:
                case ShowDialogType.ViewElementsByAllNodes:
                case ShowDialogType.ViewCurrentMaxByRed:
                case ShowDialogType.ViewCurrentMaxByAll:
                case ShowDialogType.ViewTotalMaxByRed:
                case ShowDialogType.ViewTotalMaxByAll:
                case ShowDialogType.ViewCloseWarn:
                case ShowDialogType.ViewOverWarn:
                    MouseHook.VLHooker.Hooker.DelegateCompletingAction(() =>
                    {
                        m_uiDoc.Selection.PickObjects(ObjectType.Element, "");
                    });
                    //try
                    //{
                    //    mouseHook.InstallHook();
                    //    m_uiDoc.Selection.PickObjects(ObjectType.Element, "");
                    //    mouseHook.UninstallHook();
                    //}
                    //catch
                    //{
                    //    mouseHook.UninstallHook();
                    //}
                    break;
                }
            }
            return(true);
        }
        protected override bool DoUI()
        {
            var directory = System.Reflection.Assembly.GetExecutingAssembly().Location;

            //string directory = System.AppDomain.CurrentDomain.BaseDirectory;
            //MessageBox.Show(directory);
            System.IO.Directory.SetCurrentDirectory(directory.Substring(0, directory.LastIndexOf("\\")));

            Form = new EarthworkBlockingForm(this.m_app);
            PickObjectsMouseHook mouseHook = new PickObjectsMouseHook();
            DialogResult         result    = DialogResult.Retry;

            while ((result = Form.ShowDialog(new Hook.RevitHandle(Process.GetCurrentProcess().MainWindowHandle))) == DialogResult.Retry)
            {
                if (result == DialogResult.Cancel)
                {
                    return(false);
                }
                if (result == DialogResult.OK)
                {
                    return(true);
                }
                if (Form.ShowDialogType == ShowDialogType.AddElements || Form.ShowDialogType == ShowDialogType.DeleleElements)
                {
                    Hooker.DelegateCompletingAction(() =>
                    {
                        Form.SelectedElementIds = m_uiDoc.Selection.PickObjects(ObjectType.Element, "选择要添加的构件")
                                                  .Select(p => m_doc.GetElement(p.ElementId).Id).ToList();
                    });
                    Form.FinishElementSelection();

                    //Hooker Hooker = new Hooker();
                    //try
                    //{
                    //    Hooker.MouseHookProcedure = new Hooker.HookProc(MouseHookProc);
                    //    Hooker.Start();
                    //    Form.SelectedElementIds = m_uiDoc.Selection.PickObjects(ObjectType.Element, "选择要添加的构件")
                    //        .Select(p => m_doc.GetElement(p.ElementId).Id).ToList();
                    //    Hooker.Stop();
                    //}
                    //catch (Exception ex)
                    //{
                    //    Hooker.Stop();
                    //}

                    //try
                    //{
                    //    mouseHook.InstallHook();
                    //    Form.SelectedElementIds = m_uiDoc.Selection.PickObjects(ObjectType.Element, "选择要添加的构件")
                    //        .Select(p => m_doc.GetElement(p.ElementId).Id).ToList();
                    //    mouseHook.UninstallHook();
                    //}
                    //catch
                    //{
                    //    mouseHook.UninstallHook();
                    //}
                }
                if (Form.ShowDialogType == ShowDialogType.ViewGT6 || Form.ShowDialogType == ShowDialogType.ViewCompletion)
                {
                    Hooker.DelegateCompletingAction(() =>
                    {
                        m_uiDoc.Selection.PickObjects(ObjectType.Element, "");
                    });

                    //try
                    //{
                    //    mouseHook.InstallHook();
                    //    m_uiDoc.Selection.PickObjects(ObjectType.Element, "");
                    //    mouseHook.UninstallHook();
                    //}
                    //catch
                    //{
                    //    mouseHook.UninstallHook();
                    //}
                }
            }
            return(true);

            #region 非模态
            //try
            //{
            //    if (ConfigPathManager.IniProjectDB(this.m_doc))
            //    {
            //        Form = new EarthworkBlockingForm(this.m_app);
            //        Form.ShowDialog();
            //        return true;
            //    }
            //    else
            //        return false;
            //}
            //catch(Exception ex)
            //{
            //    TaskDialog.Show("错误", ex.Message);
            //    return false;
            //}
            #endregion
        }
        protected override bool DoUI()
        {
            Form = new EarthworkBlockingForm(this.m_app);
            PickObjectsMouseHook mouseHook = new PickObjectsMouseHook();
            DialogResult         result    = DialogResult.Retry;

            while ((result = Form.ShowDialog(new RevitHandle(Process.GetCurrentProcess().MainWindowHandle))) == DialogResult.Retry)
            {
                if (result == DialogResult.Cancel)
                {
                    return(false);
                }
                if (result == DialogResult.OK)
                {
                    return(true);
                }
                if (Form.ShowDialogType == ShowDialogType.AddElements || Form.ShowDialogType == ShowDialogType.DeleleElements)
                {
                    try
                    {
                        mouseHook.InstallHook();
                        Form.SelectedElementIds = m_uiDoc.Selection.PickObjects(ObjectType.Element, "选择要添加的构件")
                                                  .Select(p => m_doc.GetElement(p.ElementId).Id).ToList();
                        mouseHook.UninstallHook();
                    }
                    catch
                    {
                        mouseHook.UninstallHook();
                    }
                    Form.FinishElementSelection();
                }
                if (Form.ShowDialogType == ShowDialogType.ViewGT6 || Form.ShowDialogType == ShowDialogType.ViewCompletion)
                {
                    try
                    {
                        mouseHook.InstallHook();
                        m_uiDoc.Selection.PickObjects(ObjectType.Element, "");
                        mouseHook.UninstallHook();
                    }
                    catch
                    {
                        mouseHook.UninstallHook();
                    }
                }
            }
            return(true);

            #region 非模态
            //try
            //{
            //    if (ConfigPathManager.IniProjectDB(this.m_doc))
            //    {
            //        Form = new EarthworkBlockingForm(this.m_app);
            //        Form.ShowDialog();
            //        return true;
            //    }
            //    else
            //        return false;
            //}
            //catch(Exception ex)
            //{
            //    TaskDialog.Show("错误", ex.Message);
            //    return false;
            //}
            #endregion
        }