Создать комманду с опцией выбора

Автор Тема: Создать комманду с опцией выбора  (Прочитано 10394 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн YusufАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Подскажите как создать комманду где можно выбирать по клику опции и как отловить что нажато? В поиске не нашел


Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Re: Создать комманду с опцией выбора
« Ответ #1 : 21-11-2020, 11:09:35 »
Почти все запросы у пользователя через Editor имеют PromptOptions для доп опций.
В этом примере используется запрос точки GetPoint с PromptPointOptions

Оффлайн YusufАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Создать комманду с опцией выбора
« Ответ #2 : 21-11-2020, 14:19:59 »
Почти все запросы у пользователя через Editor имеют PromptOptions для доп опций.
В этом примере используется запрос точки GetPoint с PromptPointOptions
не видно ссылки, я пробовал до создания темы просто писать в квадратный скобках писать, писать через запятую в скобках не получается
p.s спасибо нашел тут, помог поиск по PromptOptions до этого все не то выходило.

https://www.keanw.com/2010/05/adding-keyword-handling-to-autocad-nets-getselection.html
« Последнее редактирование: 21-11-2020, 15:19:08 от Yusuf »

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Создать комманду с опцией выбора
« Ответ #3 : 21-11-2020, 14:45:00 »
using Autodesk.AutoCAD.EditorInput;

есть?

acCoreMgd.dll в ссылках загружен?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Создать комманду с опцией выбора
« Ответ #4 : 21-11-2020, 15:35:57 »
Yusuf,
Давай код, в который нужно добавить ключевые слова. Есть специфика в том, какой GetXXX  ты используешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн YusufАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Создать комманду с опцией выбора
« Ответ #5 : 21-11-2020, 15:59:27 »
Yusuf,
Давай код, в который нужно добавить ключевые слова. Есть специфика в том, какой GetXXX  ты используешь.

изменил код который был по ссылке по выше, мне надо чтобы этот текст с опциями исчезал после нажатия или не нажатия, дальше надо выбирать объекты, т.е сначала по умолчанию выбрать объекты с опциями и дальше в зависимости от опций создается только pdf, только dwg или и то и другое.

Код - C# [Выбрать]
  1.         public void GetSelectionWithKeywords()
  2.         {
  3.             Document doc = Application.DocumentManager.MdiActiveDocument;
  4.             Editor ed = doc.Editor;
  5.             // Create our options object
  6.             PromptSelectionOptions pso = new PromptSelectionOptions();
  7.             // Add our keywords
  8.             pso.Keywords.Add("Create dwg");
  9.             pso.Keywords.Add("Only dwg");
  10.             // Set our prompts to include our keywords
  11.             string kws = pso.Keywords.GetDisplayString(true);
  12.             pso.MessageForAdding =
  13.               "\nAdd objects to selection or " + kws;
  14.             pso.MessageForRemoval =
  15.               "\nRemove objects from selection or " + kws;
  16.             // Implement a callback for when keywords are entered
  17.             string inputStr = "";
  18.             pso.KeywordInput +=
  19.               delegate (object sender, SelectionTextInputEventArgs e)
  20.               {
  21.                   if (e.Input == "C") inputStr = "C";
  22.                   else if (e.Input == "O") inputStr = "O";
  23.  
  24.               };
  25.             // Finally run the selection and show any results
  26.             PromptSelectionResult psr = ed.GetSelection(pso);
  27.             if (psr.Status == PromptStatus.OK)
  28.             {
  29.  
  30.                 if (inputStr == "C") ed.WriteMessage("\n здесь метод для dwg");
  31.                 else if (inputStr == "O") ed.WriteMessage("\nздесь метод для pdf");
  32.             }
  33.         }
  34.  
using Autodesk.AutoCAD.EditorInput;

есть?

acCoreMgd.dll в ссылках загружен?
да есть

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Создать комманду с опцией выбора
« Ответ #6 : 21-11-2020, 16:13:37 »
Код - C# [Выбрать]
  1. pso.Keywords.Add("Create dwg");
  2. pso.Keywords.Add("Only dwg");
Keyword - Ключевое СЛОВО. Не надо в них вносить словосочетания и предложения :) Если надо два слова - пишите их слитно, без пробелов и других символов, изменения регистра и т.п. На всякий случай - символ подчёркивания тоже использовать нельзя!
В случае с множественным выбором объектов, имейте в виду, что у него уже есть встроенные ключевые слова: Рамка, Последний, Секрамка и пр: https://knowledge.autodesk.com/ru/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2021/RUS/AutoCAD-Core/files/GUID-0DD5DA73-9DC5-4424-8FED-7BBE3BE52A4D-htm.html. У этих ключевых слов есть английские аналоги. И скорее всего, "C" и "O" там уже используются.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Создать комманду с опцией выбора
« Ответ #7 : 21-11-2020, 16:17:48 »
изменил код который был по ссылке по выше, мне надо чтобы этот текст с опциями исчезал после нажатия или не нажатия, дальше надо выбирать объекты, т.е сначала по умолчанию выбрать объекты с опциями и дальше в зависимости от опций создается только pdf, только dwg или и то и другое.
Так и в чем проблема? Или проблемы уже нет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн YusufАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Создать комманду с опцией выбора
« Ответ #8 : 21-11-2020, 17:50:32 »
Так и в чем проблема? Или проблемы уже нет?
как обрабатывать дальше что нажато и после нажатия на опции должна исчезать надпись

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Создать комманду с опцией выбора
« Ответ #9 : 21-11-2020, 19:03:19 »
Так и в чем проблема? Или проблемы уже нет?
как обрабатывать дальше что нажато и после нажатия на опции должна исчезать надпись
Чтобы потом выбирать объекты, но уже без ключевых слов, ты должен снова запустить ed.GetSelection, но уже без задания ключевых слов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн YusufАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Создать комманду с опцией выбора
« Ответ #10 : 23-11-2020, 10:19:05 »
Чтобы потом выбирать объекты, но уже без ключевых слов, ты должен снова запустить ed.GetSelection, но уже без задания ключевых слов.
как сделать чтобы при выборе опции сразу запускался метод а не ждал пока enter не нажал?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Создать комманду с опцией выбора
« Ответ #11 : 23-11-2020, 13:33:15 »
Чтобы потом выбирать объекты, но уже без ключевых слов, ты должен снова запустить ed.GetSelection, но уже без задания ключевых слов.
как сделать чтобы при выборе опции сразу запускался метод а не ждал пока enter не нажал?
Не понял. Какой метод?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн YusufАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Создать комманду с опцией выбора
« Ответ #12 : 23-11-2020, 14:02:43 »
Не понял. Какой метод?
сейчас после выбора опции, ждет PromptStatus.OK
Код - C# [Выбрать]
  1. if (psr.Status == PromptStatus.OK)
  2.             { проверка на какая опция нажата
  3.  

можно ли сделать без PromptStatus.OK, выбрал опцию и вызывается соответствующий метод согласно условия


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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Создать комманду с опцией выбора
« Ответ #13 : 24-11-2020, 07:49:24 »
Yusuf,
Приведи код полностью, для того чтобы его можно было проверить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн YusufАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Создать комманду с опцией выбора
« Ответ #14 : 24-11-2020, 08:55:15 »
Приведи код полностью, для того чтобы его можно было проверить.

Код - C# [Выбрать]
  1.         [CommandMethod("CreatePdfDwg")]
  2.         public static void GetSelectionWithKeywords()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Editor ed = doc.Editor;
  6.             // Create our options object
  7.             PromptSelectionOptions pso = new PromptSelectionOptions();
  8.             // Add our keywords
  9.             pso.Keywords.Add("creatEPd");
  10.             pso.Keywords.Add("createDwg");
  11.             pso.Keywords.Add("creatEpdfwg");
  12.             // Set our prompts to include our keywords
  13.             string kws = pso.Keywords.GetDisplayString(true);
  14.             pso.MessageForAdding =
  15.               "\nAdd objects to selection or " + kws;
  16.             pso.MessageForRemoval =
  17.               "\nRemove objects from selection or " + kws;
  18.             // Implement a callback for when keywords are entered
  19.             string inputStr = "";
  20.  
  21.             pso.KeywordInput +=
  22.                 delegate (object sender, SelectionTextInputEventArgs e)
  23.                 {
  24.                     //ed.WriteMessage("\nKeyword entered: {0}", e.Input);
  25.                     inputStr = e.Input;
  26.                     if (inputStr == "createPDf")
  27.                     {
  28.                         ed.WriteMessage("\n здесь метод для pdf");
  29.                         ListAttributes1();
  30.                         return;
  31.                     }
  32.                     else if (inputStr == "createDwg")
  33.                     {
  34.                         ed.WriteMessage("\nздесь метод для dwg");
  35.                         CreateTransmittalAndPDF();
  36.                         return;
  37.                     }
  38.                     else if (inputStr == "creatEPdfwg")
  39.                     {
  40.                         ed.WriteMessage("\nздесь метод для pdf and dwg");
  41.                         return;
  42.                     }
  43.                     ed.WriteMessage("\nKeyword entered: {0}", e.Input);
  44.                 };
  45.  
  46.             // Finally run the selection and show any results
  47.             PromptSelectionResult psr = ed.GetSelection(pso);
  48.             //if (psr.Status == PromptStatus.OK)
  49.             //{
  50.             //    if (inputStr == "createPDf")
  51.             //    {
  52.             //        ed.WriteMessage("\n здесь метод для pdf");
  53.             //        ListAttributes1();
  54.             //        return;
  55.             //    }
  56.             //    else if (inputStr == "createDwg")
  57.             //    {
  58.             //        ed.WriteMessage("\nздесь метод для dwg");
  59.             //        CreateTransmittalAndPDF();
  60.             //        return;
  61.             //    }
  62.             //    else if (inputStr == "creatEPdfwg")
  63.             //    {
  64.             //        ed.WriteMessage("\nздесь метод для pdf and dwg");
  65.             //        return;
  66.             //    }
  67.             //}
  68.         }
  69.