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

ADN Club => Revit API => Тема начата: RevitTormentor от 05-03-2018, 10:14:23

Название: Документ без команды
Отправлено: RevitTormentor от 05-03-2018, 10:14:23
Можно ли получить документ без команды class... : IExternal?
Название: Re: Документ без команды
Отправлено: Александр Пекшев aka Modis от 05-03-2018, 10:15:49
Как вы себе это представляете? Типа, из приложения, запущенного вне Ревита?
Название: Re: Документ без команды
Отправлено: RevitTormentor от 05-03-2018, 10:39:24
Как вы себе это представляете? Типа, из приложения, запущенного вне Ревита?

Не Александр, сейчас хотя бы внутри своей библиотеки загруженной в ревит. Или любое действие делается только через команды?

Спасибо
Название: Re: Документ без команды
Отправлено: Александр Пекшев aka Modis от 05-03-2018, 10:42:56
Даже если вы загрузили свою библиотеку, то методы из неё вы будете вызывать один фиг из каких-то команд или ExternalApplication, а значит и ссылки на документ будут, которые вы можете передать в свои методы.
Лучше сформулируйте задачу, а то мы разговариваем достаточно абстрактно
Название: Re: Документ без команды
Отправлено: RevitTormentor от 05-03-2018, 10:45:02
то методы из неё вы будете вызывать один фиг из каких-то команд или ExternalApplication
Плохо.
Название: Re: Документ без команды
Отправлено: Александр Пекшев aka Modis от 05-03-2018, 14:03:03
то методы из неё вы будете вызывать один фиг из каких-то команд или ExternalApplication
Плохо.
Вы также должны знать, что помимо IExternalCommand есть еще и IExternalAppliсation. Возможно вам нужно использовать именно второе
Название: Re: Документ без команды
Отправлено: RevitTormentor от 05-03-2018, 14:11:39
Александр это с кнопки запуск команды
Код - C# [Выбрать]
  1.          PushButtonData BTNSettings = new PushButtonData(
  2.                   "KAVBTN",
  3.                   "Пример",
  4.                   assembly.Location,
  5.                   "KAV.KAVParameters.Load"
  6.                   );


а, как запустить такую команду
Код - C# [Выбрать]
  1. "KAV.KAVParameters.Load"
  2.  

не из кнопки.
Название: Re: Документ без команды
Отправлено: Александр Пекшев aka Modis от 05-03-2018, 14:13:37
Так просто вызвать метод
Код - C# [Выбрать]
  1. KAV.KAVParameters.Load.Execute()
Название: Re: Документ без команды
Отправлено: RevitTormentor от 05-03-2018, 14:23:17
Так просто вызвать метод

Как быть с параметрами
Даже если я в параметрах поставлю null то команда то ведь не выполнится.
Код - C# [Выбрать]
  1. Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  2.  
  3. KAV.KAVParameters.Load.Execute(null, null, null);
  4.  


Да и вроде если ref то null нельзя передать.


Название: Re: Документ без команды
Отправлено: Александр Пекшев aka Modis от 05-03-2018, 14:25:56
Вы можете сделать перегрузку метода (https://professorweb.ru/my/csharp/charp_theory/level6/6_1.php) Execute() без параметров
Название: Re: Документ без команды
Отправлено: RevitTormentor от 05-03-2018, 14:33:15
 :D
Как же я тогда выполню команду Ревита. Это получится обычный метод.
Как тогда в такой команде
Код - C# [Выбрать]
  1.         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  2.         {
  3.             try
  4.             {
  5.                 var document = commandData.Application.ActiveUIDocument.Document;
  6.                 Metod(document);
  7.             }
  8.             catch (Exception e)
  9.             {
  10.                 message = e.Message;
  11.                 return Autodesk.Revit.UI.Result.Failed;
  12.             }
  13.  
  14.             return Autodesk.Revit.UI.Result.Succeeded;
  15.         }
получить document?

Отсюда и вопрос в теме если я перегружу без параметров, то как мне тогда получить document
этой штуки
Код - C# [Выбрать]
  1. ExternalCommandData commandData
не будет.
Название: Re: Документ без команды
Отправлено: Александр Пекшев aka Modis от 05-03-2018, 14:40:52
RevitTormentor, вы мне сначала ответьте (второй раз спрашиваю) - ОТКУДА вы вызовите эту команду? Или вы знаете про какое-то волшебство, которое позволяет вызывать методы из вашей dll без использования IExternalCommand и IExternalApplication???
Название: Re: Документ без команды
Отправлено: RevitTormentor от 05-03-2018, 14:51:09
RevitTormentor, вы мне сначала ответьте (второй раз спрашиваю) - ОТКУДА вы вызовите эту команду? Или вы знаете про какое-то волшебство, которое позволяет вызывать методы из вашей dll без использования IExternalCommand и IExternalApplication???

Дак я из помеченного ответа уже понял, что нельзя работать без команд.

Отсюда и был вопрос уточняющий, как запустить команду не из кнопки, чтобы получить ещё и документ.
Ответ значит будет такой, что вызвать команду не из кнопки можно только из другой команды?
А можно вызвать одну команду из другой без "вылета" Ревита?
Название: Re: Документ без команды
Отправлено: Александр Пекшев aka Modis от 05-03-2018, 15:10:09
Ответ значит будет такой, что вызвать команду не из кнопки можно только из другой команды?
я вам ранее ответил, что есть еще IExternalApplication - это не команда
А можно вызвать одну команду из другой без "вылета" Ревита?
Вызывать команды можно через PostCommand (http://www.revitapidocs.com/2018.1/b0df464d-1733-ea9e-ac40-399fa9c9a037.htm). Я не пробовал ни разу.

Хотелось бы понять - чего вы пытаетесь добиться? Вы задачу не объяснили. Может вам вообще все это не нужно
Название: Re: Документ без команды
Отправлено: RevitTormentor от 05-03-2018, 15:24:23
Ответ значит будет такой, что вызвать команду не из кнопки можно только из другой команды?
я вам ранее ответил, что есть еще IExternalApplication - это не команда
А можно вызвать одну команду из другой без "вылета" Ревита?
Вызывать команды можно через PostCommand (http://www.revitapidocs.com/2018.1/b0df464d-1733-ea9e-ac40-399fa9c9a037.htm). Я не пробовал ни разу.

Хотелось бы понять - чего вы пытаетесь добиться? Вы задачу не объяснили. Может вам вообще все это не нужно

Чего хочу:
Например пройтись по всем элементам в базе. С нужным мне распределением по коллекциям.
В IExternalCommand метод LoadBase();
В методе LoadBase() методы LoadData1() LoadData2() а уже в этих методах функционал обращения к документу

Не хочется тянуть документ из "головной" команды в самую последнюю.

Скорее всего создав static Document
в IExternalApplication документ найду и запихаю в static Document
И из всех методов модуля буду обращаться к этому статическому Документу.
Название: Re: Документ без команды
Отправлено: Александр Пекшев aka Modis от 05-03-2018, 15:47:14
Не хочется тянуть документ из "головной" команды в самую последнюю
И всего-то?))
У каждого элемента есть ссылка на документ - Element.Document (http://www.revitapidocs.com/2018.1/9e530d25-61ca-3899-a531-cbcfd994358d.htm), так что документ не нужно "тянуть" никуда.
Хотя где вы тут проблему увидели, я лично не понимаю

Скорее всего создав static Document
в IExternalApplication документ найду и запихаю в static Document
И из всех методов модуля буду обращаться к этому статическому Документу.
Пользователь сменит документ и пиши-пропало. Ну это если не в одной сессии работать будете

Я делал статический класс, куда клал ссылку на документ. Но только из того, что у меня были в проекте и ViewModel'и и ExternalEvent'ы и т.п. Т.е. было просто неудобно
Название: Re: Документ без команды
Отправлено: Виктор Чекалин от 08-03-2018, 12:24:04
Можно ли получить документ без команды class... : IExternal?
Александр в целом все верно сказал, вызывать то команду откуда то все равно надо.
Но если отвечать на вопрос прямо, не вдаваясь в подробности, то можно через события. Idling, DocumentChanged и т.п.