Как получить доступ к Revit Application из метода Execute в Revit API? - PullRequest
0 голосов
/ 19 марта 2019

Я давно играю с Revit API через pyRevit (поэтому использую Python), и теперь мне также нужно использовать C # для некоторых частей моего кода.

Я пытаюсь получить доступ к VersionNumberсвойство, предоставляемое классом Application.Сделать это с помощью pyRevit было довольно просто, так как все, что я делал, было

app = __revit__.Application

Вот и все.Я могу сделать это где угодно, все работает отлично.

Теперь я смотрю на примеры C #, иллюстрирующие это (кстати, я начинающий C #), и все примеры, похоже, указывают на один и тот же способ продолжения.:

UIApplication uiApp = commandData.Application;
Application app = uiApp.Application;

с commandData , являющимся ExternalCommandData объектом, переданным в качестве аргумента в Execute метод класса.

Мой вопрос: как я могу получить доступ к commandData, если я не в методе Execute?т.е. если commandData не передается в качестве аргумента.Могу ли я просто создать экземпляр объекта Application, как я это делал с Python?Как?

Большое спасибо,

Арно.

1 Ответ

0 голосов
/ 24 марта 2019

Если вы находитесь в контексте Revit's ExternalCommand или нет, вам нужен доступ к UIApplication. Вы правы, что ExternalCommand предоставляет его через commandData. Вы также можете получить его из события холостого хода, например:

private static void OnIdling(object sender, IdlingEventArgs e)
{
    var app = (UIApplication)sender;
}

Он также доступен из ExternalEventHandler `метода Execute следующим образом:

public void Execute(UIApplication app)
{
}
...