Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Functii AutoLISP

autocad



+ Font mai mare | - Font mai mic



Functii AutoLISP

Pe linga functiile interne, AutoLISP-ul permite crearea functiilor definite de utilizator, adica functii ale caror seturi de instructiuni si nume au fost definite.

Obiective

in acest capitol veti studia:

Definitia functiei AutoLISP.



Cum sa creati propriile functii AutoLISP.

Sintaxa functiei defun.

Cum sa trimiteti argumente unei functii.

Cum returneaza functia o valoare.

Functiile si evaluarea listelor

Considerati procesul de evaluare al unei expresii tipice care foloseste o functie interna AutoLISP.

(setq x 10)

AutoLISP-ul evalueaza primul element unde se asteapta sa gasesca o functie. Aici gaseste subprogramul setq si reface legatura. Legarea lui setq reprezinta un set de instructiuni care arata cum trebuie facuta procesarea. AutoLISP-ul evalueaza argumentele lui setq in ordine si termina prin aplicarea instructiunilor de procesare la valoarea argumentelor.

Rezultatul in acest caz este o valoare returnata, 10, pentru expresie si un efect secundar al variabilei x care este legata de 10.

setq este un subprogram si instructiunile lui au fost predefinite in AutoLISP. Utilizatorul nu le poate schimba. Totusi este posibila crearea unor noi functii care sa execute orice instructiuni de procesare dorite de utilizator.

Legaturi noi se creaza prin folosirea subprogramului defun care este functia de definire.

Sintaxa functiei defun

Sintaxa functiei defun este putin diferita de cea a celorlalte functii folosite pina acum.

(defun <sym name> (<arg list> / <local var>) <expr> )

defun cere obligatoriu doua argumente si un numar variabil de argumente care urmeaza dupa primele doua.

Argumentele functiei defun

Primul argument al functiei este numele noii functii de definit. Folositi un nume nou pe care l-ati creat, de preferinta unul care descrie actiunile functiei.

ATEN}IE Nu folositi niciodata numele unei functii sau a unui simbol construite intern deoarece acesta se va suprapune peste definitia originala si il va face inaccesibil pina lansati AutoLISP-ul in cadrul unei noi sesiuni AutoCAD.

in acest exemplu, primul argument al functiei defun este numele simbol myfun care devine numele functiei definite de utilizator.

(defun myfun (<arg list> / <local var>) <expr> )

Al doilea argument cerut de defun este o lista de argumente cerute si variabile locale. Cele doua tipuri de argumente sint separate de o linie. Acum este suficient sa folositi o lista goala.

Exemplul este extins pentru a include lista argumentelor cerute si a variabilelor locale.

(defun MYFUN ( ) <expr> )

Argumentele care urmeaza dupa argumentele cerute sint expresii de evaluat cind se executa functia definita de utilizator. Ele reprezinta instructiunile de procesare care vor fi executate cind functia va fi apelata.

Returnarea valorii unei functii

Valoarea returnata a functiei definite de utilizator este valoarea ultimei expresii din corpul definitiei functiei.

in urmatoarele exemple, expresiile vor fi adaugate corpului functiei myfun. Seturi diferite de expresii vor da intelesuri diferite functiei myfun precum si valori returnate diferite.

in acest exemplu myfun adauga doua numere si returneaza raspunsul.

