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

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 16-09-2018, 21:32:25

Название: Как получить список команд моего плагина
Отправлено: Алексей (IdeaSoft) от 16-09-2018, 21:32:25
А возможно получить список команд моего плагина с помощью AutoCAD API

Все мои команды начинаются с подстроки "PSM_*" 
Или получить полный список команд. Я бы тогда отфильтровал их по начальной подстроке.
Название: Re: Как получить список команд моего плагина
Отправлено: Александр Ривилис от 16-09-2018, 21:36:13
Можно, но зачем? Ты не можешь поосмотреть свой плагин и найти все его команды?
Название: Re: Как получить список команд моего плагина
Отправлено: Алексей (IdeaSoft) от 16-09-2018, 21:39:39
Это не мне нужно а юзеру.
Ну или к примеру инженеру техподдержки это может быть нужно.
Он хочет получить список команд к примеру набрав соотв. команду.
Не полезет же он в мой код.

Может в моем плагине сделать команду типа PSM_LIST_COMMAND
Название: Re: Как получить список команд моего плагина
Отправлено: Александр Ривилис от 16-09-2018, 21:58:54
Понятно. Можно без программирования, а при помощи команды _ARX:
(https://farm2.staticflickr.com/1886/43812498635_1fa4803e4c_o.png)

Такой вариант устроит или тебе обязательно программировать?
Название: Re: Как получить список команд моего плагина
Отправлено: Александр Ривилис от 16-09-2018, 23:02:29
Ну а так можно кодом:
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.EditorInput;
  3. using Autodesk.AutoCAD.Runtime;
  4. using System;
  5. using System.Reflection;
  6. using System.Resources;
  7.  
  8. namespace PSM_Plugin
  9. {
  10.   public class MyCommands
  11.   {
  12.     [CommandMethod("PSM_LIST_COMMANDS")]
  13.     public void PSM_LIST_COMMANDS()
  14.     {
  15.       Document doc = Application.DocumentManager.MdiActiveDocument;
  16.       if (doc == null) return;
  17.       Editor ed = doc.Editor;
  18.       Assembly assembly = Assembly.GetExecutingAssembly();
  19.       Type[] types = assembly.GetTypes();
  20.       ResourceManager RM = new ResourceManager(this.GetType());
  21.       foreach (Type type in types)
  22.       {
  23.         // Проходим по всем классам этой сборки
  24.         MethodInfo[] mis = type.GetMethods();
  25.         foreach (MethodInfo mi in mis)
  26.         {
  27.           // Проходим по методам класса.
  28.           // Смотрим есть ли атрибут команды у метода
  29.           object[] atts = mi.GetCustomAttributes(typeof(CommandMethodAttribute), true);
  30.           if (mi.IsPublic && atts.Length > 0)
  31.           {
  32.             CommandMethodAttribute ca = ((CommandMethodAttribute)atts[0]);
  33.             // Получаем глобальное и локальное имя команды
  34.             string commandNameGlobal = ca.GlobalName;
  35.             string commandNameLocal = commandNameGlobal;
  36.             if (ca.LocalizedNameId != null)
  37.             {
  38.               try { commandNameLocal = RM.GetString(ca.LocalizedNameId); } catch { };
  39.             }
  40.             ed.WriteMessage("\n{0} {1}", commandNameGlobal, commandNameLocal);
  41.           }
  42.         }
  43.       }
  44.  
  45.     }
  46.     // Тестовая команда 1 - только для проверки
  47.     [CommandMethod("PSM_COMMAND1")]
  48.     public void PSM_COMMAND1()
  49.     {
  50.       Document doc = Application.DocumentManager.MdiActiveDocument;
  51.       if (doc == null) return;
  52.       Editor ed = doc.Editor;
  53.       ed.WriteMessage("\nPSM_COMMAND1");
  54.     }
  55.     // Тестовая команда 2 - только для проверки
  56.     [CommandMethod("PSM","PSM_COMMAND2", "PSM_COMMAND2",CommandFlags.Modal)]
  57.     public void PSM_COMMAND2()
  58.     {
  59.       Document doc = Application.DocumentManager.MdiActiveDocument;
  60.       if (doc == null) return;
  61.       Editor ed = doc.Editor;
  62.       ed.WriteMessage("\nPSM_COMMAND2");
  63.     }
  64.  
  65.   }
  66.  
  67. }

(https://farm2.staticflickr.com/1886/42914053660_bc150473b0_o.png)

Название: Re: Как получить список команд моего плагина
Отправлено: Алексей (IdeaSoft) от 17-09-2018, 08:57:32
Спасибо большое . И через _ARX полезно было узнать
И через код тоже нужно будет.