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

ADN Club => Revit API => Тема начата: enot от 05-04-2020, 15:25:02

Название: Запуск команды после завершения предыдущей
Отправлено: enot от 05-04-2020, 15:25:02
Как после завeршения command1 автоматически запустить command2  ? 

Код - C# [Выбрать]
  1. command1  IExternalCommand
  2. {
  3. return Result.Succeeded;
  4. //  запустить command2  
  5.  
  6. }
  7.  
  8.  
  9. command2  IExternalCommand
  10. {
  11. return Result.Succeeded;
  12. //
  13.  
  14. }

Название: Re: Запуск команды после завершения предыдущей
Отправлено: Александр Ривилис от 05-04-2020, 17:57:13
https://thebuildingcoder.typepad.com/blog/2013/10/programmatic-custom-add-in-external-command-launch.html
Только очевидно, что запуск должен быть до return, а не после.
Название: Re: Запуск команды после завершения предыдущей
Отправлено: enot от 05-04-2020, 18:25:37
Да, статью видел . Есть кнопка и привязанная к ней команда.

у меня проблема в получении команды

в журнале запись такая:

Цитировать
Jrn.RibbonEvent "Execute external command:CustomCtrl_%CustomCtrl_%MyPanel_1%a28ace4e-c227-45bc-9364-2797f9841413%pushButton1:MyClass.RunApp_1"

не знаю как верно записать ее в name_addin_button_cmd ("CustomCtrl_%CustomCtrl_%MyPanel_1%a28ace4e-c227-45bc-9364-2797f9841413%pushButton1:MyClass.RunApp_1" ?)


Код - C# [Выбрать]
  1. RevitCommandId id_addin_button_cmd
  2.     = RevitCommandId.LookupCommandId( name_addin_button_cmd );
Название: Re: Запуск команды после завершения предыдущей
Отправлено: Александр Ривилис от 05-04-2020, 18:31:04
Судя по статье как-то так:
Код - C# [Выбрать]
  1.   UIApplication uiapp = commandData.Application;
  2.  
  3.   RevitCommandId id_built_in
  4.     = RevitCommandId.LookupPostableCommandId(
  5.       PostableCommand.SheetIssuesOrRevisions );
  6.  
  7.   string name
  8.     = "a28ace4e-c227-45bc-9364-2797f9841413";
  9.  
  10.   RevitCommandId id_addin
  11.     = RevitCommandId.LookupCommandId(
  12.       name );
  13.  
  14.   uiapp.PostCommand( id_addin );
Название: Re: Запуск команды после завершения предыдущей
Отправлено: Александр Ривилис от 05-04-2020, 18:38:19
Или так:
Код - C# [Выбрать]
  1.   string name_addin_button_cmd
  2.     = "CustomCtrl_%CustomCtrl_%MyPanel_1%a28ace4e-c227-45bc-9364-2797f9841413%pushButton1:MyClass.RunApp_1" ;
  3.  
  4.   RevitCommandId id_addin_button_cmd
  5.     = RevitCommandId.LookupCommandId(
  6.       name_addin_button_cmd );
  7.  
  8.   uiapp.PostCommand( id_addin_button_cmd );
Название: Re: Запуск команды после завершения предыдущей
Отправлено: enot от 05-04-2020, 18:41:25
уже пробовал, оба варианта не работают
Название: Re: Запуск команды после завершения предыдущей
Отправлено: Александр Ривилис от 05-04-2020, 18:46:21
уже пробовал, оба варианта не работают
В статье написано, что для Pushbutton это не работает. Возможно в этом проблема.
Если у тебя обе команды в одном Add-in, то почему бы тебе просто не вызвать код, который в command2 из command1?
Название: Re: Запуск команды после завершения предыдущей
Отправлено: enot от 05-04-2020, 18:51:29
command1 и command2 нельзя  объединить в одну. command2 должна запуститься только при завершении command1 (только после его Result.Succeded - но проблема  код ниже не может быть исполнен в принципе)
Название: Re: Запуск команды после завершения предыдущей
Отправлено: Александр Ривилис от 05-04-2020, 18:55:37
command1 и command2 нельзя  объединить в одну. command2 должна запуститься только при завершении command1 (только после его Result.Succeded - но проблема  код ниже не может быть исполнен в принципе)
Не очень понимаю почему нужно запускать command2 только после завершения command1. Впрочем возможно это можно реализовать через события в Revit. Надеюсь, что Александр Игнатович (https://adn-cis.org/forum/index.php?action=profile;u=203) подскажет точнее.
Название: Re: Запуск команды после завершения предыдущей
Отправлено: Александр Ривилис от 05-04-2020, 19:00:21
Кстати тут Jeremy Tammik подсказывает два варианта:
https://forums.autodesk.com/t5/revit-api-forum/how-to-find-if-the-execution-of-command-is-complete/m-p/8175861#M32651
Первый вариант с событиями, второй вариант с запуском последовательно двух команд через PostCommand. Тогда вторая запустится только по окончанию первой.
Название: Re: Запуск команды после завершения предыдущей
Отправлено: enot от 05-04-2020, 19:06:59
Здесь снова проблема в получении RevitCommandId (2 вариант с PostableCommand)
Название: Re: Запуск команды после завершения предыдущей
Отправлено: ivmax от 06-04-2020, 09:27:01
Да, статью видел . Есть кнопка и привязанная к ней команда.

у меня проблема в получении команды

в журнале запись такая:

Цитировать
Jrn.RibbonEvent "Execute external command:CustomCtrl_%CustomCtrl_%MyPanel_1%a28ace4e-c227-45bc-9364-2797f9841413%pushButton1:MyClass.RunApp_1"

не знаю как верно записать ее в name_addin_button_cmd ("CustomCtrl_%CustomCtrl_%MyPanel_1%a28ace4e-c227-45bc-9364-2797f9841413%pushButton1:MyClass.RunApp_1" ?)


Код - C# [Выбрать]
  1. RevitCommandId id_addin_button_cmd
  2.     = RevitCommandId.LookupCommandId( name_addin_button_cmd );

тоже недавно сталкивался с этим, нужно записать до первого двоеточия, в вашем случае будет   "CustomCtrl_%CustomCtrl_%MyPanel_1%a28ace4e-c227-45bc-9364-2797f9841413%pushButton1", у меня так сработало
Название: Re: Запуск команды после завершения предыдущей
Отправлено: enot от 06-04-2020, 11:00:45
"CustomCtrl_%CustomCtrl_%MyPanel_1%a28ace4e-c227-45bc-9364-2797f9841413%pushButton1"

спасибо за ответ, попробую

интересно как формируется эта часть кода и что  означает
Цитировать
a28ace4e-c227-45bc-9364-2797f9841413
- можно ли задавать это значение (GUID команды/кнопки или что это...)
- будет ли это значение разным при каждой новой установке приложения
Название: Re: Запуск команды после завершения предыдущей
Отправлено: ivmax от 06-04-2020, 11:12:25
тот что GUID это из манифеста (*.addin), на сколько я понял, его задавать можно, если это IExternalCommand
а если это IExternalApplication то будет строка "CustomCtrl_%C...", ну это все мои догадки :)
Название: Re: Запуск команды после завершения предыдущей
Отправлено: enot от 06-04-2020, 14:33:40
ivmax,
Судя по всему, это имя панели