Функции контроля ввода пользователя

Функция acedInitGet () имеет два параметра: val и kwl. Val параметр определяет один или большее количество служебных битов, которые позволяют или отключают некоторые входные значения к следующему acedGetxxx () запрос. Kwl (для списка ключевого слова) параметр может определить ключевые слова, которые функции acedGetxxx (), acedEntSel (), acedNEntSelP (), acedNEntSel (), или acedDragGen () признают.

ОБРАТИТЕ ВНИМАНИЕ На служебные биты, и ключевые слова, установленные acedInitGet () применяются только к следующему запросу функции ввода пользователя. Они отвергнуты немедленно позже. Приложение не должно назвать acedInitGet () вторым разом, чтобы очистить любые специальные условия.

Входные Опции для Функций Ввода пользователя

Следующая таблица суммирует служебные биты, которые могут быть определены val параметром. Чтобы устанавливать больше чем одно условие одновременно, добавьте значения вместе, чтобы создать значение val между 0 и 127. Если val установлен на нуль, ни один из условий контроля не обращается к следующему запросу функции ввода пользователя.

ОБРАТИТЕ ВНИМАНИЕ На будущие версии AutoCAD, или ObjectARX может определять дополнительный acedInitGet () служебные биты, так что Вы должны избежать устанавливать любые биты, что не показывается в таблице или описано в этой секции.

Входные опции, установленные acedInitGet ()

Код

Бит

Описание Значения

RSG_NONULL

1

Отвергают нулевой{*пустой*} ввод

RSG_NOZERO

2

Отвергают нулевые значения

RSG_NONEG

4

Отвергают отрицательные значения

RSG_NOLIM

8

Не проверяют пределы рисунка, даже если LIMCHECK включен

RSG_DASH

32

Пунктирные линии Использования при рисунке резиновой полосы выравнивают или поле

RSG_2D

64

Игнорируют координату Z трехмерных точек (acedGetDist () только)

RSG_OTHER

128

Позволяют произвольный ввод — вводит ли пользователь

Следующая выборка программы показывает использование acedInitGet() чтобы основать запрос к acedGetInt () функция.

НЕ нашли? Не то? Что вы ищете?

int age;

acedInitGet(RSG_NONULL | RSG_NOZERO | RSG_NONEG, NULL);

acedGetInt("How old are you? ", &age);

Эта последовательность спрашивает возраст пользователя. AutoCAD автоматически отображает сообщение об ошибках и повторяет подсказку, если пользователь пробует вводить отрицательное или нулевое значение, нажмите ENTER только, или введите ключевое слово. (Сам AutoCAD отклоняет попытки ввести значение, которое - не целое число.)

Опция RSG_OTHER позволяет следующему запросу функции ввода пользователя принять произвольный ввод. Если RSG_OTHER установлен, и пользователь вводит непризнанное значение, acedGetxxx () функциональные возвращения RTKWORD, и ввод могут быть восстановлены{*отысканы*} запросом к acedGetInput (). Поскольку конечный пользователь пространств{*пробелов*} вводит также, как ВВОДЯТ, делает, произвольный ввод никогда не содержит пространство{*пробел*}. Опция RSG_OTHER имеет самый низкий приоритет всех опций, перечисленных в предшествующей таблице; если acedInitGet () запрос отверг отрицательные числа{*номера*} с RSG_NONEG, например, AutoCAD все еще отклоняет их.

Следующий код позволяет произвольный ввод (проверка ошибок минимальна).

int age, rc;

char userstring[511];

acedInitGet(RSG_NONULL | RSG_NOZERO | RSG_NONEG | RSG_OTHER, "Mine Yours");

if ((rc = acedGetInt("How old are you? ", &age)) == RTKWORD) {

// Keyword or arbitrary input

acedGetInput(userstring);

}

В этом примере, acedGetInt () возвращает значения, показанные в следующей таблице, в зависимости от ввода пользователя.

Произвольный ввод пользователя

Ввода пользователя

Результат

41

AcedGetInt () возвращает RTNORM и устанавливает возраст в 41

m

AcedGetInt () возвращает RTKWORD, и acedGetInput () возвращает “Источник”

y

AcedGetInt () возвращает RTKWORD, и acedGetInput () “Ваши” возвращения

Двадцать

AcedGetInt () возвращает RTKWORD, и acedGetInput () возвращается “двадцать”

Какой???

AcedGetInt () возвращает RTKWORD, и acedGetInput () возвращения “ какой??? ”

-10

AutoCAD отклоняет этот ввод и восстанавливает изображение подсказки, поскольку RSG_NONEG установлен (другие разрядные коды имеют приоритет по RSG_OTHER)

-34.5

AcedGetInt () возвращает RTKWORD, и acedGetInput () возвращается ", “-34.5" AutoCAD не отклоняет это значение, потому что это ожидает целое число, не реальное значение (если бы бы это было acedGetReal () запрос, AutoCAD принял бы отрицательное целое число как произвольный ввод, но отклонил бы отрицательное реальное значение)

ОБРАТИТЕ ВНИМАНИЕ На acedDragGen () функция указала бы произвольный ввод (если этому позволил предшествующий acedInitGet () запрос) возвращая RTSTR вместо RTKWORD.

Спецификации Ключевого слова

Необязательный kwl параметр определяет список ключевых слов, которые будут признаны следующим вводом пользователя (acedGetxxx ()) функциональный запрос. Значение ключевого слова, которое пользователь вводит, может быть восстановлено{*отыскано*} последующим запросом к acedGetInput () (. Значение ключевого слова было бы доступно, если функция ввода пользователя была acedGetKword ().) значения ключевых слов и действия, чтобы исполнить для каждого - ответственность ObjectARX-приложения.

AcedGetInput () функция всегда возвращает ключевое слово, поскольку это появляется в kwl параметре, с тем же самым преобразованием букв в прописные (но не с необязательными символами, если те определены после запятой). Независимо от того, как пользователь вводит ключевое слово, приложение должно делать только одно строковое сравнение, чтобы идентифицировать это, как демонстрируется в следующем примере. Доля кода, которая следует за показами запрос к acedGetReal () предшеств запросом к acedInitGet () который определяет два ключевых слова. Приложение проверяет эти ключевые слова и устанавливает входное значение соответственно.

int stat;

ads_real x, pi = 3.14159265;

char kw[20];

// Null input is not allowed.

acedInitGet(RSG_NONULL, "Pi Two-pi");

if ((stat = acedGetReal("Pi/Two-pi/<number>: ", &x)) < 0) {

if (stat == RTKWORD && acedGetInput(kw) == RTNORM) {

if (strcmp(kw, "Pi") == 0) {

x = pi;

stat = RTNORM;

} else if (strcmp(kw, "Two-pi") == 0) {

x = pi * 2;

stat = RTNORM;

}

}

}

if (stat!= RTNORM)

acutPrintf("Error on acedGetReal() input.\n");

else

acutPrintf("You entered %f\n", x);

Запрос к acedInitGet () предотвращает пустой указатель, вводят, и определяет два ключевых слова: “Pi” и “Два - pi”. Когда acedGetReal () вызван{*назван*}, пользователь отвечает на подсказку Pi/Two-pi / <номеру>, вводя или реальное значение (сохраненный в местной переменной x) или одном из ключевых слов. Если пользователь вводит ключевое слово, acedGetReal () возвращает RTKWORD. Приложение отыскивает ключевое слово, вызывая acedGetInput () (обратите внимание, что это проверяет{*отмечает*} состояние ошибки этой функции), и затем устанавливает значение x к pi или 2pi, в зависимости от которого ключевое слово было введено. В этом примере, пользователь может вводить или p, чтобы выбрать pi или t, чтобы выбрать 2pi.

Графическое перемещение Наборов Выбора

Функция acedDragGen () запрашивает пользователя перетаскивать группу отобранных объектов, как показано в следующем примере:

int rc;

ads_name ssname;

ads_point return_pt;

// Prompt the user for a general entity selection.

if (acedSSGet(NULL, NULL, NULL, NULL, ssname) == RTNORM)

// The newly selected entities

rc = acedDragGen(ssname,

"Drag selected objects", // Prompt

0, // Display normal cursor (crosshairs)

dragsample, // Transformation function

return_pt); // Set to the specified location.

Четвертый параметр указывает на функцию, которая делает преобразование примитива. См. “ Преобразование Наборов Выбора ” на странице 211 для примеров dragsample () и acedDragGen ().

Прерывания от пользователя

Функции ввода пользователя и acedCommand (), acedCmd (), acedEntSel (), acedNEntSelP (), acedNEntSel (), acedDragGen (), и acedSSGet () функции возвращают RTCAN, если пользователь AutoCAD отвечает, нажимая ESC. Внешняя функция должна обращаться с этим ответом как запрос отмены задания и возвращение немедленно.

ObjectARX также обеспечивает функцию, acedUsrBrk (), это явно проверяет{*отмечает*}, нажал ли пользователь ESC. Эта функция позволяет приложениям ObjectARX проверить прерывание пользователя.

Приложение не должно вызвать acedUsrBrk () если это не исполняет длинное вычисление между взаимодействиями с пользователем. Функция acedUsrBrk () никогда не должна использоваться как замена{*заместитель*} проверки значения, возвращенного функциями ввода пользователя, которые могут возвращать RTCAN.

В некоторых случаях, приложение будет хотеть игнорировать запрос отмены пользователя. Если дело обстоит так, это вызвало acedUsrBrk () чтобы очистить запрос; иначе, ESC будет все еще невыполненный{*выдающийся*} и вызовет следующий запрос ввода пользователя терпеть неудачу. (Если приложение игнорирует ESC, это должно печатать сообщение, чтобы сообщить пользователю, которого это делает так.) Всякий раз, когда ObjectARX-приложение вызвано, условие ESC автоматически очищено.

Например, следующий кодовый фрагмент терпит неудачу, если пользователь вводит ESC в подсказку.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132