ADN Club > Revit API

Спрятать закрепляемую панель при закрытии Revit'a

(1/2) > >>

shss:
Доброго дня!

Собственно сабж.
Создается закрепляемая панель и с помощью команды Show() вызывается, но после закрытия Revit закрепляемая панель запоминает позицию и появляется в том же месте (если ее перед закрытием Revit не отключить).
Как её спрятать или отключить при закрытии Revit?

Спасибо.

Виктор Чекалин:
Добрый день, Сергей.

В обработке события OnStartup вы регистрируете панель. Событие это вызывается при старте Revit. Событие OnShutdown в этом же интерфейсе IExternalDBApplication вызывается при закрытии Revit. Соответственно можете спрятать вашу панель в обработке этого события.

shss:
Виктор, да собственно так и пытаюсь сделать:
Регистрация панели

--- Код - C# [Выбрать] ---public Result OnStartup(UIControlledApplication application) {...if (!DockablePane.PaneIsRegistered(ModelCheckingWindow.PaneId)) {                application.RegisterDockablePane(ModelCheckingWindow.PaneId,                    ModelCheckingWindow.PaneName,                    MyDockablePaneControl);            } ...} 
Пытаюсь скрыть при закрытии Revit

--- Код - C# [Выбрать] ---public Result OnShutdown(UIControlledApplication application) { if (DockablePane.PaneIsRegistered(ModelCheckingWindow.PaneId)) {                DockablePane dp = application.GetDockablePane(ModelCheckingWindow.PaneId);                dp.Hide();            }            return Result.Succeeded;        } Но, возникает ошибка

--- Цитировать ---The requested dockable pane has not been created yet.
--- Конец цитаты ---
Хотя по идее она создана, ведь

--- Код - C# [Выбрать] ---DockablePane.PaneIsRegistered(ModelCheckingWindow.PaneId) возвращает True.

Виктор Чекалин:
Хм. Действительно. Проверил у себя. То же самое.
Решения пока не нашел, но обнаружил интересный момент.

Закрепляемая панель доступна только тогда, когда открыт проект Revit. Для тестирования я взял проект из своей статьи. Если выполнить команду Command DockablePaneSample на стартовой странице, когда еще ни один проект не открыт, то при вызове метода GetDockablePane получаем ту же самую ошибку
--- Цитировать ---The requested dockable pane has not been created yet.
--- Конец цитаты ---
. То есть панель зарегистрирована, но не создана. Создается она лишь при открытии или создании проекта.

Проверить, создана ли панель или нет, можно с помощью метода DockablePane.PaneExists

Событие OnShutdown вызывается, когда уже все документы закрыты, соответственно поэтому и возникает ошибка.



С другой стороны. Закрепляемая панель - это часть интерфейса Revit. Точно такая же как диспетчер проектов или окно свойств. Т.е. пока принудительно их не закроешь, при каждом старте Revit она будет появляться и будет появляться в том же самом месте. Пользовательская закрепляемая панель обладает точно таким же поведением.

Виктор Чекалин:
А вот и решение :)
Если все же хочется прятать панель при закрытии Revit, то можно пойти другим путем.
Подписываемся на событие DocumentClosing. Событие возникает перед закрытием документа, поэтому панель еще доступна.

--- Код - C# [Выбрать] ---a.ControlledApplication.DocumentClosing += ControlledApplication_DocumentClosing;
В обработке события проверяем, если закрываем последний документ, то прячем панель.

--- Код - C# [Выбрать] ---        void ControlledApplication_DocumentClosing(object sender, Autodesk.Revit.DB.Events.DocumentClosingEventArgs e)        {            var app = (Application) sender;                     UIApplication uiApp = new UIApplication(app);             // Если общее количество документов = 1, т.е. мы закрываем последний документ            if (app.Documents.Size == 1)            {                // Проверяем что панель зарегистрирована и доступна                if (DockablePane.PaneIsRegistered(MyControl.PaneId) &&                    DockablePane.PaneExists(MyControl.PaneId))                {                                        DockablePane dp = uiApp.GetDockablePane(MyControl.PaneId);                    // Прячем панель                    dp.Hide();                }            }        }
При закрытии Revit также идет последовательное закрытие всех открытых документов, поэтому это событие также будет выполняться.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии