"Неизвестная команда" при создании палитры во время автозагрузки библиотеки

Автор Тема: "Неизвестная команда" при создании палитры во время автозагрузки библиотеки  (Прочитано 3651 раз)

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

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
В этот раз проблема точно не "в не показанном коде"  ;)
Делаю пошагово:
1. Создаю новый проект в VS и называю его PaletteTestForForum (делаю под 2010 автокад. Проверял - в 2017 тоже самое)
2. Пишу следующий простой код создания пустой палитры:
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.Windows;
  4.  
  5. namespace PaletteTestForForum
  6. {
  7.     public class Program : IExtensionApplication
  8.     {
  9.         public void Initialize()
  10.         {
  11.             CreatePalette();
  12.         }
  13.  
  14.         public void Terminate()
  15.         {
  16.             //nothing
  17.         }
  18.  
  19.         public static PaletteSet _PaletteSet;
  20.  
  21.         public static void CreatePalette()
  22.         {
  23.             try
  24.             {
  25.                 if (_PaletteSet == null)
  26.                 {
  27.                     _PaletteSet = new PaletteSet("TestPalette", new Guid("A9C907EF-6281-4FA2-9B6C-E0401E41BB85"));
  28.                    
  29.                     _PaletteSet.Style =
  30.                         PaletteSetStyles.ShowPropertiesMenu |
  31.                         PaletteSetStyles.ShowAutoHideButton |
  32.                         PaletteSetStyles.ShowCloseButton;
  33.                     _PaletteSet.MinimumSize = new System.Drawing.Size(100, 300);
  34.                     _PaletteSet.DockEnabled = DockSides.Left | DockSides.Right;
  35.  
  36.                     _PaletteSet.Visible = true;
  37.                 }
  38.                 else
  39.                 {
  40.                     _PaletteSet.Visible = true;
  41.                 }
  42.             }
  43.             catch (System.Exception)
  44.             {
  45.                 //
  46.             }
  47.         }
  48.     }
  49. }
3. Открываю редактор реестра и добавляю свою библиотеку в автозагрузку:


4. Открываю автокад и в командной строек (и в строке динамического ввода тоже) вижу следующее:


Проект прикладываю на всякий случай

Мне кажется, что такой вопрос уже должен был где-то подниматься, но я его не встречал

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

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

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
http://adn-cis.org/forum/index.php?topic=395.0
Если я правильно понял, то создание палитры я должен сделать так:
Код - C# [Выбрать]
  1. _PaletteSet = new PaletteSet("TestPalette", "testpalette", new Guid("A9C907EF-6281-4FA2-9B6C-E0401E41BB85"));
т.е. "добавить" для палитры имя функции и тогда некая функция автокада AdUiRegisterTool будет грузить палитру уже по этой функции. Причем после второго запуска автокада ))

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Цитировать
Если я правильно понял, то создание палитры я должен сделать так:
Думаю, что этого будет недостаточно.
Как я понимаю (и как это у меня работает в нескольких программах), должна быть определена команда, которая запускает палитру. То есть, метод создания/открытия палитры (CreatePalette) должен быть помечен атрибутом CommandMethod. И вот название этой команды надо передавать в параметры создания палитры. Эти данные записываются в настройки профиля. И если на момент закрытия автокада была открыта эта палитра, то при запуске автокада он будет пытаться ее открыть с помощью сохраненной команды. Разумеется, в этот момент команда должна быть уже загружена. Я использую Bundle-загрузчик и у него с этим проблем нет.
Пример:
Код - C# [Выбрать]
  1. [CommandMethod("DZagCirclesPalette")]
  2. public static void PaletteOnOff()
  3. {
  4.     if (_paletteSet == null)
  5.     {
  6.         _paletteSet = new PaletteSet
  7.             // Название палитры
  8.             ("Свойства окружностей",
  9.             // Команда открытия палитры
  10.             "DZagCirclesPalette",
  11.             // GUID палитры
  12.             new Guid(_paletteGUID));
  13.  
  14.         _editorControl = new CirclesEditor();
  15.         _paletteSet.AddVisual("Свойства окружностей", _editorControl);
  16.  
  17.         _paletteSet.Style =
  18.             PaletteSetStyles.ShowPropertiesMenu
  19.             | PaletteSetStyles.ShowAutoHideButton
  20.             | PaletteSetStyles.ShowCloseButton
  21.             | PaletteSetStyles.Snappable;
  22.  
  23.         _paletteSet.DockEnabled =
  24.             DockSides.None | DockSides.Left | DockSides.Right;
  25.  
  26.         _paletteSet.MinimumSize = new System.Drawing.Size(300, 500);
  27.  
  28.         foreach (Document doc in Application.DocumentManager)
  29.         {
  30.             doc.ImpliedSelectionChanged -= doc_ImpliedSelectionChanged;
  31.             doc.ImpliedSelectionChanged += doc_ImpliedSelectionChanged;
  32.         }
  33.  
  34.         Application.DocumentManager.DocumentCreated += DocumentManager_DocumentCreated;
  35.         Application.DocumentManager.DocumentActivated += DocumentManager_DocumentActivated;
  36.  
  37.         _paletteSet.Visible = true;
  38.     }
  39.     else
  40.     {
  41.         _paletteSet.Visible = !_paletteSet.Visible;
  42.     }
  43.  
  44.     Document adoc = Application.DocumentManager.MdiActiveDocument;
  45.     if (adoc != null)
  46.         ShowPropsSelImpliedParts(adoc);
  47. }
  48.  

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
и тогда некая функция автокада AdUiRegisterTool будет грузить палитру уже по этой функции
Она не грузит, а регистрирует команду, которая запускается и должна создать/открыть/настроить палитру... А дальше всё Дмитрий Загорулькин написал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение