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

ADN Club => AutoCAD .NET API => Тема начата: Yusuf от 21-11-2020, 10:54:25

Название: Создать комманду с опцией выбора
Отправлено: Yusuf от 21-11-2020, 10:54:25
Подскажите как создать комманду где можно выбирать по клику опции и как отловить что нажато? В поиске не нашел
(https://i.postimg.cc/wRgHWRRf/1121212.jpg) (https://postimg.cc/wRgHWRRf)
Название: Re: Создать комманду с опцией выбора
Отправлено: Вильдар от 21-11-2020, 11:09:35
Почти все запросы у пользователя через Editor имеют PromptOptions для доп опций.
В этом примере используется запрос точки GetPoint с PromptPointOptions
Название: Re: Создать комманду с опцией выбора
Отправлено: Yusuf от 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
Название: Re: Создать комманду с опцией выбора
Отправлено: pavka_97 от 21-11-2020, 14:45:00
using Autodesk.AutoCAD.EditorInput;

есть?

acCoreMgd.dll в ссылках загружен?
Название: Re: Создать комманду с опцией выбора
Отправлено: Александр Ривилис от 21-11-2020, 15:35:57
Yusuf,
Давай код, в который нужно добавить ключевые слова. Есть специфика в том, какой GetXXX  ты используешь.
Название: Re: Создать комманду с опцией выбора
Отправлено: Yusuf от 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 в ссылках загружен?
да есть
Название: Re: Создать комманду с опцией выбора
Отправлено: Дмитрий Загорулькин от 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" там уже используются.
Название: Re: Создать комманду с опцией выбора
Отправлено: Александр Ривилис от 21-11-2020, 16:17:48
изменил код который был по ссылке по выше, мне надо чтобы этот текст с опциями исчезал после нажатия или не нажатия, дальше надо выбирать объекты, т.е сначала по умолчанию выбрать объекты с опциями и дальше в зависимости от опций создается только pdf, только dwg или и то и другое.
Так и в чем проблема? Или проблемы уже нет?
Название: Re: Создать комманду с опцией выбора
Отправлено: Yusuf от 21-11-2020, 17:50:32
Так и в чем проблема? Или проблемы уже нет?
как обрабатывать дальше что нажато и после нажатия на опции должна исчезать надпись
Название: Re: Создать комманду с опцией выбора
Отправлено: Александр Ривилис от 21-11-2020, 19:03:19
Так и в чем проблема? Или проблемы уже нет?
как обрабатывать дальше что нажато и после нажатия на опции должна исчезать надпись
Чтобы потом выбирать объекты, но уже без ключевых слов, ты должен снова запустить ed.GetSelection, но уже без задания ключевых слов.
Название: Re: Создать комманду с опцией выбора
Отправлено: Yusuf от 23-11-2020, 10:19:05
Чтобы потом выбирать объекты, но уже без ключевых слов, ты должен снова запустить ed.GetSelection, но уже без задания ключевых слов.
как сделать чтобы при выборе опции сразу запускался метод а не ждал пока enter не нажал?
Название: Re: Создать комманду с опцией выбора
Отправлено: Александр Ривилис от 23-11-2020, 13:33:15
Чтобы потом выбирать объекты, но уже без ключевых слов, ты должен снова запустить ed.GetSelection, но уже без задания ключевых слов.
как сделать чтобы при выборе опции сразу запускался метод а не ждал пока enter не нажал?
Не понял. Какой метод?
Название: Re: Создать комманду с опцией выбора
Отправлено: Yusuf от 23-11-2020, 14:02:43
Не понял. Какой метод?
сейчас после выбора опции, ждет PromptStatus.OK
Код - C# [Выбрать]
  1. if (psr.Status == PromptStatus.OK)
  2.             { проверка на какая опция нажата
  3.  

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

Название: Re: Создать комманду с опцией выбора
Отправлено: Александр Ривилис от 24-11-2020, 07:49:24
Yusuf,
Приведи код полностью, для того чтобы его можно было проверить.
Название: Re: Создать комманду с опцией выбора
Отправлено: Yusuf от 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.  
Название: Re: Создать комманду с опцией выбора
Отправлено: ДмитрийПетров от 01-12-2020, 15:37:09
pso.Keywords.Add("creatEPd");
            pso.Keywords.Add("createDwg");
            pso.Keywords.Add("creatEpdfwg");

а не пробовал поменять pso.Keywords.Add("creatEPd") на "createPDf" из if (inputStr == "createPDf")
Название: Re: Создать комманду с опцией выбора
Отправлено: Дмитрий Загорулькин от 03-12-2020, 11:16:29
Возможно, имеется в виду, что надо прервать выбор, когда выбрано какое-то ключевое слово.
Если да, то вот так: https://adn-cis.org/kak-zavershit-editor.getselection-pri-vyibore-klyuchevogo-slova.html