Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: enot от 23-10-2018, 18:01:21

Название: Получить UIApplication в OnStartup
Отправлено: enot от 23-10-2018, 18:01:21
Корректно ли будет получить UIApplication  в OnStartup (если да , то как) ?
т.е.

Код - C# [Выбрать]
  1.     public Autodesk.Revit.UI.Result OnStartup(
  2.         Autodesk.Revit.UI.UIControlledApplication application)
  3.     {
  4.  
  5.         UIApplication uiapp = ???;
Название: Re: Получить UIApplication в OnStartup
Отправлено: Александр Игнатович от 23-10-2018, 18:07:14
Нет. Чем UIControlledApplication, передаваемый параметром не устраивает?
Название: Re: Получить UIApplication в OnStartup
Отправлено: enot от 23-10-2018, 18:10:46
хочу получить

Код - C# [Выбрать]
  1.     Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
  2.         UIDocument uidoc = uiapp.ActiveUIDocument;
  3.         Document doc = uidoc.Document;
  4.         Autodesk.Revit.DB.View view = doc.ActiveView;
Название: Re: Получить UIApplication в OnStartup
Отправлено: enot от 23-10-2018, 18:12:18
вообще, основная цель это (Command_  выполнялась при запуске ревита)

внутри
Код - C# [Выбрать]
  1. public Autodesk.Revit.UI.Result OnStartup(
  2.         Autodesk.Revit.UI.UIControlledApplication application)
  3.     {

запустить
Код - C# [Выбрать]
  1.  [Transaction(TransactionMode.Manual)]
  2.     public class Command_ : IExternalCommand
  3.     {
  4.  
  5.         public Result Execute(
  6.                 ExternalCommandData commandData,
  7.                 ref string message,
  8.                 ElementSet elements)
Название: Re: Получить UIApplication в OnStartup
Отправлено: Александр Игнатович от 23-10-2018, 18:12:54
А ничего, что в момент OnStartup еще никакого ActiveUIDocument в помине нет?
Название: Re: Получить UIApplication в OnStartup
Отправлено: enot от 23-10-2018, 18:15:17
Прямо перед вашим ответом в голове промелькнула та же мысль. значит IExternalCommand запускаем только по клацанью кнопки...
Название: Re: Получить UIApplication в OnStartup
Отправлено: enot от 23-10-2018, 18:36:48
Есть ли аналог public Autodesk.Revit.UI.Result OnStartup(
        Autodesk.Revit.UI.UIControlledApplication application)

но для момента открытия конкретного документа ? цель :В момент открытия запускаем некий IUpdater

Название: Re: Получить UIApplication в OnStartup
Отправлено: Александр Игнатович от 23-10-2018, 18:40:20
ControlledApplication.DocumentOpened

Цитировать
This event is raised immediately after Revit has finished opening a document. It is raised even when document opening failed or was cancelled (during DocumentOpening event).

Handlers of this event are permitted to make modifications to any document (including the active document), except for documents that are currently in read-only mode.

Check the 'Status' field in event's argument to see whether the action itself was successful or not.

This event is not cancellable, for the process of opening document has already been finished.

If the action was not successful, the document may not be modified and new transactions may not be started.

The following API functions are not available for the current document during this event:

Close()()()() and similar overloads.

Exception InvalidOperationException will be thrown if any of the above methods is called during this event.
Название: Re: Получить UIApplication в OnStartup
Отправлено: enot от 24-10-2018, 10:27:37
Александр, все получилось, спасибо вам)
Название: Re: Получить UIApplication в OnStartup
Отправлено: Александр Игнатович от 24-10-2018, 10:28:27
Супер, рад за Вас. Обращайтесь
Название: Re: Получить UIApplication в OnStartup
Отправлено: Agens от 05-01-2022, 12:15:50
Буду добавлять темы кусками кода, т.к. приходится разбираться самому. Решение выглядит так:
Код - C# [Выбрать]
  1. // создаем событие на открытие файла
  2.         public Result OnStartup(UIControlledApplication application)
  3.         {
  4.             try
  5.             {            
  6.                 // собственно само событие
  7.                 application.ControlledApplication.DocumentOpened += new EventHandler
  8.                      <Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(application_DocumentOpened);
  9.             }
  10.             catch (Exception)
  11.             {
  12.                 return Result.Failed;
  13.             }                                      
  14.  
  15.             return Result.Succeeded;
  16.         }
  17.  
  18.         public void application_DocumentOpened(object sender, DocumentOpenedEventArgs args)
  19.         {
  20.             Application app = sender as Application; // самая важная строчка :)
  21.             Document doc = args.Document;
  22.  
  23.            // ваш код
  24.         }
  25.