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

ADN Club => AutoCAD .NET API => Тема начата: RevitTormentor от 09-01-2018, 20:12:39

Название: Как работает PromptStatus.None?
Отправлено: RevitTormentor от 09-01-2018, 20:12:39
Раньше не было необходимости, но вот понадобилось
Загружаю форму WPF в ней кнопка Button.Click
По нажатию кнопки например мне необходимо выбрать несколько полилиний и так несколько раз. Esc - отмена - прерывание цикла.
Но, если ничего не выбрано, то тоже произвести какое то действие, например уведомление. Дак вот зайти в AcEd.PromptStatus.None никак не получается. По нажатию кнопки я рамкой выделяю пустую область (ничего не выделяя) или просто жму правую кнопку (у меня правая по умолчанию завершение команды) и жду что выскочит MessageBox.Show("None");. А оно не выскакивает.
В каких то элементах ввода есть AllowNone = true; Может это конечно и не то, но в PromptSelectionOptions и в PromptSelectionResult нет такого.

Код - C# [Выбрать]
  1.        
  2. private void Button_Click(object sender, RoutedEventArgs e)
  3.         {
  4. ...
  5.  
  6.             while (true)
  7.             {
  8.                     SelectionFilter filter = new SelectionFilter(new TypedValue[] { new TypedValue((int)DxfCode.Start, "*POLYLINE") });
  9.                     PromptSelectionOptions opt = new PromptSelectionOptions();
  10.                     opt.MessageForAdding = "Выберите элементы";
  11.                     opt.MessageForRemoval = "Удалите элементы";
  12.                     PromptSelectionResult entRes = SV.acEd.GetSelection(opt, filter);
  13.                     if (entRes.Status == AcEd.PromptStatus.Cancel)
  14.                     {
  15.                         MessageBox.Show("Cancel");
  16.                         break;
  17.                     }
  18.  
  19.                     else if (entRes.Status == AcEd.PromptStatus.OK)
  20.                     {
  21.                         MessageBox.Show("OK");
  22.                     }
  23.                     else if (entRes.Status == AcEd.PromptStatus.None)
  24.                     {
  25.                         MessageBox.Show("None");
  26.                         //break;
  27.                     }
  28.                     //else
  29.                     //{
  30.                     //    break;
  31.                     //}
  32.             }
  33. ...
  34.    
  35.         }

Вопрос: Как Высветить окошко, что при выборе или просто по завершению команды нажатием правой кнопки ничего не выбрано?

Блоки if else местами по порядку уже всяко менял
Название: Re: Как работает PromptStatus.None?
Отправлено: Вильдар от 09-01-2018, 20:46:05
Статус Error можно обработать.
Обычно обрабатывается OK, а в остальных случаях прерывание.
Название: Re: Как работает PromptStatus.None?
Отправлено: RevitTormentor от 09-01-2018, 20:55:57
Статус Error можно обработать.
А вдруг понадобится эта обработка.
None ведь это вроде как Ничего не выбрано. Мне идеально подходит. Но не срабатывает.

В конце кода у меня закомментировано просто else{}. Если туда вставляю всё хорошо.  Но вдруг и просто else{} понадобится. :)
Название: Re: Как работает PromptStatus.None?
Отправлено: Дмитрий Загорулькин от 09-01-2018, 23:52:54
Я так подозреваю, что PromptStatus.None не выдаётся при использовании Editor.GetSelection. Этот же метод выбора, а PromptStatus.None используется в методах пользовательского ввода (GetEntity, GetDouble и т.п.). Они вроде как похожи, но разница между ними большая.
Возможно, достаточно будет просто проверить количество объектов в полученном наборе. Если 0 - то это практически тот самый None...
Название: Re: Как работает PromptStatus.None?
Отправлено: Александр Ривилис от 10-01-2018, 00:00:40
None ведь это вроде как Ничего не выбрано. Мне идеально подходит. Но не срабатывает.
И не сработает. Читай документацию. Причем не по AutoCAD .NET API, а по ObjectARX. Конкретно описание функции acedSSGet, для которой Editor.GetSelection просто обертка. Так вот эта функция никогда не возвращает RTNONE (эквивалент PromptStatus.None)