ADN Club > Revit API
Спрятать закрепляемую панель при закрытии Revit'a
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 также идет последовательное закрытие всех открытых документов, поэтому это событие также будет выполняться.
Навигация
Перейти к полной версии