Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Дисциплины:
2021-06-30 | 68 |
5.00
из
|
Заказать работу |
|
|
Эти функции дают возможность пользователю вводить данные в интерактивном режиме. К основным функциям ввода данных и указания объектов относятся следующие:
· (initget [<флаг>] [<строка>]) - задание ключевых слов и ограничений ввода для функций getint, getreal, getdist, getangle, getorient, getpoint, getcorner, getkword entsel, nentsel и nentselp;
· (getkword [запрос]) - ввод ключевого слова;
· (getint [запрос]) - ввод целого числа в диапазоне от -32768 до +32767;
· (getreal [запрос]) - ввод вещественного числа;
· (getdist [<точка1>] [запрос]) - получение расстояния (как вещественного числа) с помощью ввода числа (на клавиатуре в текущей форме линейных единиц) или указания двух точек (мышью или в координатах на клавиатуре), если не задан аргумент <точка1>; если задана точка с помощью аргумента <точка1>, то расстояние можно получить с помощью ввода числа (на клавиатуре) или указания одной точки, до которой расстояние будет вычисляться от точки, заданной аргументом <точка1>;
· (getangle [<точка1>] [запрос]) - получение угла (как вещественного числа в радианах) с помощью ввода числа (на клавиатуре в текущей форме угловых единиц) или указания двух точек (мышью или в координатах на клавиатуре), если не задан аргумент <точка1>; если задан аргумент <точка1>, то угол можно получить с помощью ввода числа (на клавиатуре в радианах) или указания одной точки, до которой расстояние будет вычисляться от точки, заданной аргументом <точка1>; при вводе угла с помощью числа он принимается с учетом значения системных переменных ANGBASE и ANGDIR; возвращаемое значение учитывает значение ANGBASE и игнорирует значение ANGDIR;
· (getorient [<точка1>] [запрос]) - получение угла как в функции getangle, однако возвращаемое значение не учитывает значений ANGBASE и ANGDIR (т. е. как будто ANGBASE=0, ANGDIR=0);
|
· (getpoint [<точка1>] [запрос]) - ввод точки с помощью клавиату-ры или мыши; если задан аргумент <точка1>, то при вводе точки с помощью мыши рисуется резиновая нить, начинающаяся в точке, заданной аргументом <точка1>;
· (getcorner <точка1> [запрос]) - ввод точки с помощью клавиатуры или мыши; при вводе точки с помощью мыши рисуется резиновая рамка, начинающаяся в точке, заданной аргументом <точка1>;
· (getstring [<флаг>] [<запрос>]) - ввод строки; если задан аргумент <флаг> и он отличен от nil, то в строке, вводимой пользователем, допускаются пробелы (признаком конца является <Enter>); если аргумент <флаг> отсутствует или задан равным nil, то признаком конца строки является пробел или <Enter>;
· (getvar <имя>) - чтение текущего значения системной переменной с наименованием, заданным аргументом <имя>;
· (getenv <имя>) - чтение текущего значения переменной окружения с наименованием, заданным аргументом <имя>;
· (getcfg <строка>) - извлечение данных приложения из раздела AppData файла acad.cfg; строка, заданная аргументом <строка>, должна иметь вид "АррDаtа/имя_приложения/имя_раздела/... /имя_параметра";
· (getcname <имя>) - получение имени команды в локализованной или английской версии AutoCAD;
· (getfiled <заголовок><имя><расширение><флаг> - вызов диалогового окна поиска файла. Аргумент <заголовок> используется как заголовок диалогового окна; аргумент <имя> - это имя искомого файла или папки, с которой предлагается начать поиск; аргумент <расширение> - расширение искомого файла (<расширение>, равное "", заменяется на "*"); аргумент <флаг> - опции функции (см. ниже).
Вызов функции initget должен предшествовать в программе обращению к функциям getint, getreal, getdist, getangle, getorient, getpoint, getcorner, getkword, entsel, nentsel и nentselp, поскольку устанавливает в этих функциях ограничения на ввод пользователем данных. В частности, initget может сохранять за пользователем возможность нажатия клавиши <Enter> вместо ввода данных (например, для выбора значения по умолчанию), а может и не сохранять. Аргумент <флаг> функции initget - это битовый флаг, который должен быть целым числом (от 0 до 255), являющимся суммой битов с соответствующими каждому из них весовыми значениями (нумеруются по степеням числа 2). Биты описываются в табл. 3.3. Если бит не установлен, то его значение в битовом флаге считается равным нулю.
|
Таблица 3.3. Значения битов функции initget | |
Бит | Назначение |
1 | Не разрешает пустой ввод (пустой ввод- это нажатие только клавиши <Enter>) |
2 | Не разрешает ввод нуля |
4 | Не разрешает ввод отрицательных чисел |
8 | Разрешает указание точек за пределами лимитов, несмотря на значение системной переменной LIMCHECK |
16 | Данный бит не задействован |
32 | Заставляет AutoCAD использовать штриховую линию вместо сплошной для резиновой нити и резиновой рамки; если значение системной переменной POPUPS равно нулю, то AutoCAD игнорирует данный бит |
64 | Запрещает ввод третьей координаты для точки в функции getdist |
128 | Разрешает произвольный ввод в качестве ключевого слова; преобладает над другими битами и ключевыми словами; в частности, данный бит позволяет игнорировать значение бита 1 |
Примеры использования битового флага:
· (initget 1) - не разрешен пустой ввод;
· (initget 3) - не разрешены пустой ввод и ввод нуля (3=1+2);
· (initget 7) - не разрешены пустой ввод, ввод нуля и ввод отрицательных чисел (7=1+2+4);
· (initget 6) - разрешен пустой ввод, но не разрешены ввод нуля и ввод отрицательных чисел (6=2+4).
Аргумент <строка> функции initget - это строка, ограниченная двойными кавычками с двух сторон, которая задает ключевые слова, являющиеся допустимыми вариантами ввода. В аргументе <строка> различные варианты ключевых слов разделяются одним или большим количеством пробелов, например: "А Б В Г Д". Если пользователю при выборе ключевого слова разрешаются сокращенные варианты, тогда обязательная часть ключевого слова и аргументе <строка> должна быть указана в верхнем регистре, например: "ПЕРесечение". В этом случае допустимыми вариантами ввода являются "ПЕР", "пер", "ПЕРЕ", "пере", "перес", "ПЕРЕСЕЧЕН", "ПЕРЕСЕЧЕНИЕ" (после трех обязательных букв может идти любое количество необязательных букв, вплоть до набора полного ключевого слова; при вводе букв верхний и нижний регистры равноправны); недопустимыми вариантами будут "П", "ПЕ", "п", "пе".
|
Возможны случаи, когда вариант сокращенного ввода начинается не с первой буквы ключевого слова, например:
(initget "выход") - здесь допустимыми вариантами ввода будут "х", "хо", "ход" или "выход", "вых", "выхо".
Если ключевое слово в аргументе <строка> указано только в верхнем или только в нижнем регистре, то рядом через запятую можно указать сокращенный вариант: "КРАСНЫЙ, КР" - равносильно записи "красный".
В локализованных версиях системы AutoCAD в аргументе <строка> могут присутствовать варианты ввода для локализованной и английской версий. Тогда в начале должны идти локализованные ключевые слова, а затем их английские аналоги с символом подчеркивания. Количество локализованных ключевых слов должно равняться количеству английских ключевых слов. Например: "прямой криволинейный _straight curved".
Сама функция initget всегда возвращает nil. Однако за ней (не обязательно в следующей строке) должна идти функция, для которой функция initget установила ограничения ввода. В качестве возвращаемого значения эта функция (например, getreal) выдает допустимое значение, указанное пользователем, а в случае ввода сокращенного варианта ключевого слова - полный вариант ключевого слова.
Пример 1 использования функции getint
(initget 6) (setq numb (getint "Введите номер участка (<1>): "))В этом примере сначала устанавливаются ограничения на будущий ввод целого числа (не допускаются ноль и отрицательные числа). Допускается пустой ввод. Функция getint выводит на экран запрос "Введите номер участка (<1>): ". Ее возвращаемым значением будет nil, если пользователь ответит простым нажатием клавиши <Enter>, или введенное пользователем допустимое целое число (например, 17). В случае ввода пользователем недопустимого целого числа (например, 0 или -2) функция getint выведет сообщение об ошибочном значении и будет ожидать допустимого варианта ввода.
В программе, приведенной выше, далее должна быть предусмотрена обработка пустого ввода для того, чтобы в этом случае присвоить переменной numb значение по умолчанию (1): (if (not numb) (setq numb 1))
|
Пример 2 использования функции getint
(initget 6 "Левый Правый Нижний Верхний") (setq numb (getint "Введите номер участка (<1>) или [Левый/Правый/Нижний/ Верхний]: "))В этом примере устанавливаются ограничения на будущий ввод целого числа (не допускаются ноль и отрицательные числа), однако допускаются пустой ввод и ввод одного из четырех ключевых слов. Далее в программе должен идти анализ значения переменной numb на nil, на положительное целое число и на ключевые слова ("левый", "правый", "нижний", "верхний").
Пример использования функции getkword
(initget 1 "Да Нет") (setq reply (getkword "Продолжить цикл [Да/Нет]: "))В этом примере переменной reply присваивается значение "да" или "нет", пустой ввод не допускается (хотя можно было бы разрешить пустой ввод и далее использовать его для выбора значения по умолчанию).
Поскольку не все биты функции initget используются со всеми функциями ввода данных, то в табл. 3.4 разбираются варианты применения (в случае возможности использования ставится плюс).
Таблица 3.4. Варианты применения битовых флагов | |||||||
Функция | Бит1 | Бит 2 | Бит 4 | Бит8 | Бит 32 | Бит 64 | Бит 128 |
getint | + | + | + | + | |||
getreal | + | + | + | + | |||
getdist | + | + | + | + | + | + | |
getangle | + | + | + | + | |||
getorient | + | + | + | + | |||
getpoint | + | + | + | + | |||
getcorner | + | + | + | + | |||
getkword | + | + |
Функции entsel, nentsel и nentselp не используют биты функции initget и управляются только ключевыми словами.
Функция getstring не использует ни биты, ни ключевые слова функции initget.
Функции getvar и getenv позволяют прочитать значения, соответственно, системных переменных AutoCAD и переменных окружения.
Примеры:
· (getvar "CECOLOR") - возвращает значение системной переменной "CECOLOR";
· (getvar "PDMODE") - возвращает значение системной переменной "PDMODE";
· (getenv "CONFIG") - возвращает значение переменной окружения "CONFIG".
Функция getfiled позволяет вызвать диалоговое окно выбора файла в удобном виде.
Пример:
(getfiled "Выберите файл данных для расчета" "d: \\Tests\\AuroLISP\\Fields" "rtf" l6) - вызывает окно, приведенное на рис. 3.3:
Рис. 3.3. Диалоговое окно, вызываемое функцией getfiled
Второй аргумент функции getfiled, в зависимости от значения четвертого аргумента (<флаг>), может задавать либо имя файла по умолчанию, либо папку, с которой предлагается начать поиск. Битовый флаг, задаваемый аргументом <флаг> получается как сумма тех битов, нумеруемых степенями числа 2, которые будут установлены. Описание битов приведено в табл. 3.5:
Таблица 3.5. Значения битов функции getfiled | |
Бит | Значение |
1 | Подсказка имени при создании нового файла (нельзя использовать для выбора существующего файла) |
2 | Не используется |
4 | Разрешает вводить имя файла с любым расширением (или без расширения) |
8 | Если бит 1 не установлен, то система AutoCAD выполняет поиск файла, имя которого задано в аргументе <имя> по списку путей, заданных в настройке, причем getfiled возвращает имя файла без пути; в противном случае возвращается полное имя файла (с путем) |
16 | Аргумент <имя> трактуется как имя папки, в которой нужно искать файл; при этом в поле Имя файла: (File name:) ничего не вписывается по умолчанию (см. рис.3.4); аналогичный эффект достигается и в том случае, если аргумент <имя> заканчивается обратной косой чертой |
32 | Если установлен бит 1, то не будет выводиться предупреждающее сообщение при записи поверх существующего файла |
64 | Не передает файл, если в качестве имени задан URL-адрес |
128 | Не допускается использование URL-адресов |
С функциями getvar и getenv тесно связаны функции, выполняющие обратные операции:
|
· (setvar <имя><значение>) - установка значения системной переменной с наименованием, заданным аргументом <имя>;
· (setenv <имя><значение>) - установка значения переменной окружения с наименованием, заданным аргументом <имя>.
В обеих функциях аргументы <имя> и <значение> должны быть текстовыми строками.
Функция setcfg является обратной по отношению к функции getcfg:
(setcfg <имя><значение>) - запись данных приложения в раздел AppData файла acad.cfg; аргумент <имя> должен иметь вид "AppData/ имя_приложения/имя_раздела/... /имя_параметра" (до 496 символов длиной); возвращаемое значение функции setcfg - аргумент <значение> или nil (в случае ошибки).
Функции доступа к файлам
В данном разделе рассматриваются функции, выполняющие операции с файлами (поиск, открытие и закрытие), операции чтения и записи строк или символов в файл, а также вывода на экран различных сообщений:
· (findfile <файл>) - поиск файла по имени (краткому или полному) или поиск папки по полному имени; если аргумент не содержит полного пути, то поиск выполняется по стандартным путям поиска файлов для системы AutoCAD; возвращается полное имя файла (папки), если он найден, или nil в противном случае;
· (open <файл><режим>) - открытие файла с именем, заданным аргументом <файл>; аргумент <режим> - это строка из одного символа, определяющего режим, в котором открывается файл ("w" или "W" - запись, "а" или "А" - дополнение, "г" или "R" - чтение); в предыдущих версиях AutoLISP не допускалось указание режима в верхнем регистре; если аргумент <файл> указывает на несуществующий файл в режимах "w", "W", "а" и "А", то он создается; возвращаемое значение - дескриптор файла (при успешном открытии) или nil (при неудаче);
· (close <дескриптор>) - закрытие файла; единственным аргументом является <дескриптор> - переменная, создаваемая функцией open и управляющая процессами записи и чтения: функция close возвращает nil, если указан действительный дескриптор, или сообщение об ошибке;
· (read-line [<дескриптор>]) - чтение строки из файла с заданным дескриптором; если аргумент <дескриптор> опущен, то выполняется чтение строки с клавиатуры (строка должна закончиться нажатием клавиши <Enter>);
· (write-line <строка> [<дескриптор>]) - запись строки, заданной аргументом <строка> в файл с заданным дескриптором; если аргумент <дескриптор> опущен или равен nil, то система AutoCAD выводит строку на экран; при записи строка, заданная аргументом <строка>, заносится в файл (или на экран) без ограничивающих ее двойных кавычек;
· (princ [<аргумент> [<дескриптор>]]) - запись аргумента, который может быть любым выражением AutoLISP (а также числом, списком, строкой, именем примитива и т. д.), в файл с заданным дескриптором. Если аргумент <дескриптор> опущен или равен nil, то <аргумент> выводится на экран. Если <аргумент> - строка, то при записи она заносится в файл (или на экран) без ограничивающих ее двойных кавычек. Если опущены оба аргумента, то функция осуществляет так называемый тихий выход, т. е. не возвращает никакого значения, в том числе nil;
· (prinl<аргумент> [<дескриптор>] ]) - функция аналогична princ, но если <аргумент> - строка, то при записи она заносится в файл (или на экран) с ограничивающими двойными кавычками; специальные символы (обратная косая черта, кавычки, конец строки и т. п.) предваряются обратной косой чертой; если опущены оба аргумента, то функция prinl тоже осуществляет тихий выход;
· (print [<аргумент> [<дескриптор>]]) - функция аналогична prini, но при выводе добавляет перед аргументом символ конца строки предыдущей записи, а после аргумента - пробел; тоже может осуществлять тихий выход;
· (read-char [<дескриптор>]) - чтение символа из файла. Если аргумент не задан, то производится чтение символа из буфера клавиатуры. Возвращает код прочитанного символа (аналогично функции ascii); нажатие на клавишу <Enter> возвращает код 10;
· (write-char <код> [<дескриптор>]) - запись символа с заданным кодом в файл; если аргумент не задан, то вывод символа на экран; возвращает код символа; невозможно с помощью данной функции записать символ с кодом 0;
· (prompt <сообщение>) - вывод сообщения на экран (если используется установка системы AutoCAD на двухэкранный вычислительный комплекс, то на оба экрана; чтобы избежать этого, можно пользоваться для вывода сообщений функцией princ).
Приведенные выше функции AutoLISP дают пользователю возможность работы только с файлами последовательного доступа. Указателем позиции в файле, с которой далее будет происходить чтение (запись), является переменная, в которой хранится дескриптор этого файла. Механизм работы с файлами виден на следующем примере.
Пример использования функций работы с файлами
; Операции записи (setq ff (open "с:\\test.txt" "w")) (write-line "Перваястрока" ff) (write-char 65 ff) (write-char 67 ff) (write-line "Вторая строка" ff) (close ff); Операциичтения(setq ff (open "c:\\test.txt" "r")) (setq s1 (read-char ff)) (setq s2 (read-char ff)) (setq strl (read-line ff)) (setq str2 (read-line ff)) (setq str3 (read-line ff)) (close ff) (setq ff nil)Первое выражение - (setq ff (open "c: \\test.txt" "w")) - создает переменную ff, в которую заносится дескриптор файла c:\test.txt, открываемого для записи (в первом аргументе функции open обратная косая черта удваивается). Затем выражение (write-line "первая строка" ff) заносит в открытый файл первую запись (текст "Первая строка" из 13 символов) и символы с кодами 13 и 10, которые в файлах последовательного доступа разделяют записи.
В операционной системе UNIX признаком конца записи является один символ с кодом 10.
После этого указатель файла показывает на начало второй записи, куда поочередно - с помощью двукратного применения функции write-char - заносятся символы с кодами 65 (буква "А") и 67 ("С"). Затем в продолжение второй записи файла с помощью функции write-line заносится текст "вторая строка" (13 символов) и добавляются символы с кодами 13 и 10, означающие конец второй записи файла. Вслед за этим файл с дескриптором ff закрывается функцией close.
Вторая часть листинга начинается функцией открытия того же файла, но уже в режиме чтения. Затем с помощью двукратного применения функций read-char читаются два первых символа первой записи, которые запоминаются в переменных s1 и s2. После этого в переменную strl читается остаток первой записи. Далее в переменную str2 читается вторая запись файла. Третья операция чтения с помощью функции read-line приносит nil, поскольку в файле c:\test.txt третьей записи нет. По окончании выполнения рассмотренной программы переменная ff очищается (в ней хранился дескриптор файла). Другие переменные получат такие значения:
s1 = 207 (код символа "П"); s2 = 229 (код символа "е"); strl = "рвая строка"; str2 =: "АСВторая строка"; str3 = nil.Функции princ, prini, print и prompt чаще всего используются для вывода сообщений в командную строку системы AutoCAD, причем prini и print выводят сообщения в кавычках (другие особенности описаны выше). Вместо функции write-line для записи в файл можно пользоваться функцией princ, но заносить признак конца записи, который выглядит как "\n", пользователь должен сам. Например:
(princ "Первая запись\n" ff)
|
|
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!