Как получить список команд моего плагина

Автор Тема: Как получить список команд моего плагина  (Прочитано 146 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 794
  • Карма: 4
    • idea-soft.ru
  • Skype: makar_govorun
А возможно получить список команд моего плагина с помощью AutoCAD API

Все мои команды начинаются с подстроки "PSM_*" 
Или получить полный список команд. Я бы тогда отфильтровал их по начальной подстроке.

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

  • Administrator
  • *****
  • Сообщений: 8165
  • Карма: 978
  • Рыцарь ObjectARX
  • Skype: rivilis
Можно, но зачем? Ты не можешь поосмотреть свой плагин и найти все его команды?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 794
  • Карма: 4
    • idea-soft.ru
  • Skype: makar_govorun
Это не мне нужно а юзеру.
Ну или к примеру инженеру техподдержки это может быть нужно.
Он хочет получить список команд к примеру набрав соотв. команду.
Не полезет же он в мой код.

Может в моем плагине сделать команду типа PSM_LIST_COMMAND

Отмечено как Решение Алексей (IdeaSoft) 17-09-2018, 08:57:36

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

  • Administrator
  • *****
  • Сообщений: 8165
  • Карма: 978
  • Рыцарь ObjectARX
  • Skype: rivilis
Понятно. Можно без программирования, а при помощи команды _ARX:


Такой вариант устроит или тебе обязательно программировать?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 8165
  • Карма: 978
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну а так можно кодом:
Код - 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. }



« Последнее редактирование: 16-09-2018, 23:56:16 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 794
  • Карма: 4
    • idea-soft.ru
  • Skype: makar_govorun
Спасибо большое . И через _ARX полезно было узнать
И через код тоже нужно будет.