CATEGORII DOCUMENTE |
Introducere in limbajul de programare AutoLISP
Aceasta lucrare de laborator urmareste familiarizarea studentilor cu limbajul de programare AutoLISP.
Se foloseste cursul PFAC (CAD-CAM).
Se deschide un document text cu editorul de texte Notepad aflat in START/Programs/Accesories/.
Se salveaza documentul creat cu Notepad astfel:
se selecteaza optiunea Save si din caseta cu tipul fisierului, care implicit afiseaza .txt, se selecteaza All Files (in cazul in care in document nu este introdus nimic, se introduce un caracter pentru a putea fi salvat);
se introduce numele fisierului cu extensia lsp (de exemplu L1.lsp) in caseta pentru introducerea numelui (deasupra casetei pentru extensie (tipul fisierului))
se actioneaza butonul OK.
Se scrie un program minimal in LISP:
(defun c:L1 ()
Explicarea programului:
Orice program AutoLISP contine cel putin o functie care are formatul programului de mai sus. Incepe cu deschiderea unei paranteze, urmata de cuvantul cheie DEFUN dupa care urmeaza numele functiei si parametrii, urmate de corpul functiei (instructiunile executate in cazul apelarii functiei) dupa care se termina prin inchiderea parantezei. ATENTIE ! in AutoLISP orice instructiune este scrisa intre paranteze rotunde.
In cazul exemplului de mai sus este definita functia L1 (s-a folosit la nume un nume scurt pentru usurinta apelarii in ACAD; in cazul existentei mai multor functii, numele acestora vor trebui sa reflecte actiunea functiei (LINE - traseaza o linie)).
Functia nu are parametri (), deci nu cere nimic utilizatorului (asa cum functia LINE solicita introducerea unor puncte intre care se traseaza linia)
Programul ar fi echivalent in Pascal cu:
begin
end.
main ()
programe absolut corecte in ambele limbaje, putand fi compilate si executate. In anumite limite se poate face o paralela intre limbaje, dar sa nu uitam totusi ca limbajele Pascal si C sunt COMPILATOARE, in timp ce limbajul LISP este INTERPRETOR (deci orice functie (comanda) din LISP poate fi executata direct la promterul Command (in AutoCAD bineinteles)).
Se salveaza programul cu comanda SAVE, fara sa se inchida documentul Notepad (deoarece editorul de text nu mentine "deschis" fisierul editat (lucreaza intr-un fisier temporar), este mai comod sa fie mentinut deschis si dupa modificari sa fie salvat, decat sa fie deschis si inchis pentru fiecare modificare).
Se incarca fisierul cu comenzi in AutoCAD cu comanda LOAD.
Daca fisierul lsp nu a fost salvat in directorul AutoCAD, ceea ce oricum nu este indicat (s-ar umple directorul acad de fisiere "in lucru", temporare, etc.), mesajul returnat de AutoCAD va fi:
Command: (load 'l1')
Can't open 'l1.lsp' for input
error: LOAD failed
(LOAD 'l1')
*Cancel*
Se observa ca la fiecare modificare fisierul trebuie reincarcat permanent in AutoCAD. Pentru a automatiza aceasta cream o functie in acest scop, pe care o adaugam in fisierul deja creat.
(defun c:I ()
(load 'd:l1')
(defun c:L1 ()
(princ'gfghf')
In AutoCAD unele comenzi au asociate combinatii de taste (de fapt apelul comenzilor mai des utilizate se poate face prin apasarea unei singure taste). De exemplu comanda zoom poate fi apelata prin apasarea tastei z. Se dau nume functiilor create diferite de numele comenzilor AutoCAD, sau al functiilor AutoLISP predefinite. Nu este necesar sa copiati programul prezentat, deci sa respectati inclusiv conventiile de notare.
Salvam fisierul si il incarcam in AutoCAD.
Command: (load 'd:l1')
C:L1
Se observa ca a fost afisat numele ultimei functii din fisier. Totusi este activa si comanda de incarcare definita mai sus I.
Command: i
C:L1
Pana acum avem un program care afiseaza un mesaj (sir de caractere) cu ajutorul functiei lisp PRINC. In continuare o sa "complicam" programul, adaugandu-i linii pentru obtinerea unui program util. In final programul obtinut va trasa o linie intre doua puncte introduse de la tastatura.
Pentru executia oricarei comenzi AutoCAD Se foloseste functia lisp COMMAND, argumentele acesteia fiind comenzi si subcomenzi AutoCAD. Deci programul va fi completat cu linia:
(defun c:i ()
(load 'd:l1')
(defun c:L1 ()
(princ'Test')
(Command 'LINE' '10,10' '100,100')
Programul va trasa o linie intre punctele de coordonate 10,10 si 100,100.
Il reincarcam cu i si il executam cu l1:
Command: i
C:L1
TestLINE From point: 10,10
To point: 100,100
To point: nil
Analog se defineste si cel de-al doilea punct, pct2.
(setq pct1 (list 10 10))
(setq pct2 (list 100 100))
(Command 'LINE' pct1 pct2 '')
Obtinem acum acelasi efect ca si programul precedent, deosebirea fiind ca in comanda LINE coordonatele punctelor sunt date de variabilele pct1 si pct2. Continuam si variabilele pct1 si pct2 le obtinem din liste de variabile: x1, y1, x2, y2:
(defun c:i ()
(load 'd:l1')
(defun c:L1 ()
(princ'Test')
(setq x1 10)
(setq y1 10)
(setq x2 100)
(setq y2 100)
(setq pct1 (list x1 y1))
(setq pct2 (list x2 y2))
(Command 'LINE' pct1 pct2 '')
GATA
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2196
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved