Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun c:CENTERCIRCLES ( / sset center edata eid etype centergroup ix xg yg nrent cg)
- ; utilizatorul selecteaza un nr de entitati si apasa enter
- (setq sset (ssget))
- ; initializeaza variabile locale
- ; slen - nr de entitati selectate
- ; ix - nr entitatii curente
- ; xg - abscisa centrului de greutate a cercurilor
- ; yg - ordonata centrului de greutate a cercurilor
- ; nrent - nr de cercuri
- (setq slen (sslength sset)
- ix 0
- xg 0
- yg 0
- nrent 0
- )
- ;iteram peste entitatiile selectate
- (while (< ix slen)
- (setq edata (entget (ssname sset ix));obtinem lista asociativa a entitatii de la pozitia ix
- eid (cdr (assoc -1 edata));obtinem id entitatii curente
- etype (cdr (assoc 0 edata));obtinem tipul entitatii curente
- )
- ;verificam daca entitatea este cerc prin verificarea tipului
- (if (/= etype "CIRCLE");nu este cerc
- (progn
- (princ "Warning! [")
- (princ eid)
- (princ "] was not a [CIRCLE], but a [");afiseaza pe ecran ca nu este cerc si se sare peste entitate
- (princ etype)
- (princ "]; skipped.\n")
- )
- (progn; entitatea este cerc
- (setq centergroup (assoc 10 edata);obtinem coordonatele cercului
- xg (+ xg (cadr centergroup));adunam la abscisa centrului de greutate abscisa centrului cercului
- yg (+ yg (caddr centergroup));adunam la ordonata centrului de greutate ordonata centrului cercului
- nrent (1+ nrent);incrementam nr de entitati
- )
- )
- )
- ; urmatoarea entitate
- (setq ix (1+ ix))
- )
- ;calculam coordonatele centrului de greutate
- (setq xg (/ xg nrent)
- yg (/ yg nrent)
- cg (list xg yg 0.0)
- ix 0
- )
- ; parcurgem inca o data entitatiile selectate
- (while (< ix slen)
- (setq edata (entget (ssname sset ix)))
- (setq centergroup (assoc 10 edata)
- edata (subst (cons 10 cg) centergroup edata);modificam coordonatele centrului cercului curent cu coordonatele cercului de greutate
- )
- (entmod edata);redesenam cercul
- ;urmatoarea entitate
- (setq ix (1+ ix))
- )
- ;sa nu afiseze la sfarsit nimic
- (princ)
- )
- ------------------------------------------------------------------------
- ;;;functie registru pentru date personale
- ;;; Registrul este o lista care contine liste de înregistrari asociative cu urmatoarea structura: ((pn. <prenume>) (nf .<nume de familie>) (v . <vârsta>))
- ;;; Registrul este pastrat în variabila globala numita PD_DATA.
- ;;Datele solicitate de la utilizator pentru o noua intrare le adauga în lista
- (defun C:DP_ADINREG ( / prenume nume varsta inreg)
- ; preia datele de la utlizator
- (initget 1)
- (setq prenume (getstring "\nIntroduceti prenumele: "))
- (initget 1)
- (setq nume (getstring "\nIntroduceti numele: "))
- (initget 7)
- (setq varsta (getint "\nIntroduceti varsta: "))
- ; Creeaza si adauga o înregistrare
- ; Remarcati utilizarea functiei (cons)cu doi atomi ca si argumente
- ; si faptul ca noua înregistrare trebuie sa fie o lista creata cu
- ; functia (list) înainte de a o adauaga lui DP_DATA
- (setq inreg (list (cons 'pn prenume) (cons 'nf nume)
- (cons 'v varsta))
- DP_DATA (append DP_DATA (list inreg))
- )
- ; anuleaza printarea rezultatului functiei
- (princ)
- )
- ;; Listeaza continutul registrului de date personale intr-o forma inteligibila
- (defun C:DP_LISTARE ( / curent inreg n)
- ;nu dorim pierderea pointer-ului spre înregistrarea actuala
- ;astfel ca vom folosi o variabila interna pentru a parcurge lista
- ;si spre alte inregistrari
- (setq curent DP_DATA n 1)
- ; pointerul va ajunge la sfârsitul listei cand va atinge NIL
- ; la sfârsitul listei, valoare care va folosita pentru a parasi bucla
- (while curent
- (setq inreg (car curent)) ; preia datele
- ; data este stocata în zona de acces prin cdr a listelor
- ;asociative ale inregistrarii
- ; iar cheia de cautare este data de car
- (princ (strcat "\n Inregistrarea" (itoa n)
- ": " (cdr (assoc 'pn inreg))
- ", " (cdr (assoc 'nf inreg))
- ". Varsta " (itoa (cdr (assoc 'v inreg)))
- )
- )
- (setq curent (cdr curent) ;urmatoarea înregistrare
- n (1+ n)
- )
- )
- (princ) )
- (defun C:DP_SEARCH (x y / curent inreg n)
- (setq curent DP_DATA n 1)
- (while curent
- (setq inreg (car curent))
- (setq varsta (cdr (assoc 'v inreg)))
- (if(<= x varsta y)
- (princ (strcat "\n Inregistrarea" (itoa n)
- ": " (cdr (assoc 'pn inreg))
- ", " (cdr (assoc 'nf inreg))
- ". Varsta " (itoa (cdr (assoc 'v inreg)))
- )
- )
- )
- (setq curent (cdr curent)
- n (1+ n))
- )
- (princ)
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement