Нулевая ExternalCommandData

Автор Тема: Нулевая ExternalCommandData  (Прочитано 2511 раз)

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

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Нулевая ExternalCommandData
« : 02-04-2017, 11:14:04 »
Всем привет. Не пинайте слишком уж сильно, если вопрос глупый и банальный. Только начинаю осваивать Ревит
Итак, создал команду:
Код - C# [Выбрать]
  1. using Autodesk.Revit.DB;
  2. using Autodesk.Revit.UI;
  3. using mpMsg;
  4.  
  5. namespace mprDemoFunction
  6. {
  7.     [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
  8.     public class MainFunction : IExternalCommand
  9.     {
  10.         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  11.         {
  12.             MpMsgWin.Show("Привет!");
  13.             return Autodesk.Revit.UI.Result.Succeeded;
  14.         }
  15.     }
  16. }
Вопрос - почему ExternalCommandData commandData равна null?

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Нулевая ExternalCommandData
« Ответ #1 : 02-04-2017, 11:22:12 »
Начал копать "выше". В общем команда запускается с ленты. Метод для запуска был взят с этого сайта (статью точно не помню) и он выглядит так:
Код - C# [Выбрать]
  1. public void Execute(object a)
  2. {
  3.     System.Reflection.Assembly assembly
  4.       = System.Reflection.Assembly.LoadFrom(
  5.         AssemblyName);
  6.  
  7.     IExternalCommand command
  8.       = assembly.CreateInstance(
  9.         ClassName) as IExternalCommand;
  10.  
  11.     Debug.Print(
  12.       "AdskCommandHandler.Execute command invoked: "
  13.       + "assembly {0}, class {1}",
  14.       AssemblyName, ClassName);
  15.  
  16.     ExternalCommandData commandData = null;
  17.     string message = string.Empty;
  18.     ElementSet elements = null;
  19.  
  20.     //IExternalCommand.Result r =
  21.         command.Execute(commandData, ref message, elements);
  22. }
В общем - откуда ноги растут я нашел.
Но как нужно сделать правильно?

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Нулевая ExternalCommandData
« Ответ #2 : 02-04-2017, 12:40:25 »
В общем наилучшим решением пока вижу - отказаться от использования AdWindows.dll для построения панели на ленте и использовать "родные" методы. Тогда команда будет вызываться нормально

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Нулевая ExternalCommandData
« Ответ #3 : 03-04-2017, 07:47:05 »
Александр,
что то я не очень уловил, откуда взялась та команда и где вы ее нашли:) Судя по всему что то ооооочень старое.
Если только осваиваете, рекомендую пройти курс Моя первая программа для Autodesk Revit

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Нулевая ExternalCommandData
« Ответ #4 : 03-04-2017, 09:01:34 »
Виктор Чекалин, да, действительно старое - 2009 год
Просто начал использовать AdWindows.dll по причине того, что под автокад уже есть наработки. Но вариант оказался не очень удачным и пока я не попробовал сделать команду - не знал об этом ))
В принципе, я уже исключил этот вариант и переделал на "правильное"