Конструктор PaletteSet с указанием имени команды

Автор Тема: Конструктор PaletteSet с указанием имени команды  (Прочитано 4724 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Доброго времени суток.

- AutoCAD 2014 Enu SP1 x64

Приведённый ниже код позволяет открывать палитру инструментов как при помощи команды ssmng, так и при помощи команды ssmng2 (для которой я не писал никакого кода). Для каких случаев создан указанный ниже вариант конструктора?

Код - C# [Выбрать]
  1. const String cmdNamespace = "Bushman";
  2. [Rtm.CommandMethod(cmdNamespace, "ssmng", Rtm.CommandFlags.Modal)]
  3. public void SsMng() {
  4.         AW.PaletteSet paletteSet = new AW.PaletteSet("Sheet Set Manager", "ssmng2",
  5.                 new Guid("{1458D97E-38A2-4C7A-9A35-2305A72AE490}"));
  6.         paletteSet.Visible = true;
  7. }

Спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Для каких случаев создан указанный ниже вариант конструктора?
Я посмотрел при помощи ILSpy, что в таком случае делает конструктор. Оказалось, что он вызывает функцию AdUiRegisterTool:
Код - C++ [Выбрать]
  1. bool ADUI_PORT AdUiRegisterTool(
  2.     LPCTSTR lpszToolName,  // "Sheet Set Manager"
  3.     LPCTSTR lpszCommand, // ssmng2
  4.     CLSID* pID // Guid("{1458D97E-38A2-4C7A-9A35-2305A72AE490}")
  5. );
Эта функция регистрирует "на всегда" по имени команды этот инструмент:
Цитировать
Makes a tool restartable the automatically next session. Call this function once for each tool that your application support and that you want to be automatically restarted the next session. When the session terminates, if the function AdUiRegisterTool has been previously called and the control bar having the pID identifier is visible, then the tool will be automatically restarted the next session, by invokation of the command specified by lpszCommand.
Т.е. достаточно один раз вызвать эту функцию и (если инструмент был видимый), то при следующем запуске AutoCAD этот инструмент запустится автоматически путём запуска команды с именем lpszCommand.  В твоём случае эта команда будет ssmng2. Т.е. логично будет если имя команды в Rtm.CommandMethod тоже будет ssmng2.

P.S.: Но так как этот конструктор недокументирован, то ты используешь его на свой страх и риск.

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Т.е. достаточно один раз вызвать эту функцию и (если инструмент был видимый), то при следующем запуске AutoCAD этот инструмент запустится автоматически путём запуска команды с именем lpszCommand.
Спасибо. Проверил - так и есть.
P.S.: Но так как этот конструктор недокументирован, то ты используешь его на свой страх и риск.
Если я буду бояться использовать всего, что в AutoCAD API не документировано, то однозначно мне вообще не светит и программная работа с подшивками и использование Database.TryGetObjectId, а так же многое другое... Нередко в ObjectARX SDK что-то не документировано вовсе не потому, что в будущем это может быть исключено из API, а просто потому что так документация составляется... Вам ли мне объяснять это...

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

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

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

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