3. ОСНОВЫ ГРАФИЧЕСКОГО ЯЗЫКА АВТОЛИСП .Часть 2. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3.3.4. Функции для работы с числами Для вычислений и действий над целыми и действительными числами в Автолиспе предусмотрено значительное количество функций, которые сведены в табл. 6. Таблица 6 Описание функций, применяемых в Автокаде для работы с числами
Функции +, -, *, /, LOGAND, LOGIOR могут иметь больше двух аргументов. Для функции вычитания первый аргумент обозначает уменьшаемое, остальные вычитаемые, у функции деления / первый аргумент - делимое, остальные – делитель. Функции возведения в степень EXPT и логическая функция сдвига LSH должны иметь два аргумента. Функции ABS, SIN, COS, ATAN, SQRT, EXP, LOG имеют по одному аргументу. Тип результата функции зависит от функции и типов аргументов. Для SIN, COS, ATAN, SQRT, EXP, LOG результат всегда является действительным числом. Арифметические функции возвращают разные по типу значения в зависимости от типа аргументов функции. Например, если все аргументы целые числа (integer), то результат будет также целым. Однако, если один или все аргументы являются действительными числами, функция возвращает действительное (real) число. Например: (/ 14 4) ® 3; (/ 14 4.) ® 3.5. Несмотря на то, что Автолисп для внутренних вычислений использует 32–разрядные значения, обмен значениями с Автокадом выполняется 16-разрядными числами. Поэтому предел целых чисел составляет +32767 и – 32768. В последних версиях Автокада пределы целых чисел установлены от -2147483647 до - +2147483647. Если необходимо использовать числа за указанными пределами, то целые числа можно превратить в 32-разрядные действительные с помощью функции FLOAT. Например: (SETQ D(FLOAT (* 4 25000))) ® 100000.0 Функция (BOOLE <код булевой функции> <целое число1> <целое число2> ...) является универсальной булевой функцией, выполняет побитно заданную функцию аргументом <код булевой функции> над аргументами <целое число1 целое число2…> . Функция BOOLE возвращает результат в виде десятичного целого числа. Аргумент <булева функция> принимает значения от 0 до 15, что соответствует одной из 16 возможных булевых функций. Последующие аргументы логически связаны с функцией и таблицей истинности булевых функций двух переменных (табл. 7). В табл. 7 X1, X2 являются двоичными значениями аргументов <целое число1>, <целое число2>; Y i – двоичный результат i -й функции. Таблица 7 Логические функции двух переменных X1, X2
Например: (BOOLE 0 3 3) ® 0; (BOOLE 1 3 1) ® 1; (BOOLE 1 12 5) ® 4 (BOOLE 6 6 5) ® 3; (BOOLE 4 3 14) ® 12; (BOOLE 15 5 5) ® -1. 3.3.5. Функции проверки условий Функции ATOM, BOUNDP, EQ, EQUAL, LISTP, MINUSP, NULL, NUMBERP, ZEROP служат для проверки различных условий. Функция (ATOM <элемент>), если аргумент <элемент> является атомом, возвращает Т, иначе – NIL.
Функция (BOUNDP <атом>), если аргумент <атом> не NIL, возвращает Т, иначе - NIL.
Функция (EQ <выражение1> <выражение2>), если оба аргумента идентичны, возвращает T, иначе - NIL. Функцию можно использовать для сравнения двух списков.
Списки считаются идентичными, если они связаны друг с другом через SETQ, и в этом случае функция возвращает Т. Если два списка идентичны (EQ), то они всегда равны (EQUAL), однако, если же два списка равны, то они необязательно идентичны. Функция (EQUAL <выражение1> <выражение2> [<допуск>]), если оба выражения равны между собой возвращает Т, иначе NIL. Аргумент [<допуск>] задает точность сравнения.
Функция (LISTP <элемент>), если аргумент <элемент> является списком, возвращает Т, иначе – NIL Например : (LISTP '(A B C)) ® T; (LISTP 6.5) ® NIL; (LISTP 'ACAD) ® NIL; (LISTP NIL) ® T. Так как NIL является одновременно атомом и списком, то функция LISTP возвращает T, когда ее аргумент является NIL. Функция (NULL <атом>), если аргумент <атом> имеет значение NIL, возвращает Т, иначе - NIL.
Функция (NUMBERP < атом >), если аргумент < атом > является числом, возвращает Т, иначе - NIL.
Функция (MINUSP <число>), если аргумент является отрицательным числом, возвращает T, иначе – NIL. Например : (MINUSP -1) ® T; (MINUSP -4.25) ® T; (MINUSP 830.) ® NIL. Функция (ZEROP <число>) возвращает Т, если аргумент равен нулю, иначе – NIL. Если аргумент не является числом, выводится сообщение о неправильном типе аргумента. Например : (ZEROP 0) ® T; (ZEROP 0.0) ® T; (ZEROP 0.1) ® NIL 3.3.6. Функции обработки текстовых (строковых) переменных В Автолиспе имеется возможность выполнять ряд процедур над текстовыми (строковыми) переменными: изменять регистры символов; определять число символов в строке; выполнять слияние строк; извлекать цепочку символов из строки. Обработка текста производится функциями STRCASE, STRLEN, STRCAT, SUBSTR. Функция (STRCASE <строка> [регистр]) преобразовывает символы строки в символы верхнего или нижнего регистра. Аргумент [регистр] может иметь любое не NIL значение, если он отсутствует, тогда аргумент <строка> преобразуется в символы верхнего регистра. Например: (STRCASE "приборостроение") ® "ПРИБОРОСТРОЕНИЕ"; (STRCASE "ПРИБОРОСТРОЕНИЕ" T) ® "приборостроение". Функция (STRLEN <строка>) возвращает целое число, равное количеству символов в строке. Функция (STRCAT <строка1> <строка2>) производит соединение строк аргументов. Функция (SUBSTR <строка> <начало> [<длина>]) возвращает подстроку, выделенную из <строки>, начиная с символа с номером <начало>, длиной равной [<длина>]. Если параметр [<длина>] не указан, тогда подстрока выделяется до конца строки.
3.3.7. Функции изменения типа данных Для преобразования типов данных в Автолиспе используются следующие встроенные функции: ANGTOF, ANGTOS, ASCII, ATOF, ATOI, CHR, CVUNIT, DISTOF, FIX, FLOAT, ITOA, RTOS, TRANS. Функция (ANGTOF <угол> [<представление>]) преобразует <угол>, заданный в текстовом виде, в радианы. Аргумент <представление> указывает формат аргумента <угол>: 0 - градусы; 1 - градусы/минуты/секунды; 2-грады; 3-радианы; 4 - топографические единицы (“N”, “W”, “S”, “O”).
Функция (ANGTOS <угол> [<представление> <точность>]) преобразует <угол>, заданный в радианах, в текстовый тип. Аргумент <представление> указывает формат: 0 - градусы; 1 - градусы/минуты/секунды; 2-грады; 3-радианы; 4 - топографические единицы (“N”, “W”, “S”, “O”). Аргумент <точность> (целое число) задает число знаков после запятой. Если аргументы не указаны, то используются значения переменных AUNITS и AUPREG. Если аргумент <угол> отрицательный, то он преобразуется в положительный угол в пределах 0-2 p .
Функция (ASCII <текст>) выделяет первый символ и возвращает его ASCII десятичный код. Например : (ASCII “autolisp”) ® 97; (ASCII “Autolisp”) ® 65. Функция (ATOF <строка>) преобразует число, заданное в виде цепочки символов, в действительное число и его возвращает. Например: (ATOF “8.66”) ® 8.66; (ATOF “8”) ® 8.0. Функция (ATOI <строка>) преобразует число, заданное в виде цепочки символов, в целое число и его возвращает. Например: (ATOI “8.66”) ® 8; (ATOI “8”) ® 8. Функция (CHR <число>) преобразует ASCII-код аргумента <число> в символ и его возвращает. Например: (CHR 65) ® “А”; . (CHR 97) ® “а”. Функция (CVUNIT <число> <“единица измерения1”> <“единица измерения2”>) преобразует аргумент <число> из одних единиц измерения в другие. Аргумент <число> может быть списком, содержащим до трех атомов. Если единицы измерения не соответствуют друг другу, тогда CVUNIT возвращает NIL. Например : (CVUNIT 1 "MINUTE" "SECOND") ® 60.0; (CVUNIT 1 "CM" " SECOND ") ® NIL; (CVUNIT 1.0 "INCH" "CM") ® 2.54; (CVUNIT '(1.0 2.5 3) "M" "MM") ® (1000.0 2500.0 3000.0). Функция (DISTOF <строка> [формат]) преобразует символьное выражение действительного числа в числовое значение и возвращает значение в указанном формате. Аргумент <строка> должен соответствовать указанному формату, он может быть в той же форме, в какой возвращается функцией RTOS или в виде, принятом в Автокаде при вводе с клавиатуры. Функции DISTOF и RTOS дополняют друг друга, выполняя обратные действия. Значения аргумента <формат>: 1 – научные единицы (числа с плавающей точкой и знаком экспоненты); 2-десятичные числа; 3 – инженерные американские единицы (футы и десятые дюйма); 4 - архитектурные единицы (футы и дробные дюймы); 5 – дробные числа. Например : (DISTOF“5.5”) ® 5.5; (DISTOF“5.5e3”1) ® 5500; (DISTOF "5" 4)> 5.0. Функция (FIX <число>) возвращает преобразованное действительное число в ближайшее целое меньшей величины, отбрасывая дробную часть. Например: (FIX 3.) ® 3; (FIX 3.7) ® 3. Функция (FLOAT <число>) возвращает действительное значение числа. Например: (float 5) ® 5.0; (float 3.75) ® 3.75. Функция (ITOA <целое число>) возвращает символьное значение целого числа. Например: (ITOA 35) ® "35"; (ITOA -27) ® "-27". Функция (RTOS <действительное число [формат [точность]]>) возвращает символьное значение действительного числа. RTOS выполняет преобразования в соответствии с установленными аргументами [формат [точность]] и системными переменными UNITMODE и DIMZIN. Аргументы [формат [точность]] являются целыми числами и соответствуют системным переменным LUNITS и LUPREC. Если эти аргументы опущены, тогда используются текущие значения LUNITS и LUPREC. Значения аргумента <формат>, такие как у функции DISTOF. Например: (RTOS 5.5) ® “5.5”; (RTOS 5.5e3 1) ® “5.50E+03”; (RTOS 5.5E+2 1 5)> "5.50000E+02" Функция (TRANS <3D точка> <коор_сис1> <коор_сис2> [вектор]) перемещает точку или вектор из одной системы координат в другую. Если аргумент [вектор] указан и не NIL, то производится перемещение вектора. Значения аргументов <коор_сис1> < коор_сис2> задаются целыми числами: 0 - мировые координаты (World -WCS); 1 - координаты, установленные пользователями (UCS); 2 - дисплейные координаты (DCS); 3 - страничные координаты DCS. Например, задана UCS, которая повернута на 90° против часовой стрелки вокруг World Z оси, тогда функция (TRANS '(1.0 2.0 3.0) 0 1) > (2.0 -1.0 3.0), а (TRANS '(1.0 2.0 3.0) 1 0) > (-2.0 1.0 3.0). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||