Запуск команды после завершения предыдущей

Автор Тема: Запуск команды после завершения предыдущей  (Прочитано 6010 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Как после зав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. }


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
https://thebuildingcoder.typepad.com/blog/2013/10/programmatic-custom-add-in-external-command-launch.html
Только очевидно, что запуск должен быть до return, а не после.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Да, статью видел . Есть кнопка и привязанная к ней команда.

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

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

Цитировать
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 );

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Судя по статье как-то так:
Код - 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 );
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Или так:
Код - 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 );
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
уже пробовал, оба варианта не работают

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
уже пробовал, оба варианта не работают
В статье написано, что для Pushbutton это не работает. Возможно в этом проблема.
Если у тебя обе команды в одном Add-in, то почему бы тебе просто не вызвать код, который в command2 из command1?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
command1 и command2 нельзя  объединить в одну. command2 должна запуститься только при завершении command1 (только после его Result.Succeded - но проблема  код ниже не может быть исполнен в принципе)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
command1 и command2 нельзя  объединить в одну. command2 должна запуститься только при завершении command1 (только после его Result.Succeded - но проблема  код ниже не может быть исполнен в принципе)
Не очень понимаю почему нужно запускать command2 только после завершения command1. Впрочем возможно это можно реализовать через события в Revit. Надеюсь, что Александр Игнатович подскажет точнее.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати тут 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. Тогда вторая запустится только по окончанию первой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Здесь снова проблема в получении RevitCommandId (2 вариант с PostableCommand)

Оффлайн ivmax

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
Да, статью видел . Есть кнопка и привязанная к ней команда.

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

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

Цитировать
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", у меня так сработало

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
"CustomCtrl_%CustomCtrl_%MyPanel_1%a28ace4e-c227-45bc-9364-2797f9841413%pushButton1"

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

интересно как формируется эта часть кода и что  означает
Цитировать
a28ace4e-c227-45bc-9364-2797f9841413
- можно ли задавать это значение (GUID команды/кнопки или что это...)
- будет ли это значение разным при каждой новой установке приложения

Оффлайн ivmax

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
тот что GUID это из манифеста (*.addin), на сколько я понял, его задавать можно, если это IExternalCommand
а если это IExternalApplication то будет строка "CustomCtrl_%C...", ну это все мои догадки :)

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
ivmax,
Судя по всему, это имя панели