Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Андрей Бушман от 13-12-2013, 12:29:11

Название: Конструктор PaletteSet с указанием имени команды
Отправлено: Андрей Бушман от 13-12-2013, 12:29:11
Доброго времени суток.

- 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. }

Спасибо.
Название: Re: Конструктор PaletteSet с указанием имени команды
Отправлено: Александр Ривилис от 13-12-2013, 14:46:25
Для каких случаев создан указанный ниже вариант конструктора?
Я посмотрел при помощи 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.: Но так как этот конструктор недокументирован, то ты используешь его на свой страх и риск.

Название: Re: Конструктор PaletteSet с указанием имени команды
Отправлено: Андрей Бушман от 13-12-2013, 15:01:10
Т.е. достаточно один раз вызвать эту функцию и (если инструмент был видимый), то при следующем запуске AutoCAD этот инструмент запустится автоматически путём запуска команды с именем lpszCommand.
Спасибо. Проверил - так и есть.
P.S.: Но так как этот конструктор недокументирован, то ты используешь его на свой страх и риск.
Если я буду бояться использовать всего, что в AutoCAD API не документировано, то однозначно мне вообще не светит и программная работа с подшивками и использование Database.TryGetObjectId, а так же многое другое... Нередко в ObjectARX SDK что-то не документировано вовсе не потому, что в будущем это может быть исключено из API, а просто потому что так документация составляется... Вам ли мне объяснять это...
Название: Re: Конструктор PaletteSet с указанием имени команды
Отправлено: Александр Ривилис от 13-12-2013, 15:35:10
Вам ли мне объяснять это...
Моё дело предупредить. К этому меня Autodesk'овцы приучили.  ;)
Название: Re: Конструктор PaletteSet с указанием имени команды
Отправлено: Александр Ривилис от 20-12-2013, 04:28:05
ADN DevHelp передали команде разработчиков все замеченные здесь баги и недокументированные варианты поведения. Будем надеятся на исправление.