С Ъ Д Ъ Р Ж А Н И E
1 Функции в AutoLISP
1.1 + <число> <число> 6
1.2 - <число> <число> 6
1.3 * <число> <число> 6
1.4 / <число> <число> 7
1.5 = <атом> <атом> 7
1.6 /= <атом1> <атом2> 7
1.7 < <атом> <атом> 7
1.8 <= <атом> <атом> 8
1.9 > <атом> <атом> 8
1.10 >= <атом> <атом> 8
1.11 ~ <число> 9
1.12 1+ <число> 9
1.13 1- <число> 9
1.14 abs <число> 9
1.15 and <израз> 9
1.16 angle <точка1> <точка2> 10
1.17 angtos <ъгъл> [<режим> [<точност>]] 10
1.18 append <израз> 10
1.19 apply <функция> <списък> 10
1.20 ascii <симв.низ> 11
1.21 assoc <елемент> <асоц.списък> 11
1.22 atan <число1> [<число2>] 11
1.23 atof <симв.низ> 12
1.24 atoi <симв.низ> 12
1.25 atom <елемент> 12
1.26 boole <функция> <ц.число 1> <ц.число 2> 12
1.27 boundp <атом> 13
1.28 caar <списък> 14
1.28 cadar <списък> 14
1.28 caddr <списък> 14
1.28 cadr <списък> 14
1.28 cdar <списък> 14
1.28 cddr <списък> 14
1.29 car <списък> 14
1.30 cdr <списък> 14
1.31 chr <число> 15
1.32 close <указв.файл> 15
1.33 command <аргументи> 15
1.34 cond (<тест1> <резултат1> ...) 17
1.35 cons <нов елем.> <списък> 17
1.36 cos <ъгъл> 18
1.37 defun <име функ.> <списък-арг> <израз> 18
1.38 distance <точка1> <точка2> 20
1.39 eq <израз1> <израз2> 20
1.40 equal <израз1> <израз2> 20
1.41 eval <израз> 20
1.42 exp <число> 21
1.43 expt <база> <експонента> 21
1.44 fix <число> 21
1.45 float <число> 21
1.46 foreach <име> <списък> <израз> 21
1.47 gcd <число1> <число2> 22
1.48 getangle [<точка>] [<въпрос>] 22
1.49 getcorner <точка> [<въпрос>] 22
1.50 getdist [<точка>] [<въпрос>] 22
1.51 getint [<въпрос>] 23
1.52 getkword [<въпрос>] 23
1.53 getorient [<точка>] [<въпрос>] 23
1.54 getpoint [<точка>] [<въпрос>] 24
1.55 getreal [<въпрос>] 24
1.56 getstring [] [<въпрос>] 25
1.57 getvar <име променлива> 25
1.58 graphscr 25
1.59 if <тест-израз><да-израз> [<не-израз>] 25
1.60 initget [<битове>] [<симв.низ>] 26
1.61 inters <т.1> <т.2> <т.3> <т.4> [] 27
1.62 itoa <цяло число> 28
1.63 lambda <аргументи> <израз> 28
1.64 last <списък> 28
1.65 length <списък> 29
1.66 list <израз> 29
1.67 listp <елемент> 29
1.68 load <име-файл> 29
1.69 log <число> 30
1.70 logand <число> <число> 30
1.71 logior <число> <число> 30
1.72 lsh <число1> <брой битове> 30
1.73 mapcar <функция> <списък1> <списък N> 31
1.74 max <число> <число> 31
1.75 member <израз> <списък> 32
1.76 menucmd <симв.низ> 32
1.77 min <число> <число> 33
1.78 minusp <елемент> 33
1.79 not <елемент> 33
1.80 nth <списък> 33
1.81 null <елемент> 34
1.82 numberp <елемент> 34
1.83 open <име файл> <режим> 34
1.84 or <израз> 35
1.85 osnap <точка> <режим-текст> 35
1.86 pi 36
1.87 polar <точка> <ъгъл> <разстояние> 36
1.88 prin1 <израз> [<указв.файл>] 36
1.89 princ <израз> [<указв.файл>] 37
1.90 print <израз> [<указв.файл>] 37
1.91 progn <израз> 37
1.92 prompt <симв.низ> 37
1.93 quote <израз> 38
1.94 read <симв.низ> 38
1.95 read-char [<указв.файл>] 38
1.96 read-line [<указв.файл>] 38
1.97 redraw [<име елемент>[<режим>]] 39
1.98 rem <число1> <число2> 39
1.99 repeat <число> <израз> 39
1.100 reverse <списък> 40
1.101 rtos <число> [<режим> [<точност>]] 40
1.102 set <символ> <израз> 40
1.103 setq <символ1> <израз1> [<символ2> <израз2>] 41
1.104 setvar <име пром.> <стойност> 42
1.105 sin <ъгъл> 42
1.106 sqrt <число> 42
1.107 strcase <симв.низ> [<как?>] 42
1.108 strcat <симв.низ1> <симв.низ2> 43
1.109 strlen <симв.низ> 43
1.110 subst <нов елем.> <стар елем.> <списък> 43
1.111 substr <симв.низ> <старт> [<дължина>] 43
1.112 terpri 44
1.113 taxtscr 44
1.114 trace <функция> 44
1.115 type <елемент> 44
1.116 untrace <функция> 45
1.117 ver 45
1.118 while <тест-израз> <израз> 45
1.119 write-char <число> [<указв.файл>] 46
1.120 write-line <симв.низ> [<указв.файл>] 46
1.121 zerop <елемент> 46
1.122 *error* <симв.низ> 46
2 Достъп до елементи и устройства
2.1 Специални типове данни
2.2 Функции за манипулация с множеството избрани обекти
2.2.1 ssget [<режим>] [<точка1> [<точка2>]] 47
2.2.2 sslength <изб.обекти> 49
2.2.3 ssname <изб.обекти> <индекс> 50
2.2.4 ssadd [<име елем.> [<изб.обекти>]] 50
2.2.5 ssdel <име елем.> <изб.обекти> 50
2.2.6 ssmemb <име елем.> <изб.обекти> 50
2.3 Функции, свързани с имената на елементите
2.3.1 entnext [<име елем.>] 51
2.3.2 entlast 51
2.3.3 entsel [<въпрос>] 51
2.4 Функции по отношение данните за елементи
2.4.1 entdel <име елем.> 52
2.4.2 entget <име елем.> 52
2.4.3 entmake 54
2.4.4 entmod 55
2.4.5 entupd <име елем.> 56
2.4.6 Ограничения 56
2.5 Използване имена на елементи и множества от избрани обекти в AutoCAD
2.6 Достъп до таблицата със символи
2.6.1 tblnext <име табл.> [<първи>] 58
2.6.2 tblsearch <име табл.> <символ> 59
2.7 Достъп до графичния монитор и входните устройства
2.7.1 grclear 60
2.7.2 grdraw <от> <до> <цвят> [<маркиране>] 60
2.7.3 grtext <поле> <текст> [<маркиране>] 60
2.7.4 grread [] 61
Забележка: Командите (nentsel <въпрос>) и (findfile <име на файл>) не са описани тук !!!
Глава 1
Функции в AutoLISP
AutoLISP предоставя многобройни, предварително дефинирани функции. Всяка функция се извиква чрез въвеждане на името на функцията (с малки или големи букви) като първи елемент на списък, следван от аргументите на тази функция (ако има такива).
В тази глава ще намерите пълно представяне на функциите на AutoLISP по азбучен ред. При много функции се касае за стандартни функции, които се съдържат във всяка реализация на програмния език AutoLISP. Други функции са характерни за графичните приложения на AutoCAD. По-новите функции са описани в последните глави.
1.1 (+ <число> <число> ...)
Тази функция дава като резултат сумата от всички числа. Тя може да се използва с реални и цели числа. Когато всички числа са цели, резултатът също е цяло число (за реалните е аналогично).
Пример:
(+ 1 2) резултат 3
(+ 1 2 3 4.5) резултат 10.500000
(+ 1 2 3 4.0) резултат 10.000000
1.2 (- <число> <число> ...)
Тази функция изважда второто число от първото и дава резултата. Ако са дадени повече от две числа, сумата на второто до последното се изважда от първото число и се дава резултата. При въвеждане само на едно число, то се изважда от нула. Тази функция се използва с реални и цели числа.
Пример:
(- 50 40) резултат 10
(- 50 40.0 2) резултат 8.000000
(- 50 40.0 2.5) резултат 7.500000
(- 8) резултат -8
1.3 (* <число> <число> ...)
Тази функция дава като резултат произведението от всички числа. Може да се използва с реални и цели числа.
Пример:
(* 2 3) резултат 6
(* 2 3 4.0) резултат 24.000000
(* 3 -4.5) резултат -13.500000
1.4 (/ <число> <число> ...)
Тази функция дели първото число с второто и дава частното като резултат. Ако са дадени повече от две числа, първото число се дели на произведението от второто до последното дава резултата. Тази функция се използва с реални и цели числа.
Пример:
(/ 100 2) резултат 50
(/ 100 2.0) резултат 50.000000
(/ 100 20 2.0) резултат 2.500000
(/ 100 20.0 2) резултат 2.500000
(/ 100.0 20 2) резултат 2.500000
(/ 100 20 2) резултат 2
(/ 135 360) резултат 0
(/ 135 360.0) резултат 0.375000
1.5 (= <атом> <атом> ...)
Касае се за функцията "equal to" (равно). Ако всички <атоми> са числово идентични, резултатът е Т (true = истина), в противен случай - Nil. Тази функция е в сила за числа и символни низове.
Пример:
(= 4 4.0) резултат Т
(= 20 388) резултат Nil
(= 2.4 2.4 2.4) резултат Т
(= 499 499 500) резултат Nil
(= "i" "i") резултат Т
(= "i" "you") резултат Nil
1.6 (/= <атом1> <атом2> ...)
Касае се за функцията "not equal to" (не е равно). Ако първият <атом1> числово не е равен на втория <атом2>, резултатът е Т, в противен случай - Nil. Ако са дадени повече от два <атома>, преглежда се цялата серия. Тази функция е в сила за числа и символни низове.
Пример:
(/= 10 20) резултат Т
(/= "you" "you") резултат Nil
(/= 5.43 5.44) резултат Т
1.7 (< <атом> <атом> ...)
Касае се за функцията "less than" (по-малко от). Ако първият <атом> е по-малък от втория, резултатът е Т, в противен случай - Nil. Ако са дадени повече от два <атома>, резултатът е Т, ако всеки <атом> е по-малък от стоящия отдясно <атом>.
Пример:
(< 10 20) резултат Т
(< "b" "c") резултат Т
(< 357 33.2) резултат Nil
(< 2 3 88) резултат Т
(< 2 3 4 4) резултат Nil
1.8 (<= <атом> <атом> ...)
Това е функцията "less than or equal" (по-малко или равно). Ако първият <атом> е по-малък или равен от втория, резултатът е Т, в противен случай - Nil. Ако са дадени повече от два <атома>, резултатът е Т, ако всеки <атом> е по-малък или равен на <атома> отдясно.
Пример:
(<= 10 20) резултат Т
(<= "b" "b") резултат Т
(<= 357 33.2) резултат Nil
(<= 2 9 9) резултат Т
(<= 2 9 4 5) резултат Nil
1.9 (> <атом> <атом> ...)
Това е функцията "greater than" (по-голямо от). Ако първият <атом> е по-голям от втория, резултатът е Т, в противен случай - Nil. Ако са дадени повече от два <атома>, резултатът е Т, ако всеки <атом> е по-голям от <атома> отдясно.
Пример:
(> 120 17) резултат Т
(> "b" "c") резултат Т
(> 3.5 1792) резултат Nil
(> 77 4 2) резултат Т
(> 77 4 4) резултат Nil
1.10 (>= <атом> <атом> ...)
Това е функцията "greater than or equal" (по-голямо или равно). Ако първият <атом> е по-голям или равен от втория, резултатът е Т, в противен случай - Nil. Ако са дадени повече от два <атома>, резултатът е Т, ако всеки <атом> е по- голям или равен на <атома> отдясно.
Пример:
(>= 120 17) резултат Т
(>= "b" "b") резултат Т
(>= 3.5 1792) резултат Nil
(>= 77 4 4) резултат Т
(>= 77 4 9) резултат Nil
1.11 (~ <число>)
Функцията дава битовия NOT-член на <число>. Работи с цели числа.
Пример:
(~ 3) резултат -4
(~ 100) резултат -101
(~ -4) резултат 3
1.12 (1+ <число>)
Функцията дава като резултат <число> плюс 1 (инкремента). Работи с цели и реални числа.
Пример:
(1+ 5) резултат 6
(1+ -17.5) резултат -16.500000
1.13 (1- <число>)
Функцията намалява <число> с 1 (декремента). Работи с цели и реални числа.
Пример:
(1- 5) резултат 4
(1- -17.5) резултат -18.500000
1.14 (abs <число>)
Функцията дава абсолютната стойност на <число>. Работи с цели и реални числа.
Пример:
(abs 100) резултат 100
(abs -100) резултат 100
(abs -99.25) резултат 99.250000
1.15 (and <израз> ...)
Тази функция дава като резултат логическото AND на списък от изрази. Ако един от изразите се оценява на Nil, оценяването се прекратява и резултатът е Nil, в противен случай - Т.
Пример:
(setq a 103)
(setq b Nil)
(setq c "text")
Резултатите ще са следните:
(and 1.4 a c) резултат Т
(and 1.4 a b c) резултат Nil
1.16 (angle <точка1> <точка2>)
Тази функция дава като резултат ъгъла (в радиани) между <точка1> и <точка2>, при което една <точка> е списък от две реални числа.
Пример:
(angle ‘(5.0 1.33) ‘(2.4 1.33)) резултат 3.141593
1.17 (angtos <ъгъл> [<режим> [<точност>]])
Тази функция взема един <ъгъл> (реално число в радиани) и го връща редактирано в символен низ. Аргументът <режим> е цяло число, което определя редакционния формат.
<Режим> РЕДАКЦИОНЕН формат .
0 - градуси
1 - градуси/минути/секунди
2 - гради
3 - радиани
4 - геодезически единици
Аргументът <точност> е цяло число, което определя желаната точност на позициите след десетичната точка. <Режим> и <точност> съответстват н а системните променливи от AutoCAD - AUNITS и AUPREC (ако се пропуснат, се използват актуалните им стойности).
Пример:
(setq pt1 ‘(5.0 1.33))
(setq pt2 ‘(2.4 1.33))
(setq a (angle pt1 pt2))
От това следва:
(angtos a 0 0) резултат "180"
(angtos a 0 4) резултат "180.0000"
(angtos a 1 4) резултат "180d0‘0”"
(angtos a 3 4) резултат "3.1416r"
(angtos a 4 2) резултат "W"
1.18 (append <израз> ...)
Тази функция взема произволно много списъци (<израз>) и ги свързва в списък.
Пример:
(append ‘(a b) ‘(c d)) резултат (A B C D)
(append ‘((a) (b)) ‘((c) (d))) резултат ((A) (B) (C) (D))
1.19 (apply <функция> <списък>)
Изпълнява <функция> с дадени в <списък> аргументи.
Пример:
(apply ‘+ ‘(1 2 3)) резултат 6
(apply ‘strcat ‘("a" "b" "c")) резултат "abc"
1.20 (ascii <символен низ>)
Тази функция преобразува първия знак от <символен низ> като ASCII-знаков код (цяло число) - подобно на функцията ASC в BASIC.
Пример:
(ascii "A") резултат 65
(ascii "a") резултат 97
(ascii "BIG") резултат 66
1.21 (assoc <елемент> <асоциативен списък>)
Тази функция претърсва <асоциативен списък> за <елемент> като ключ и дава като резултат асоциативния списък за съответния ключ. Ако <елемент> не е намерен като ключ в <асоциативен списък>, ASSOC връща Nil.
Пример:
ако списъкът "a1" е дефиниран като
((name box) (width 3) (size 4.7263) (depth 5))
от това следва:
(assoc ‘size a1) резултат (size 4.7263)
(assoc ‘weight a1) резултат Nil
Асоциативните списъци често се използват за записване на данни, към които е възможно обръщение с помощта на "ключ". Функцията SUBST, която е описана по-надолу в тази глава, е практично средство да се замени стойността, която е асоциирана с ключ в <асоциативен списък>.
1.22 (atan <число1> [<число2>])
Ако не е дадено <число2>, ATAN дава аркустангенса на <число1> в радиани. <Число1> може да е отрицателно; областта на ъгъла, който се дава като резултат, е от -Pi до +Pi.
Пример 1:
(atan 0.5) резултат 0.463647
(atan 1.0) резултат 0.785398
(atan -1.0) резултат -0.785398
(angtos (atan -1.0) 0 4) резултат "-45.0000"
Ако са дадени <число1> и <число2>, резултатът е аркустангенса на <число1>/<число2> в радиани. Ако <число1> е 0, резултатът е ъгъл от 1.570796rad (90 или -90 градуса), в зависимост от знака на <число1>.
Пример 2:
(atan 2.0 3.0) резултат 0.588002
(angtos (atan 2.0 3.0) 0 4) резултат "33.6901"
(atan 2.0 -3.0) резултат 2.553590
(angtos (atan 2.0 -3.0) 0 4) резултат "146.3099"
(atan -2.0 3.0) резултат -0.588002
(atan -2.0 -3.0) резултат -2.553590
(atan 1.0 0.0) резултат 1.570796
(angtos (atan 1.0 0.0) 0 4) резултат "90.0000"
(atan -0.5 0.0) резултат -1.570796
(angtos (atan -0.5 0.0) 0 2) резултат "-90.00"
1.23 (atof <символен низ>)
Тази функция преобразува <символен низ> в реално число.
Пример:
(atof "97.1") резултат 97.100000
(atof "3") резултат 3.000000
1.24 (atoi <символен низ>)
Тази функция преобразува <символен низ> в цяло число.
Пример:
(atoi "97") резултат 97
(atoi "3") резултат 3
(atoi "3.9") резултат 3
1.25 (atom <елемент>)
Ако <елемент> е списък, тази функция дава като резултат Nil, в противен случай - Т. Това, което не е списък, се разглежда като АТОМ.
Пример:
(setq a ‘(x y z))
(setq b ‘a)
От това следва:
(atom ‘a) резултат Т
(atom a) резултат Nil
(atom ‘b) резултат Т
(atom b) резултат Т
(atom ‘(a b c)) резултат Nil
ЗАБЕЛЕЖКА: Не всички LISP-езици интерпретират еднакво един ATOM, затова проверете преобразуващите кодове.
1.26 (boole <функция> <цяло число1> <цяло число2> ...)
Това е обща булева функция, която се прилага бит по бит на две цели числа. <Функция> е цяло число между 0 и 15, съответстваща на една от 16-те възможни булеви функции на две променливи. Целочислените аргументи се комбинират бит по бит (логически) в зависимост от избраната булева функция и въз основа на таблица за истинност:
цяло число 1 цяло число 2 функция резултат
0 0 8 1
0 1 4 1
1 0 2 1
1 1 1 1
Всеки бит от <цяло число 1> се комбинира със съответния бит от <цяло число 2> чрез избор на хоризонтален ред от таблицата за истинност. Резултиращият бит е или 0, или 1, в зависимост от стойността (0 или 1) на бита на <функция> от съответния ред от таблицата за истинност. Когато съответния бит във <функция> е зареден, резултиращият бит е 1, в противен случай - 0.
Някои стойности на <функция> съответстват на стандартните булеви операции AND, OR, XOR и NOT:
функция операция резултиращият бит е 1 ако
1 AND двата бита са 1
6 XOR само единия от двата бита е 1
7 OR единия или двата бита е/са 1
8 NOT двата бита са 0 (комплемент на 1)
Пример 1:
(boole 1 12 5) резултат 4 при AND на 12 и 5
(boole 6 6 5) резултат 3 при XOR на 6 и 5
Можете да използвате други стойности на <функция> за изпълнение на други булеви операции, за които няма стандартни имена.
Пример 2:
Ако <функция> е 4, резултиращите битове ще са 1, ако съответните битове в <цяло число 2> (но не и в <цяло число 2>) са 1:
(boole 4 3 14) резултат 12
1.27 (boundp <атом>)
Тази функция дава като резултат Т, ако <атом> притежава присвоена стойност (независимо за каква цел). Ако на <атом> не е присвоена стойност или е присвоена Nil, резултатът е Nil.
Пример:
(setq a 1)
(setq b Nil)
От това следва:
(boundp ‘a) резултат Т
(boundp ‘b) резултат Nil
1.28 caar, cadar, caddr, cadr, cdar и cddr
AutoLISP поддържа свързване на CAR и CDR до 4 нива.
Пример 1:
(setq x ‘((a b) c d)
ще даде:
(caar x) еквивал.на (car (car x)) резултат A
(cdar x) еквивал.на (cdr (car x)) резултат (B)
(cadar x) еквивал.на (car (cdr (car x))) резултат B
(cadr x) еквивал.на (car (cdr x)) резултат C
(cddr x) еквивал.на (cdr (cdr x)) резултат (D)
(caddr x) еквивал.на (car (cdr (cdr x))) резултат D
В AutoLISP CADR често се използва за получаване на Y-стойността (втори елемент на списък от 2 реални числа). Също така CADDR може да се използва за получаване на Z-координатата на 3D-точка.
Пример 2:
(setq pt2 ‘(5.2 1.0)) това е 2D-точка
(setq pt3 ‘(5.2 1.0 3.0)) това е 3D-точка
тогава:
(car pt2) резултат 5.200000
(cadr pt2) резултат 1.000000
(caddr pt2) резултат Nil
(car pt3) резултат 5.200000
(cadr pt3) резултат 1.000000
(caddr pt3) резултат 3.000000
1.29 (car <списък>)
Тази функция дава като резултат първия елемент на <списък>. Ако <списък> е празен, резултатът е Nil.
Пример:
(car ‘(a b c)) резултат A
(car ‘((a b) c)) резултат (A B)
(car ‘()) резултат Nil
1.30 (cdr <списък>)
Тази функция дава списък, съдържащ всички елементи на <списък>, с изключение на първия. Ако <списък> е празен, резултатът е Nil.
Пример 1:
(cdr ‘(a b c)) резултат (B C)
(cdr ‘((a b) c)) резултат (C)
(cdr ‘()) резултат Nil
Ако аргументът <списък> е точкова двойка(виж CONS по-долу), CDR дава като резултат втория елемент, без да го включва в списък.
Пример 2:
(cdr ‘(a , b)) резултат B
(cdr ‘(1 , "Text")) резултат "Text"
1.31 (chr <число>)
Тази функция преобразува цяло число, представляващо ASCII-знаков код, в символен низ, състоящ се от един символ(като функцията CHR$ в BASIC).
Пример:
(chr 65) резултат "A"
(chr 66) резултат "B"
(chr 97) резултат "a"
1.32 (close <променлива, указваща файл>)
Тази функция затваря файл и дава Nil. <Променлива, указваща файл> предварително е зададена с функцията OPEN. След CLOSE променливата остава непроменена, обаче вече не е валидна.
Пример:
Ако X е валидна променлива, указваща файл, тогава
(close X)
затваря асоциирания файл и дава Nil.
1.33 (command <аргументи> ...)
Тази функция изпълнява AutoCAD-команди от AutoLISP и винаги дава Nil. Аргументите са за AutoCAD-командите и техните подкоманди; всеки аргумент се оценява и се предава като отговор на следващите запитвания на AutoCAD. Имената на командите и опциите се дават като символни низове: 2D-точките като списък от 2 реални числа, а 3D-точките като списък от 3 реални числа.AutoCAD познава имената на командите само при запитване "Command:".
Пример 1:
(setq pt1 ‘(1.45 3.23))
(setq pt2 (getpoint "Укажете точка: "))
(command "line" pt1 pt2)
(command "")
След запитването на AutoCAD - "Command:", горедадената поредица от изрази поставя стойност на точка pt1, пита за точка pt2 и накрая изпълнява AutoCAD-командата LINE с двете точки. Аргументите на COMMAND могат да са символни низове, реални числа, цели числа или точки (според командата). Празен символен низ "" съответства на натискане на "Space" от клавиатурата. Извикването на COMMAND без аргументи съответства на въвеждане на CTRL+C от клавиатурата и прекъсва повечето команди на AutoCAD.
Командите, изпълнявани от COMMAND, не се пренасят на екрана, ако системната променлива на AutoCAD CMDECHO е 0 (достъпно чрез SETVAR и GETVAR). Функцията COMMAND е най-простия метод за извикване на AutoCAD команди чрез AutoLISP.
ЗАБЕЛЕЖКА: GETxxx-функциите, въвеждани от потребителя (например GETSTRING, GETINT, GETPOINT и т.н.) не могат да се използват във функцията COMMAND. Ако въпреки това се направи опит, ще се появи съобщение "error" и функцията ще бъде прекъсната. Но ако са необходими данни от потребителя, извикайте функцията GETxxx преди това, както е показано горе, или я поставете между следващите "Command:".
Командите DTEXT и SKETCH четат клавиатурата и дигитализиращото устройство и затова не могат да се използват с функцията COMMAND. Също така COMMAND не може да се използва за изпълнение на командите PLOT, PRPLOT и SCRIPT.
Ако една AutoCAD-команда е активна и символът DELAY е аргумент на COMMAND, последната се прекъсва и позволява директно въвеждане на данни от потребителя (или видимо водене на буксир). Това съответства на механизма на обратната наклонена черта, предназначен за менютата.
Ако извикате прозрачна команда, когато функцията COMMAND е прекъсната, последната остава такава. Затова например ‘ZOOM и ‘PAN могат да бъдат използвани произволно често в такава ситуация. Паузата се задържа, докато AutoCAD получи валидни данни и никаква прозрачна команда не е активна.
Пример 2:
(command "circle" "5,5" delay "5,5" "7,5" "")
Тази последователност активира командата CIRCLE, определя център с координати 5,5 и след това прави пауза, за да може потребителят видимо да води радиуса на окръжността. След като потребителят посочи желаната точка (или набере радиуса от клавиатурата), функцията се взема отново и се изчертава линия от 5,5 до 7,5.
Въвеждане на меню не се прекъсва от AutoLISP-пауза. Ако е активна една меню-функция по времето, когато COMMAND е в пауза и чака данни от потребителя, тези данни могат да се въведат също и чрез менюто. Ако искате да прекъснете меню-функцията, трябва да ú зададете обратна наклонена черта. След като са дадени валидни данни, отново се вземат както функцията COMMAND, така и меню-функцията.
ЗАБЕЛЕЖКИ :
1. Символът DELAY е символен низ, който се състои само от една единствена наклонена черта. Вместо него бихте могли да използвате директно обратна наклонена черта. Когато обаче COMMAND се извика от меню-функция, обратната наклонена черта прекъсва меню-функцията, а не функцията COMMAND. Но за всеки случай Ви препоръчваме да използвате символа DELAY вместо обратната наклонена черта.
2. Ако DELAY е предварително указана, когато една команда очаква въвеждане на текстов символен низ или атрибутна стойност, AutoCAD очаква данни от потребителя само тогава, когато системната променлива TEXTEVAL е със стойност, различна от 0. В противен случай стойността на символа DELAY (една единствена наклонена черта) се приема като действителен текст и не прави пауза за данни от потребителя.
3. Ако функцията COMMAND е в пауза за данни от потребителя, тя се разглежда като все още активна, така че потребителят не може да зададе друг AutoLISP-израз за оценяване.
Сподели с приятели: |