Как при выборе объектов задать ключевое слово

Автор Тема: Как при выборе объектов задать ключевое слово  (Прочитано 8219 раз)

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

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Товарищи, помогите найти пример кода, когда в командную строку выдаются опции по типу "СОПРЯЖЕНИЕ Выберите объекты или [Радиус] ", так чтоб можно было переназначить этот радиус. И второй вариант по итогу выполнения "Удалить выбранные объекты  [Да/Нет] ? <Нет>:Н ". То ли неправильно как-то поисковые запросы ввожу на английском, никак не могу нагуглить.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Brayan,
Ничего не понял. Это имеет какое-то отношение к данной теме про SendStringToExecute или Command??? Если нет, то создай отдельную тему. Если да, то объясни подробнее.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Это имеет какое-то отношение
Видимо только то, что речь тоже о командной строке)

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Понятно. Тему разделил. Если я правильно понял, то на первый вопрос ответ здесь: https://adn-cis.org/kak-zavershit-editor.getselection-pri-vyibore-klyuchevogo-slova.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Тему разделил
Спасибо
Если я правильно понял, то на первый вопрос ответ здесь
Возможно, но ничего не понятно)
вот на это pso_KeywordInput ругается, что это и откуда взялось?
В какой момент должно появиться сообщение в командной строке?
Как-то проще диалог сделать( Но хочется чтоб всё красиво было

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Так будет понятнее:

Код - 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. }

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

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Спасибо, огромное, попробую теперь разобраться

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
И второй вариант по итогу выполнения "Удалить выбранные объекты  [Да/Нет] ? <Нет>:Н ".
А с этим совсем просто через Editor.GetKeywords
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение