Advertisement
Guest User

Untitled

a guest
May 19th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.50 KB | None | 0 0
  1. (defun c:CENTERCIRCLES ( / sset center edata eid etype centergroup ix xg yg nrent cg)
  2.  
  3. ; utilizatorul selecteaza un nr de entitati si apasa enter
  4. (setq sset (ssget))
  5. ; initializeaza variabile locale
  6. ; slen - nr de entitati selectate
  7. ; ix - nr entitatii curente
  8. ; xg - abscisa centrului de greutate a cercurilor
  9. ; yg - ordonata centrului de greutate a cercurilor
  10. ; nrent - nr de cercuri
  11. (setq slen (sslength sset)
  12. ix 0
  13. xg 0
  14. yg 0
  15. nrent 0
  16. )
  17. ;iteram peste entitatiile selectate
  18. (while (< ix slen)
  19. (setq edata (entget (ssname sset ix));obtinem lista asociativa a entitatii de la pozitia ix
  20. eid (cdr (assoc -1 edata));obtinem id entitatii curente
  21. etype (cdr (assoc 0 edata));obtinem tipul entitatii curente
  22. )
  23. ;verificam daca entitatea este cerc prin verificarea tipului
  24. (if (/= etype "CIRCLE");nu este cerc
  25. (progn
  26. (princ "Warning! [")
  27. (princ eid)
  28. (princ "] was not a [CIRCLE], but a [");afiseaza pe ecran ca nu este cerc si se sare peste entitate
  29. (princ etype)
  30. (princ "]; skipped.\n")
  31. )
  32. (progn; entitatea este cerc
  33. (setq centergroup (assoc 10 edata);obtinem coordonatele cercului
  34. xg (+ xg (cadr centergroup));adunam la abscisa centrului de greutate abscisa centrului cercului
  35. yg (+ yg (caddr centergroup));adunam la ordonata centrului de greutate ordonata centrului cercului
  36. nrent (1+ nrent);incrementam nr de entitati
  37. )
  38. )
  39. )
  40.  
  41. ; urmatoarea entitate
  42. (setq ix (1+ ix))
  43. )
  44. ;calculam coordonatele centrului de greutate
  45. (setq xg (/ xg nrent)
  46. yg (/ yg nrent)
  47. cg (list xg yg 0.0)
  48. ix 0
  49. )
  50.  
  51. ; parcurgem inca o data entitatiile selectate
  52. (while (< ix slen)
  53. (setq edata (entget (ssname sset ix)))
  54. (setq centergroup (assoc 10 edata)
  55. edata (subst (cons 10 cg) centergroup edata);modificam coordonatele centrului cercului curent cu coordonatele cercului de greutate
  56. )
  57. (entmod edata);redesenam cercul
  58. ;urmatoarea entitate
  59. (setq ix (1+ ix))
  60. )
  61.  
  62. ;sa nu afiseze la sfarsit nimic
  63. (princ)
  64. )
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85. ------------------------------------------------------------------------
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94. ;;;functie registru pentru date personale
  95. ;;; Registrul este o lista care contine liste de înregistrari asociative cu urmatoarea structura: ((pn. <prenume>) (nf .<nume de familie>) (v . <vârsta>))
  96. ;;; Registrul este pastrat în variabila globala numita PD_DATA.
  97. ;;Datele solicitate de la utilizator pentru o noua intrare le adauga în lista
  98. (defun C:DP_ADINREG ( / prenume nume varsta inreg)
  99.  
  100. ; preia datele de la utlizator
  101. (initget 1)
  102. (setq prenume (getstring "\nIntroduceti prenumele: "))
  103. (initget 1)
  104. (setq nume (getstring "\nIntroduceti numele: "))
  105. (initget 7)
  106. (setq varsta (getint "\nIntroduceti varsta: "))
  107. ; Creeaza si adauga o înregistrare
  108. ; Remarcati utilizarea functiei (cons)cu doi atomi ca si argumente
  109. ; si faptul ca noua înregistrare trebuie sa fie o lista creata cu
  110. ; functia (list) înainte de a o adauaga lui DP_DATA
  111. (setq inreg (list (cons 'pn prenume) (cons 'nf nume)
  112. (cons 'v varsta))
  113. DP_DATA (append DP_DATA (list inreg))
  114. )
  115.  
  116. ; anuleaza printarea rezultatului functiei
  117. (princ)
  118. )
  119.  
  120. ;; Listeaza continutul registrului de date personale intr-o forma inteligibila
  121. (defun C:DP_LISTARE ( / curent inreg n)
  122.  
  123. ;nu dorim pierderea pointer-ului spre înregistrarea actuala
  124. ;astfel ca vom folosi o variabila interna pentru a parcurge lista
  125. ;si spre alte inregistrari
  126. (setq curent DP_DATA n 1)
  127. ; pointerul va ajunge la sfârsitul listei cand va atinge NIL
  128. ; la sfârsitul listei, valoare care va folosita pentru a parasi bucla
  129. (while curent
  130. (setq inreg (car curent)) ; preia datele
  131. ; data este stocata în zona de acces prin cdr a listelor
  132. ;asociative ale inregistrarii
  133. ; iar cheia de cautare este data de car
  134. (princ (strcat "\n Inregistrarea" (itoa n)
  135. ": " (cdr (assoc 'pn inreg))
  136. ", " (cdr (assoc 'nf inreg))
  137. ". Varsta " (itoa (cdr (assoc 'v inreg)))
  138. )
  139. )
  140. (setq curent (cdr curent) ;urmatoarea înregistrare
  141. n (1+ n)
  142. )
  143. )
  144. (princ) )
  145.  
  146.  
  147.  
  148. (defun C:DP_SEARCH (x y / curent inreg n)
  149.  
  150.  
  151. (setq curent DP_DATA n 1)
  152.  
  153. (while curent
  154.  
  155. (setq inreg (car curent))
  156.  
  157. (setq varsta (cdr (assoc 'v inreg)))
  158.  
  159. (if(<= x varsta y)
  160.  
  161. (princ (strcat "\n Inregistrarea" (itoa n)
  162. ": " (cdr (assoc 'pn inreg))
  163. ", " (cdr (assoc 'nf inreg))
  164. ". Varsta " (itoa (cdr (assoc 'v inreg)))
  165. )
  166. )
  167.  
  168. )
  169.  
  170. (setq curent (cdr curent)
  171. n (1+ n))
  172.  
  173. )
  174.  
  175. (princ)
  176.  
  177. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement