Функции в Autolisp



страница1/3
Дата25.07.2016
Размер0.71 Mb.
#4971
  1   2   3


С Ъ Д Ъ Р Ж А Н И 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-израз за оценяване.



Сподели с приятели:
  1   2   3




©obuch.info 2024
отнасят до администрацията

    Начална страница