Некорректное распознавание пользовательских команд управляемого расширения

Автор Тема: Некорректное распознавание пользовательских команд управляемого расширения  (Прочитано 5010 раз)

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Windows 7 x64.
AutoCAD 2014, 2015.

Похоже на очень досадный баг, который присутствует начиная с версии AutoCAD 2014 (во всяком случае мои тесты показывают именно так). Более старые версии AutoCAD в подобном поведении уличены не были.

Итак, пишем "Hello World":

Код - C# [Выбрать]
  1. /* © Andrey Bushman, 2015
  2.  * Commands.cs
  3.  */
  4.  
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9.  
  10. using Rg = System.Text.RegularExpressions;
  11. using Dr = System.Drawing;
  12. using Fr = System.Windows.Forms;
  13. using Wp = System.Windows;
  14. using Wc = System.Windows.Controls;
  15. using Cn = System.Windows.Converters;
  16.  
  17. #if AUTOCAD
  18. using cad = Autodesk.AutoCAD.ApplicationServices.Application;
  19. using Ap = Autodesk.AutoCAD.ApplicationServices;
  20. using Db = Autodesk.AutoCAD.DatabaseServices;
  21. using Ed = Autodesk.AutoCAD.EditorInput;
  22. using Rt = Autodesk.AutoCAD.Runtime;
  23. using Gm = Autodesk.AutoCAD.Geometry;
  24. using Br = Autodesk.AutoCAD.BoundaryRepresentation;
  25. using Hs = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices;
  26. using Us = Autodesk.AutoCAD.DatabaseServices.SymbolUtilityServices;
  27. #endif
  28.  
  29. #if AUTOCAD && (PLATFORM_x64 || PLATFORM_x86)
  30. using In = Autodesk.AutoCAD.Interop;
  31. using Ic = Autodesk.AutoCAD.Interop.Common;
  32. #endif
  33.  
  34. using Ex = Bushman.CAD.Extensions.AutoCAD_Net_Extension1;
  35.  
  36. [assembly: Rt.CommandClass(typeof(Ex.Commands))]
  37.  
  38. namespace Bushman.CAD.Extensions.AutoCAD_Net_Extension1 {
  39.   public sealed class Commands {
  40.     const String cmdGroup = "Bushman";
  41.  
  42.     //*******************************************************************
  43.     // This is a CAD-command template. Don't forget to rename the default
  44.     // string values and method name.
  45.  
  46.     [Rt.CommandMethod(cmdGroup, "test", "testx",
  47.       Rt.CommandFlags.Modal)]
  48.     public void RenameMe_Command() {
  49.       Ap.Document doc = cad.DocumentManager.MdiActiveDocument;
  50.       if (null == doc)
  51.         return;
  52.       Db.Database db = doc.Database;
  53.       Ed.Editor ed = doc.Editor;
  54.       using (doc.LockDocument()) {
  55.         using (Db.Transaction tr = db.TransactionManager.StartTransaction()) {
  56.           ed.WriteMessage("Hello, World!");
  57.           tr.Commit();
  58.         }
  59.       }
  60.     }
  61.     //*******************************************************************
  62.   }
  63. }

А теперь посмотрим на фокусы, которые будет вытворять с этим кодом AutoCAD...

Давайте загрузим это в AutoCAD 2015 SP1 x64 Enu. В списке, отображаемом AutoCAD нет варианта с глобальным именем команды. При попытке вызвать глобальную команду без указания её группы, AutoCAD вместо неё вызывает другую, первую из сгенерированного им списка. В прикреплённых ниже скринах я пытаюсь различными способами вызвать определённую в моём коде команду.
« Последнее редактирование: 12-03-2015, 12:45:27 от Андрей Бушман »

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Дополнительная информация. Если я отредактирую атрибут так:
Код - C# [Выбрать]
  1. [Rt.CommandMethod("test", Rt.CommandFlags.Modal)]

то всё работает. Т.о. проблема наблюдается при попытке указать глобальное имя команды, не указывая при этом её существующей группы. Eсли в _inputsearchoptions отключаю опцию AutoComplete, то начинает работать и в случае указания глобального имени команды без указания её группы.
« Последнее редактирование: 12-03-2015, 12:47:47 от Андрей Бушман »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Eсли в _inputsearchoptions отключаю опцию AutoComplete, то начинает работать и в случае указания глобального имени команды без указания её группы.
Вот приблизительно об этом и Kean Walmsley писал (статья в моём переводе здесь)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Вот приблизительно об этом и Kean Walmsley писал (статья в моём переводе здесь)
Ну, хреново... Что тут скажешь...