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

ADN Club => Revit API => Тема начата: Александр Пекшев aka Modis от 02-04-2017, 11:14:04

Название: Нулевая ExternalCommandData
Отправлено: Александр Пекшев aka Modis от 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?
Название: Re: Нулевая ExternalCommandData
Отправлено: Александр Пекшев aka Modis от 02-04-2017, 11:22:12
Начал копать "выше". В общем команда запускается с ленты. Метод для запуска был взят с этого сайта (http://thebuildingcoder.typepad.com/) (статью точно не помню) и он выглядит так:
Код - 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. }
В общем - откуда ноги растут я нашел.
Но как нужно сделать правильно?
Название: Re: Нулевая ExternalCommandData
Отправлено: Александр Пекшев aka Modis от 02-04-2017, 12:40:25
В общем наилучшим решением пока вижу - отказаться от использования AdWindows.dll для построения панели на ленте и использовать "родные" методы. Тогда команда будет вызываться нормально
Название: Re: Нулевая ExternalCommandData
Отправлено: Виктор Чекалин от 03-04-2017, 07:47:05
Александр,
что то я не очень уловил, откуда взялась та команда и где вы ее нашли:) Судя по всему что то ооооочень старое.
Если только осваиваете, рекомендую пройти курс Моя первая программа для Autodesk Revit (http://adn-cis.org/forum/index.php?topic=284.0)
Название: Re: Нулевая ExternalCommandData
Отправлено: Александр Пекшев aka Modis от 03-04-2017, 09:01:34
Виктор Чекалин, да, действительно старое - 2009 год (http://thebuildingcoder.typepad.com/blog/2009/12/custom-ribbon-tab.html)
Просто начал использовать AdWindows.dll по причине того, что под автокад уже есть наработки. Но вариант оказался не очень удачным и пока я не попробовал сделать команду - не знал об этом ))
В принципе, я уже исключил этот вариант и переделал на "правильное"