Как заменить стандартную команду своей?

Автор Тема: Как заменить стандартную команду своей?  (Прочитано 11659 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробуй убрать
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.Internal.Utils.RemoveCommand("AECUTILITIES70", "AECOBJECTVIEWER");
И вместо
Код - C# [Выбрать]
  1. [CommandMethod("AECUTILITIES70", "AECOBJECTVIEWER", CommandFlags.UsePickSet)]
поставить
Код - C# [Выбрать]
  1. [CommandMethod("ACAD_MAIN", "AECOBJECTVIEWER", CommandFlags.UsePickSet)]
Это только предположение.
Если сработает подмена команды, то через "_AECUTILITIES70.AECOBJECTVIEWER" можно будет запустить "родную" команду.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Попробовал ACAD_MAIN, и просто без указания пространства имён. Ошибки при загрузке DLL не возникает, но и команда не переопределяется. Точнее даже не команда, а действие по выбору пункта в контекстном меню. Если бы этот инструмент вызывался кнопкой на ленте, то сработало бы (посмотрел настройки в файле адаптации). А в контекстном меню, видимо, прописана команда с пространством имён.
Наверное, попробую в понедельник на свежую голову ещё повоевать с командными событиями, может удастся всё-таки через них сделать. Сейчас уже мозг отказывается работать...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А в контекстном меню, видимо, прописана команда с пространством имён.
А вот это крайне мало вероятно. Она скорее всего прописана или как _AECOBJECTVIEWER или как _OBJECTVIEWER. ARXDBG тебе в руки. :-)
Проверил, что после _UNDEFINE OBJECTVIEWER из контекстного меню она на запускается (C3D 2016)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Дмитрий Загорулькин 19-02-2018, 01:25:53

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.EditorInput;
  5. using Autodesk.AutoCAD.Internal;
  6.  
  7. [assembly: ExtensionApplication(typeof(Rivilis.MyObjectViewer))]
  8. [assembly: CommandClass(typeof(Rivilis.MyObjectViewer))]
  9.  
  10. namespace Rivilis
  11. {
  12.   public class MyObjectViewer : IExtensionApplication
  13.   {
  14.     void IExtensionApplication.Initialize()
  15.     {
  16.       // Preloading AecUtilities.arx
  17.       if (!Utils.IsCommandDefined("AecObjectViewer"))
  18.        SystemObjects.DynamicLinker.LoadModule("AecUtilities.arx", false, false);
  19.       Utils.AddCommand("ACAD_MAIN", "AecObjectViewer", "ObjectViewer", CommandFlags.UsePickSet | CommandFlags.Redraw, MyObjectViewerHandler);
  20.     }
  21.  
  22.     void IExtensionApplication.Terminate()
  23.     {
  24.       // Do plug-in application clean up here
  25.     }
  26.    
  27.     public static void MyObjectViewerHandler() // This method can have any name
  28.     {
  29.       Document doc = Application.DocumentManager.MdiActiveDocument;
  30.       Editor ed = doc.Editor;
  31.       ed.WriteMessage("\nMyObjectViewer..");
  32.       doc.SendStringToExecute("_AecUtilities70.AecObjectViewer ", true, false, false);
  33.     }
  34.   }
  35. }

А это результат выбора из контекстного меню:


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

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Да, действительно, Вам удалось его перехитрить!  :)
Проверил - отлично работает! Спасибо!

P.S. В продолжение темы: http://adn-cis.org/forum/index.php?topic=8319
« Последнее редактирование: 20-02-2018, 13:20:24 от Дмитрий Загорулькин »