(defun myfun ( )

Exemplu

Introduceti expresiile care urmeaza. Definiti functia myfun apoi apelati-o.

Command: (defun myfun () (+1 2 ))

MYFUN

Command: (myfun)

Exemplu

Introduceti expresiile care urmeaza. Definiti functia myfun apoi apelati-o. myfun va returna radacina patrata a lui 624, rotunjita pina la cel mai apropiat numar intreg.

Command: (defun myfun () (fix (sqrt 624.0))

MYFUN

Command: (myfun)

Exemplu

Introduceti expresiile care urmeaza. Definiti functia myfun apoi apelati-o. myfun va returna distanta dintre doua puncte alese de utilizator.

Command: (defun myfun () (getdist "From point: "))

MYFUN

Command: (myfun)

From point: pick a point

Second point: pick a point

in cele trei exemple pe care le-ati parcurs, valoarea returnata a functiei myfun este valoarea returnata a ultimei expresii din corpul definitiei.

Figura 36.Corp de expresii pentru o definitie a functiei

Expresii multiple pot fi introduse in corpul definitiei functiei. Valoarea returnata a functiei este valoarea returnata a ultimei expresii din corpul definitiei.

in acest exemplu valoarea returnata a functiei myfun este valoarea expresiei (+3 4)

Command: (defun myfun () (+1 2) (+3 4))

MYFUN

Command: (myfun)

Figura 37.Ultima expresie din corp este valoarea returnata a functiei.

Argumentele unei functii

(defun myfun (<arg list> / <local var>) <expr> )

Lista argumentelor cerute dintr-o expresie defun va permite sa adaugati argumente la functiile de apelare.

in acest exemplu functia myfun este definita cu un singur argument solicitat: simbolul x. x este folosit in cadrul expresiei din corpul definitiei functiei myfun: (* x 10). Orice valoare se utilizeaza ca argument la myfun, aceasta va deveni automat valoarea lui x din corpul expresiei (* x 10).

Command: (defun myfun (x) (* x 10))

MYFUN

Command: (myfun 1)

Command: (myfun 2)

Command:

Figura 38. Valoarea argumentului se afla in corpul de expresii al functiei.

Exemplu

Introduceti expresiile care urmeaza. Creati o functie numita add-one care solicita un argument. Adaugati unu la valoarea lui si returnati. Folositi functia cu doua valori diferite

Command: (defun add-one (x) (+ x 1))

ADD-ONE

Command: (add-one 1)

Command: (add-one 4)

Exemplu

Introduceti expresiile care urmeaza. Creati o functie numita dtr care cere un argument exprimat in grade si returneaza valoarea transformata in radiani. Folositi functia cu trei valori diferite.

Formula aritmetica pentru transformarea gradelor in radiani pentru valoarea d este:

(d / 180) * pi

Command: (defun dtr (d) (* pi (/ d 180.0)))

DTR

Command: (dtr 180)

Command: (dtr 360)

Command: (dtr 90)

Exemplu

Introduceti expresiile care urmeaza. Creati o functie care se numeste add-two care cere doua argumente, adauga valorile lor si returneaza. Folositi functia cu doua seturi de valori diferite.

Command: (defun add-two (x y) (+x y))

ADD-TWO

Command: (add-two 1 2)

Command: (add-two 4 5)

Recapitulare

Noile functii externe sint create cu ajutorul functiei defun.

Toate functiile returneaza o valoare.

Functiile sint definite fara argumente sau cu un numar fix de argumente solicitate.

Argumentele unei functii sint evaluate oriunde s-ar afla in corpul definitiei functiei.

exercitiul 13: definrea unor noi functii

Trebuie sa completati partea a III-a a acestui exercitiu. Se vor face referiri la aceasta parte in exercitiile care urmeaza.

in acest exercitiu veti:

Consolida cunostintele despre cum sint create functiile definite de utilizator.

Scrie functii cu argumente solicitate.

Scrie o functie care apeleaza o comanda AutoCAD.

Partea I

Instructiuni

Creati o functie numita times-two.

Functia solicita doua argumente.

Functia multiplica cele doua argumente si returneaza valoarea.

Testati-o in AutoCAD.

Scrieti-o mai jos.

Partea a II-a

Instructiuni

Creati o functie numita rtd.

Functia solicita un argument.

Functia transforma valoarea argumentului din radiani in grade si returneaza valoarea.

Testati-o in AutoCAD.

Scrieti-o mai jos.

Formula aritmetica de transformare din radiani in grade pentru valoarea r este:

(r / pi) * 180

Partea a III-a

Instructiuni

Creati o functie numita rectangle.

Functia nu cere argumente.

Cereti utilizatorului doua puncte si memorati-le sub forma de variabile.

Trasati o polilinie 2-D inchisa folosind punctele pentru colturile opuse.

Calculati celelalte doua puncte cu ajutorul functiilor car, cdr si list.

Testati-o in AutoCAD.

Scrieti-o mai jos.

Aceasta pagina a fost lasata libera intentionat.
Functii care actioneaza sub forma de comenzi AutoCAD

O functie definita de utilizator poate apela o functie AutoLISP command in cadrul corpului definitiei ei. Apelarea ei apare utilizatorului sub forma unei comenzi AutoCAD, o comanda ce poate fi apelata fara ca aceasta sa se afle intre paranteze.

Obiective

in acest capitol veti studia:

Cum sa transformati o functie AutoLISP definita de utilizator intr-o noua comanda AutoCAD.

Cum sa folositi simbolul pause in cadrul functiilor de tip command.

Cum sa obtineti valoarea unei variabile de sistem in AutoLISP.

O noua comanda ZOOM

Pentru a ilustra unele puncte sensibile ale definirii functiilor si comenzilor AutoCAD vom crea o functie simpla si utila care combina comanda ZOOM cu optiunea Center, schimbind factorul de afisare cu 2.

Considerati cererile pentru o operatie ZOOM CENTER.

Command: zoom

All/Center/Dynamic/Extens/Left/Previous/Vmax/Window/<Scale(X/XP>:

Center point:

Magnification or Heigh<current>:

Avem nevoie de doua valori pentru aceasta functie: noul punct centru si factorul curent de afisare multiplicat cu 2. Vom obtine cele doua puncte de la utilizator prin suspendarea evolutiei functiei si vom obtine factorul de afisare prin setarea variabilei de sistem VIEWSIZE.

Simbolul 'pause'

Putem obtine un punct de la utilizator prin legarea unei variabile cu setq si getpoint si transferarea variabilei catre comanda zoom.

(setq pt (getpoint "Center point: "))

(command "zoom" "c" pt )

Putem suspenda cererile de comanda care vin din AutoCAD pentru a permite utilizatorului sa raspunda direct.

(command "zoom" "c" pause )

Simbolul special AutoLISP pause este folosit ca argument pentru functiile tip command. pause suspenda evaluarea expresiei si permite utilizatorului sa raspunda in linia de comanda unde este introdus (in cazul ilustrat mai sus, cererea pentru un nou punct de centru pentru afisare).

Variabile de sistem AutoCAD

Functia AutoLISP getvar are un singur argument: numele unei variabile de sistem exprimata sub forma unui sir, adica intre ghilimele. Functia returneaza valoarea variabilei de sistem.

in acest exemplu functia getvar returneaza valoarea variabilei de sistem viewsize.

Command: (getvar "viewsize")

Functia ZPLUS

Avem toate instructiunile necesare pentru definirea functiei noastre.

O modalitate de a suspenda comanda zoom si de a permite utilizatorului sa selecteze un nou punct de centru.

O modalitate de a obtine factorul de afisare curent zoom.

Exemplu

Introduceti expresiile care urmeaza. Creati o noua functie numita zplus si folositi-o. zplus va afisa noul punct de centru pe care il selectati cu factorul 2. defun zp

Command: (defun zplus() )

1> (setq zplus-height (*0.5 (getvar "viewsize")))

1> (command "zoom" "c" pause zplus-height))
ZPLUS

Command: (zplus)

All/Center/Dynamic/Extens/Left/Previous/Vmax/Windows/<Scale(X/XP)>:

Center point: pick a point 4.

Magnification or Heigh<9.0000>:4.5.000000000

Command: nil

Command:

Functia C:ZPLUS

O sintaxa speciala pentru numele functiei definite de utilizator ne permite sa apelam functia sub o forma prescurtata fara sa folosim paranteze. Aceasta functie apare mai curind sub forma unei comenzi AutoCAD decit sub forma unei functii.

Daca numele unei functii incepe cu litera C:, atunci functia poate fi apelata fie sub forma unei functii sau sub forma unei comenzi.

Daca numele unei functii incepe cu caracterul C:, functia poate fi apelata pe linia de comanda fie ca o functie, fie ca o comanda.

in acest exemplu, functia c:zplus este apelata ca o functie si ca o comanda.

Exemplu

Introduceti expresiile care urmeaza. Definiti functia c:zplus si apelati-o in ambele moduri, ca o functie si ca o comanda.

Command: (defunc: zplus ()
1> (setq zplus-height (* 0.5 (getvar 'viewsize')))
1> (command 'zoom' 'c' pause zplus-height))
C:ZPLUS
Command: (c:zplus)
All/Center/Dynamic/Extents/Left/Previous/Vmax/Window/<Scale(X/XP)>:c
Center point: pick a point
Magnification or Height <2.250000>: 1125000000000
Command: nil


Command:zplus

All/Center/Dynamic/Extents/Left/Previous/Vmax/Window/<Scale(X/XP)>:c Center point: pick a point

Magnification or Height <9.0000>: 4.5000000000
Command:nil

Command:

Recapitulare

Simbolul pause permite utilizatorului sa raspunda la o cerere dintr-o comanda AutoCAD apelata de functia AutoLISP de tip command.

Functia getvar stabileste valoarea variabilei de sistem.

Prefatind numele unei functii definita de utilizator cu C: se creaza o noua comanda AutoCAD

exercitiul 14: crearea de noi comenzi autocad

Trebuie sa completati partea I a acestui exercitiu, deoarece se vor face referiri la aceasta parte si in alte exercitii.

in acest exercitiu veti:

Crea comenzi noi in AutoCAD din functii AutoLISP.

Modifica o functie existenta dintr-un exercitiu anterior si o veti transforma intr-o comanda.

Partea I

Modificati functia rectangle din partea a III-a a exercitiului 11-1.

Definiti functia ca c:rectangle.

Scrieti functia mai jos.

Testati-o in AutoCAD.

Partea a II-a

Definiti o functie numita c:zminus.

Aceasta trebuie sa faca aceleasi lucruri ca si functia c:zplus, dar schimbati factorul de afisare de la 2 la 1/2.

Scrieti functia mai jos.

Testati-o in AutoCAD.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 937
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved