Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Calculatoare


Qdidactic » stiinta & tehnica » informatica » calculatoare
Introducere in Auto LISP - limbajul LISP (LISt Processing)



Introducere in Auto LISP - limbajul LISP (LISt Processing)



 Limbajul LISP (LISt Processing) a fost creat in anii  50 (John McCarthy - 1958), fiind destinat domeniului inteligentei artificiale. Modelul sau logico-matematic se bazeaza pe calculul LAMBDA (elaborat in 1941, ca instrument in studiul teoretic al calculabilitatii). AutoLISP este un dialect al limbajului XLISP (eXperimental LISP - David Betz). Autodesk a ales LISP ca limbaj de programare in AutoCAD pentru ca are posibilitatea de a lucra cu liste. De exemplu, coordonatele unui punct sunt continute intr-o lista. LISP-ul poate manipula structuri oricat de complexe de date, structuri ce se construiesc dinamic, in cursul
executiei programului. Datele sunt organizate in liste. Lista este o secventa oarecare de elemente, care pot fi liste sau atomi. Atomii sunt obiectele primare cu care lucreaza LISP-ul; pot fi simboluri, numere sau siruri de caractere. Grupurile de atomi formeaza liste, care la randul lor pot fi grupate in alte liste. Acest mod de organizare a informatiei ofera o mare flexibilitate programului, dar are dezavantajul consumului mai mare de memorie, deoarece fiecare element din lista trebuie sa fie insotit de adresa elementului urmator.

 Notatia folosita pentru liste este:

  (a1 a2 .. an)    , unde a1an sunt atomi sau alte elemente AutoLISP.
 

 Tipuri de date folosite de AutoLISP

Simboluri
(symbols)
Sunt utilizate pentru memorarea unor valori. De exemplu, (setq s 1) atribuie simbolului (variabilei) s valoarea 1.

Liste
(lists)
O lista este o colectie de simboluri, numere sau siruri. Coordonatele unui punct sunt stocate intr-o lista de forma (x y z).
(1.0 2.0 3.0) este lista corespunzatoare punctului cu coordonatele (1 ).

Siruri
(strings)
Sirul este o colectie de caractere alfanumerice. Lungimea maxima a unei constante de tip string este de 132 caractere. O variabila string de orice lungime poate fi creata folosind functia strcat (concatenarea sirurilor).

Numere intregi
(integers)
Un intreg este un numar fara punct zecimal. Un intreg AutoLISP este un numar cu semn, stocat pe 32 de biti. AutoCAD-ul nu intelege decat intregi de 16 biti, deci limiteaza valoarea pe care AutoLISP-ul i-o poate transfera la 32767 si respectiv -32768. Pentru a folosi intregi mai mari, se poate face conversia in numere reale.



Numere reale
(reals)
Sunt numere care contin punctul zecimal.
   Ex:  (setq a 1)       - a este intreg
          (setq a 1.0)    - a este real

Descriptori de fisiere
(file descriptors)
Descriptorul de fisier este eticheta asignata unui pointer la fisierul respectiv.
    Ex:    (setq f (open 'fis.ext' 'r'))      - f este descriptor de fisier

Nume de entitati
(entity names)
Entitatile AutoCAD pot fi referite prin AutoLISP, folosind eticheta numerica a acestora.
   Ex:   (setq e (entlast))
           <Entity name: 60000016>

Multimi de selectie
(selection sets)
O multime de selectie este un grup de una sau mai multe entitati. Poate fi creata cu functia AutoLISP ssget.
   (setq m (ssget))   va produce prompterul:
      Select objects:
La incheierea selectarii va returna:    <Selection set: 1>

Functii
Functiile sunt folosite de AutoLISP pentru evaluarea listelor.
Numele functiei este totdeauna primul element al listei (este constructorul listei). Functii noi pot fi definite folosind functia defun.
 

 Variabilele AutoLISP

 In AutoLISP exista patru tipuri de variabile: numere intregi (cu semn), numere reale, puncte si siruri.
  Exemple: intreg  1
    real  1.0
    punct 2D (1.1 10.5)
    punct 3D (1.1 10.5 3.4)
    sir  'SIR'

 Pi este un nume de variabila predefinit, dar utilizatorul poate sa-l redefineasca.
 Tipul unei variabile se defineste implicit prin setarea variabilei respective.
 
  Exemplu: (setq a 1)  a este intreg
    (setq a 1.0) a este real
 


 Exista mai multe nivele la care poate fi utilizat AutoLISP-ul:

  - utilizarea unor programe AutoLISP existente
  - evaluarea de expresii AutoLISP in timpul unei sesiuni obisnuite de desenare
  - scrierea programelor AutoLISP

 AutoLISP preia controlul in momentul deschiderii unei paranteze, si il cedeaza la inchiderea parantezei.

 Evaluarea expresiilor AutoLISP

 Inima interpretorului AutoLISP este evaluatorul. Acesta preia fiecare linie de la dispozitivul de intrare (tastatura sau fisier) si returneaza rezultatul evaluarii ei, astfel:
 - constantele, sirurile, descriptorii de fisiere si functiile returneaza propria lor valoare.
 - simbolurile (variabilele) returneaza valoarea lor curenta.
 - listele sunt evaluate in functie de primul element.

 Utilizarea programelor AutoLISP

 In pachetul AutoCAD sunt incluse multe fisiere cu extensia .LSP. Acestea contin programe LISP, ce se pot incarca in cursul unei sesiuni de desenare cu load, astfel:

  Command: (load 'xplode')
  C:XPLODE

 De acum XPLODE este o comanda AutoCAD obisnuita.
 Incarcarea automata a programelor LISP se poate face prin includerea fisierelor sau a comenzilor de incarcare a acestora in fisierul ACAD.LSP. Acesta este incarcat automat la pornirea AutoCAD-ului.
 De exemplu, continutul fisierului ACAD.LSP poate fi:

  (load 'xplode')
  (load 'elist')
  (load '3D')
  (princ)

 Se pot folosi programe AutoLISP in felul acesta, fara sa fie necesara cunoasterea continutului lor.
 

 Introducerea programelor de la tastatura

 AutoLISP-ul este implementat printr-un interpretor, ceea ce permite introducerea programelor de la tastatura, linie cu linie. Fiecare linie reprezinta o lista, care va fi evaluata imediat dupa inchiderea ei, adica dupa inchiderea tuturor parantezelor deschise in lista respectiva. AutoLISP semnalizeaza daca o paranteza a ramas deschisa prin
 
 1>

sau pentru doua paranteze deschise

 2>  s.a.m.d.

 Setarea unei variabile se face astfel:

 Command: (setq a 1) - atribuie variabilei a valoarea intreaga 1.

 Command: (setq a 1.0) - atribuie variabilei a valoarea reala 1.0

Se poate citi valoarea unei variabile prin apelarea numelui acesteia precedat de semnul '!':

 Command: !a
 1.0
Putem folosi acest mod de apelare al variabilelor si in cadrul unei comenzi:

 Command: (setq p1 '(0.0 0.0))
 (0.0 0.0)
 Command: (setq p2 '(10.0 10.0))
 (10.0 10.0)
- pana aici am definit doua puncte 2D
- acum desenam o linie intre ele:
 
 Command: LINE
 From point: !p1
 To point: !p2
 To point: Enter

 Pentru a folosi rezultatul evaluarii unei variabile AutoLISP intr-un text, variabila TEXTEVAL trebui sa aiba valoarea 1, altfel '!' sau '(' vor fi tratate ca orice alt caracter. Nu se poate folosi un nume de variabila pentru a inlocui o comanda AutoCAD.
 
Exemplu:
 
 Command: (setq a 'LINE')
 'LINE'
 Command a
 'LINE'
- nu se executa comanda 'LINE'; se evalueaza variabila a.

 Evaluarea unei expresii se face astfel:

 Command: (+ 1.0 1.0)
 2.0
- 2 este rezultatul adunarii 1.0+1.0.

 Scrierea programelor AutoLISP

 Un program AutoLISP se scrie de obicei intr-un fisier, folosind un editor de texte care produce fisiere ASCII.
 Programul urmator defineste o functie AutoLISP care dupa incarcarea fisierului cu load va putea fi utilizata ca o comanda AutoCAD cu numele ELIST. Rezultatul executiei sale va fi lista corespunzatoare entitatii selectate.

;comanda de listare a continutului listei
;asociate unei entitati selectate

(defun c:elist()
   (setq e (entsel))
   (setq e (car e))
   (setq l (entget e))
   (setq nume (cdr (assoc '0 l)))
   (if (= nume 'POLYLINE') (progn
 (setq n (getint 'nNumarul vertexului : '))
        (repeat n
  (setq e (entnext e))
 )
   ))
   (setq l (entget e))
)

Alt exemplu: selectarea tuturor entitatilor din desen care au culoarea rosie (cod 1):

(defun rosu()
   (setq e (entnext))
   (setq m (ssadd))
   (while (/= e nil)
      (setq l (entget e))
      (setq color (cdr (assoc '62 l)))
      (if (= color 1) (setq m (ssadd e m)))
      (setq e (entnext e))
   )
)
 
Apelarea acestei functii se face in felul urmator:

 Command: (load 'rosu')
 ROSU
 Command: (rosu)

Rezultatul executiei sale este crearea multimii de selectie m, care va contine toate entitatile care au culoarea rosie (exceptandu-le pe cele aflate intr-un eventual layer cu culoarea implicita 1).




Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright