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

ADN Club => AutoCAD .NET API => Тема начата: Brayan от 06-08-2019, 11:39:43

Название: Как при выборе объектов задать ключевое слово
Отправлено: Brayan от 06-08-2019, 11:39:43
Товарищи, помогите найти пример кода, когда в командную строку выдаются опции по типу "СОПРЯЖЕНИЕ Выберите объекты или [Радиус] ", так чтоб можно было переназначить этот радиус. И второй вариант по итогу выполнения "Удалить выбранные объекты  [Да/Нет] ? <Нет>:Н ". То ли неправильно как-то поисковые запросы ввожу на английском, никак не могу нагуглить.
Название: Re: Как при выборе объектов задать ключевое слово
Отправлено: Александр Ривилис от 06-08-2019, 11:42:20
Brayan,
Ничего не понял. Это имеет какое-то отношение к данной теме про SendStringToExecute или Command??? Если нет, то создай отдельную тему. Если да, то объясни подробнее.
Название: Re: Как при выборе объектов задать ключевое слово
Отправлено: Brayan от 06-08-2019, 11:53:54
Это имеет какое-то отношение
Видимо только то, что речь тоже о командной строке)
Название: Re: Как при выборе объектов задать ключевое слово
Отправлено: Александр Ривилис от 06-08-2019, 11:55:54
Понятно. Тему разделил. Если я правильно понял, то на первый вопрос ответ здесь: https://adn-cis.org/kak-zavershit-editor.getselection-pri-vyibore-klyuchevogo-slova.html
Название: Re: Как при выборе объектов задать ключевое слово
Отправлено: Brayan от 06-08-2019, 12:29:32
Тему разделил
Спасибо
Если я правильно понял, то на первый вопрос ответ здесь
Возможно, но ничего не понятно)
вот на это pso_KeywordInput ругается, что это и откуда взялось?
В какой момент должно появиться сообщение в командной строке?
Как-то проще диалог сделать( Но хочется чтоб всё красиво было
Название: Re: Как при выборе объектов задать ключевое слово
Отправлено: Александр Ривилис от 06-08-2019, 13:04:43
Так будет понятнее:

Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7.  
  8. // This line is not mandatory, but improves loading performances
  9. [assembly: CommandClass(typeof(Rivilis.GetSelKwords))]
  10.  
  11. namespace Rivilis
  12. {
  13.  
  14.   public class GetSelKwords
  15.   {
  16.     [CommandMethod("GetSel")]
  17.     public void GetSelHandler()
  18.     {
  19.       // Put your command code here
  20.       Document doc = Application.DocumentManager.MdiActiveDocument;
  21.       if (doc == null) return;
  22.       Editor ed = doc.Editor;
  23.       PromptSelectionResult psr = null;
  24.       double radius = 50; // Ну какое-нибудь начальное значение
  25.       while (true)
  26.       {
  27.         // Создаём объект для настройки выбора примитивов
  28.         PromptSelectionOptions pso = new PromptSelectionOptions();
  29.         // Добавим ключевое слово
  30.         pso.Keywords.Add("Радиус");
  31.  
  32.         // Установим наши подсказки чтобы они включали ключевые слова
  33.         string kws = pso.Keywords.GetDisplayString(true);
  34.         pso.MessageForAdding =
  35.                     "\nСОПРЯЖЕНИЕ Выберите объекты или " + kws;
  36.         pso.MessageForRemoval =
  37.                 "\nСОПРЯЖЕНИЕ Удалите объекты или " + kws;
  38.  
  39.         // Устанавливаем обработчик события ввода ключевого слова
  40.         pso.KeywordInput +=
  41.                new SelectionTextInputEventHandler(pso_KeywordInput);
  42.  
  43.         try
  44.         {
  45.           psr = ed.GetSelection(pso);
  46.  
  47.           if (psr.Status == PromptStatus.OK)
  48.           {
  49.             // Тут ваша логика обработки - выбраны объекты
  50.             break;
  51.           }
  52.         }
  53.         catch (System.Exception ex)
  54.         {
  55.           Autodesk.AutoCAD.Runtime.Exception aex = ex as Autodesk.AutoCAD.Runtime.Exception;
  56.           if (aex != null && aex.ErrorStatus == Autodesk.AutoCAD.Runtime.ErrorStatus.OK)
  57.           {
  58.             // Пользователь ввел ключевое слово.
  59.             PromptDistanceOptions pdo = new PromptDistanceOptions("\nУкажите радиус ");
  60.             pdo.DefaultValue = radius;
  61.             pdo.UseDefaultValue = true;
  62.             // Обязательно вводим значение
  63.             pdo.AllowZero = false; pdo.AllowNone = false;
  64.             PromptDoubleResult rsDbl =  ed.GetDistance(pdo);
  65.             if (rsDbl.Status == PromptStatus.OK)
  66.             {
  67.               radius = rsDbl.Value;
  68.             }
  69.  
  70.           }
  71.           else
  72.           {
  73.             // другое исключение - обработайте его!
  74.             ed.WriteMessage("\n{0}", ex.Message);
  75.             return;
  76.           }
  77.         }
  78.  
  79.       }
  80.     }
  81.     void pso_KeywordInput(object sender, SelectionTextInputEventArgs e)
  82.     {
  83.       // Пользователь выбрал ключевое слово - сгенерируем исключение
  84.       throw new Autodesk.AutoCAD.Runtime.Exception(
  85.                   Autodesk.AutoCAD.Runtime.ErrorStatus.OK, e.Input);
  86.     }
  87.   }
  88. }

Название: Re: Как при выборе объектов задать ключевое слово
Отправлено: Brayan от 06-08-2019, 13:16:58
Спасибо, огромное, попробую теперь разобраться
Название: Re: Как при выборе объектов задать ключевое слово
Отправлено: Александр Ривилис от 06-08-2019, 13:26:46
И второй вариант по итогу выполнения "Удалить выбранные объекты  [Да/Нет] ? <Нет>:Н ".
А с этим совсем просто через Editor.GetKeywords