Как автоматически обрабатывать событие DialogBoxShowing в Python(Revit Dynamo)?
Как подписаться на события Revit в Python (Dynamo)?
В частности, DialogBoxShowing, чтобы я мог увидеть, если это предупреждение "Экспорт с временным скрытием / изоляцией" и выбрать "Оставить режим временного изолирования и экспорт"?
Это делается в C# здесь:
http://thebuildingcoder.typepad.com/blog/2013/03/export-wall-parts-individually-to-dxf.html
См. Подзаголовок: Обработка и отклонение предупреждающего сообщения
Спасибо!
3 ответа
Чтобы сделать это проще, чем в учебнике:
Внутри Revit с RevitPythonShell подписка на события может быть очень простой.
Обработчик событий просто вызывается с двумя аргументами: sender
а также event
, Затем событие или отправитель дает параметры для игры, DialogId
а также OverrideResult
в нашем случае.
Чтобы сохранить пример Building Coder, давайте перейдем к:
def on_dialog_open(sender, event):
try:
if event.DialogId == 'TaskDialog_Really_Print_Or_Export_Temp_View_Modes':
event.OverrideResult(1002)
# 1001 call TaskDialogResult.CommandLink1
# 1002 call TaskDialogResult.CommandLink2
# int(TaskDialogResult.CommandLink2) to check the result
except Exception as e:
pass #print(e) # uncomment this to debug
Вам нужно только подключить эту функцию к событию со следующим синтаксисом:
__uiControlledApplication__.DialogBoxShowing += on_dialog_open
Это можно сделать в файле запуска RevitPythonShell:
C:\Users\USERNAME\AppData\Roaming\RevitPythonShell2017\startup.py
(Или в стартовой части вашего аддина)
Лучший способ - отменить регистрацию обработчика, если он вам больше не нужен, т.е. когда Revit закрывается (обратитесь к руководству для получения более подробной информации):
__uiControlledApplication__.DialogBoxShowing -= on_dialog_open
Если вы хотите попробовать это в консоли, вы можете использовать:
def on_dialog_open(sender, event):
# [...]
__revit__.DialogBoxShowing += on_dialog_open
И после того, как вы попробуете экспорт:
__revit__.DialogBoxShowing -= on_dialog_open
РЕДАКТИРОВАТЬ: ярлыки для команд результата (спасибо Каллум!)
('Cancel', 2)
('Close', 8)
('CommandLink1', 1001)
('CommandLink2', 1002)
('CommandLink3', 1003)
('CommandLink4', 1004)
('No', 7)
('None', 0)
('Ok', 1)
('Retry', 4)
('Yes', 6)
Чтобы ответить на ваш первый вопрос. Попробуйте прочитать это руководство от Пьера Моуре: https://github.com/PMoureu/samples-Python-RPS/tree/master/Tutorial-IUpdater. Он подписывается на IUpdater.
(извините, не хватает репутации, чтобы добавить это в качестве комментария к ответу PRMoureu...)
Чтобы немного расширить обработку диалогов...
Подписка на DialogBoxShowing является чрезвычайно мощной, мы только что развернули Подавитель диалогов, чтобы заставить замолчать постоянно расстраивающихся "Хотите ли вы присоединить стены к только что сделанному вами полу" и "Хотите ли вы прикрепить эти стены к крыше". Его также можно использовать, чтобы увидеть, какие ошибки обычно получают пользователи и т. Д.
- Чтобы исследовать текст сообщения Dialogs: event.Message
- Чтобы ответить "Отмена" на диалог: event.OverrideResult(0)
- Чтобы ответить "Да" на диалог: event.OverrideResult(1)
- Чтобы ответить "ОК" на диалог: event.OverrideResult(6)