using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
// This line is not mandatory, but improves loading performances
[assembly: CommandClass(typeof(Rivilis.GetSelKwords))]
namespace Rivilis
{
public class GetSelKwords
{
[CommandMethod("GetSel")]
public void GetSelHandler()
{
// Put your command code here
Document doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null) return;
Editor ed = doc.Editor;
PromptSelectionResult psr = null;
double radius = 50; // Ну какое-нибудь начальное значение
while (true)
{
// Создаём объект для настройки выбора примитивов
PromptSelectionOptions pso = new PromptSelectionOptions();
// Добавим ключевое слово
pso.Keywords.Add("Радиус");
// Установим наши подсказки чтобы они включали ключевые слова
string kws = pso.Keywords.GetDisplayString(true);
pso.MessageForAdding =
"\nСОПРЯЖЕНИЕ Выберите объекты или " + kws;
pso.MessageForRemoval =
"\nСОПРЯЖЕНИЕ Удалите объекты или " + kws;
// Устанавливаем обработчик события ввода ключевого слова
pso.KeywordInput +=
new SelectionTextInputEventHandler(pso_KeywordInput);
try
{
psr = ed.GetSelection(pso);
if (psr.Status == PromptStatus.OK)
{
// Тут ваша логика обработки - выбраны объекты
break;
}
}
catch (System.Exception ex)
{
Autodesk.AutoCAD.Runtime.Exception aex = ex as Autodesk.AutoCAD.Runtime.Exception;
if (aex != null && aex.ErrorStatus == Autodesk.AutoCAD.Runtime.ErrorStatus.OK)
{
// Пользователь ввел ключевое слово.
PromptDistanceOptions pdo = new PromptDistanceOptions("\nУкажите радиус ");
pdo.DefaultValue = radius;
pdo.UseDefaultValue = true;
// Обязательно вводим значение
pdo.AllowZero = false; pdo.AllowNone = false;
PromptDoubleResult rsDbl = ed.GetDistance(pdo);
if (rsDbl.Status == PromptStatus.OK)
{
radius = rsDbl.Value;
}
}
else
{
// другое исключение - обработайте его!
ed.WriteMessage("\n{0}", ex.Message);
return;
}
}
}
}
void pso_KeywordInput(object sender, SelectionTextInputEventArgs e)
{
// Пользователь выбрал ключевое слово - сгенерируем исключение
throw new Autodesk.AutoCAD.Runtime.Exception(
Autodesk.AutoCAD.Runtime.ErrorStatus.OK, e.Input);
}
}
}