Topograf Online

Software => LISP, AutoLISP => Subiect creat de: costincalin_66 din Feb 05, 2013, 07:08 PM

Titlu: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 05, 2013, 07:08 PM
Practic este primul meu program.

(setq h (getreal "Inaltimea scarii: "))
(setq L (getreal "Lungimea scarii: "))
(setq nr (getreal "Nr de trepte: "))      
;  (setq h 200.0 L 360.0 nr 5.0 p1 (list 0.0 0.0) i 0)
(setq p1 (getpoint "Punctul de plecare: "))
(setq i 1)
(while (<= i nr)  
 (princ p1)
 (setq p2 (list (car p1) (+ (cadr p1) (/ h nr))))
 (princ p2)
 (setq p3 (list (+ (car p2) (/ L (- nr 1))) (cadr p2)))
 (princ p3)
 (command "pline" p1 p2 p3 "")
 (setq p1 p3)
 (setq i(+ 1 i))   )
(princ "     OK Scara!")

Cateodata a functionat bine. Dar in rest desi calculeaza bine, traseaza prost. La fel face si cu "line". Acum traseaza doar prima treapta iar in rest o linie de la p1 la p3, p2 fiind asimilat in unul din el
De ce?

Modificat de costincalin_66 (05-02-2013 17:09:31)
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 05, 2013, 07:13 PM
Nu am reusit sa folosesc visual lisp ul.
Am tot incercat. Am mai lucrat in pascal sau C cu astfel de debug-ere. Dar asta nu am reusit sa-l clintesc, sa-l fac sa interpreteze linie cu linie sau cum o face el, nici macar un pas.
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: John Doe din Feb 05, 2013, 08:20 PM
Daca apesi F2, vezi ce mesaj de eroare iti da, si poti cauta de unde provine.
M-am straduit putin si mi-a dat "divide by zero", si cautand am vazut ca la un moment dat lungimea scarii se imparte la numarul de trepte minus unu. Daca numarul de trepte este una, normal ca asa iese.

In principiu, dupa ce ai scris o aplicatie incerci sa-ti dai seama cam ce erori ar putea sa-ti dea, considerând ca userul introduce ce valori are el chef, si incerci sa le previi.

La numarul asta de trepte, ai putea scrie de exemplu:
(setq nr 1)
(while (<= nr 1)
(setq nr (getreal "Nr de trepte: "))
);;;WHILE

Mai departe cauta tu, poate mai sunt si altele.
Eu folosesc ca editor Notepad++, e foarte bun - e free, gasesti pe Net. Spor !
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: zamfy din Feb 05, 2013, 08:29 PM
In primul rand, programul tau nu are definita nicio functie. Aceasta trebuie definita la inceputul programului prin defun (nume_functie) (argumentele in paranteze). In al doilea rand, algoritmul tau calculeaza eronat lungimea scarii. Am refacut programul tau si l-am si testat de cateva ori si e ok.
Acesta este programul refacut:

(defun c:test (/ p1 p2 p3 h L nr)
(setvar "CMDECHO" 0)
(command "_.undo" "_begin")
(setq h (getreal "\nInaltimea scarii: "))
(setq L (getreal "\nLungimea scarii: "))
(setq nr (getint "\nNr de trepte: "))     
;  (setq h 200.0 L 360.0 nr 5.0 p1 (list 0.0 0.0) i 0)
(setq p1 (getpoint "Punctul de plecare: "))
(repeat  nr 
  (setq p2 (list (car p1) (+ (cadr p1) (/ h nr))))
  (setq p3 (list (+ (car p1) (/ L nr)) (+ (cadr p1) (/ h nr))))
  (command "pline" p1 p2 p3 "")
  (setq p1 p3)
  )
 (command "_.undo" "_end")
(princ)
  )

Salvezi codul intr-un lisp si cand il incarci, folosesti comanda test. Dupa defun c: poti pune ce denumire vrei, in loc de "test". Oricum, pentru primul program in lisp, e destul de bine. Succes!

Modificat de zamfy (05-02-2013 20:51:43)
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: zamfy din Feb 05, 2013, 08:52 PM
Poti folosi si functia initget in combinatie cu getkword pentru a forta utilizatorul sa introduca doar anumite valori.
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: John Doe din Feb 05, 2013, 08:58 PM
@zamfy: voiam sa-l las pe el sa se prinda la tipul de variabila... te banez... :D
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: diagodose2009 din Feb 06, 2013, 12:47 PM
CitatNu am reusit sa folosesc visual lisp ul.
Am tot incercat. Am mai lucrat in pascal sau C cu astfel de debug-ere. Dar asta nu am reusit sa-l clintesc, sa-l fac sa interpreteze linie cu linie sau cum o face el, nici macar un pas.


Salut...
Tu inveti aici : cum rulezi "VISUAL-LISP editor" in modul "debug" pas cu pas
Operatiile nu sunt grele, doar ca sunt cateva operatii , care trebuie urmate obligatoriu (similar cu la soferie : cedeaza trecerea, trecere peste bariera)


http://lisp2arx.3xforum.ro//redir.php?http://www.puiubrat.3x.ro//adve2012/ameapi/vlide_userbreak.rar (http://lisp2arx.3xforum.ro//redir.php?http://www.puiubrat.3x.ro//adve2012/ameapi/vlide_userbreak.rar)
Program de vizualizare: BsPlayer.exe dela webtech(c)
Atentie filmul are size=200MB si rezolutie 800x600(aproximativ).

=D

Modificat de diagodose2009 (06-02-2013 13:02:41)
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 06, 2013, 04:39 PM
CitatAm refacut programul tau si l-am si testat de cateva ori si e ok.

(defun c:test (/ p1 p2 p3 h L nr)
(setvar "CMDECHO" 0)
(command "_.undo" "_begin")
(setq h (getreal "\nInaltimea scarii: "))
(setq L (getreal "\nLungimea scarii: "))
(setq nr (getint "\nNr de trepte: "))      
;  (setq h 200.0 L 360.0 nr 5.0 p1 (list 0.0 0.0) i 0)
(setq p1 (getpoint "Punctul de plecare: "))
(repeat  nr  
  (setq p2 (list (car p1) (+ (cadr p1) (/ h nr))))
  (setq p3 (list (+ (car p1) (/ L nr)) (+ (cadr p1) (/ h nr))))
  (command "pline" p1 p2 p3 "")
  (setq p1 p3)
  )
 (command "_.undo" "_end")
(princ)
  )


Salvezi codul intr-un lisp si cand il incarci, folosesti comanda test. Dupa defun c: poti pune ce denumire vrei, in loc de "test". Oricum, pentru primul program in lisp, e destul de bine. Succes!

Prima mea impresie ramane. Am o setare care imi produce haosul asta. Am executat functia astfel definita de trei ori la rand cu aceleasi date introduse si am pus poza ecranului. Astfel poate devine evidenta problema.

Alta problema, ar mai fi cum trag toata scara intr-o singura pline (adica sa nu iasa intrerupta, treapta cu trteapta). Cum poate sa ma astepte  (command "pline" p1 p2 p3 ) pana mai fac un ciclu repeat.

(http://topograf.3xforum.ro/img/pics/topograf.3xforum.ro/ok_36030.jpg)
582/210px 21.8KB
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 06, 2013, 04:44 PM
Sper ca aici se vede mai bine

(http://topograf.3xforum.ro/img/pics/topograf.3xforum.ro/ok_36031.jpg)
581/291px 26.8KB
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 06, 2013, 04:58 PM
Citat din: John DoeDaca apesi F2, vezi ce mesaj de eroare iti da, si poti cauta de unde provine.
M-am straduit putin si mi-a dat "divide by zero", si cautand am vazut ca la un moment dat lungimea scarii se imparte la numarul de trepte minus unu. Daca numarul de trepte este una, normal ca asa iese.

In principiu, dupa ce ai scris o aplicatie incerci sa-ti dai seama cam ce erori ar putea sa-ti dea, considerând ca userul introduce ce valori are el chef, si incerci sa le previi.

La numarul asta de trepte, ai putea scrie de exemplu:
(setq nr 1)
(while (<= nr 1)
(setq nr (getreal "Nr de trepte: "))
);;;WHILE

Mai departe cauta tu, poate mai sunt si altele.
Eu folosesc ca editor Notepad++, e foarte bun - e free, gasesti pe Net. Spor !

E inca in dezvoltare programul si fiind primul l-am facut cat mai simplu, urmand sa-l slefuiesc treptat. Am folosit mult timp o linia care este acum comentariu ca sa nu introduc la fiecare rulare toate datele(si interogarile erau comentarii). Practic cand am reinceput sa folosesc interogarea a inceput sa mearga prost.( ca in poza)

Ms, am luat notepadu
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 06, 2013, 05:04 PM
Citat din: zamfy(command "_.undo" "_begin")
...
(command "_.undo" "_end")

Oricum, pentru primul program in lisp, e destul de bine. Succes!

Nu imi dau seama ce face undo begin (continut) undo end pentru continut

O fi in lisp primul, dar in tinerete am scris mult pascal, basic. Ms

Modificat de costincalin_66 (06-02-2013 17:06:34)
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 06, 2013, 05:06 PM
Citat din: diagodose2009
Citat din: costincalin_66Nu am reusit sa folosesc visual lisp ul.
Am tot incercat. Am mai lucrat in pascal sau C cu astfel de debug-ere. Dar asta nu am reusit sa-l clintesc, sa-l fac sa interpreteze linie cu linie sau cum o face el, nici macar un pas.


Salut...
Tu inveti aici : cum rulezi "VISUAL-LISP editor" in modul "debug" pas cu pas
Operatiile nu sunt grele, doar ca sunt cateva operatii , care trebuie urmate obligatoriu (similar cu la soferie : cedeaza trecerea, trecere peste bariera)


http://lisp2arx.3xforum.ro//redir.php?http://www.puiubrat.3x.ro//adve2012/ameapi/vlide_userbreak.rar
Program de vizualizare: BsPlayer.exe dela webtech(c)
Atentie filmul are size=200MB si rezolutie 800x600(aproximativ).

 =D

Ms. Am sa-l studiez
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: adrianc din Feb 06, 2013, 05:10 PM
_.undo -> begin - apeleaza inceputul functiei undo. De aici incolo se considera o singura operatie.
_.undo -> end - sfarseste inregistrarea din funcita undo.
De exemplu, daca nu as apela treaba asta, daca nu-mi convine ce iese, trebuie sa dau undo de n ori (in cazul lispului de fata de nr ori, sau nr-1 ori..)
Daca folosim _.undo, tot ce se intampla intre begin si end este tratat in bloc. Am rulat, nu-mi place, un singur undo si dispare.
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: zamfy din Feb 06, 2013, 07:05 PM
Comanda "undo-begin" si "undo-end" a devenit un standard in toate programele pe care le fac. Explicatia lui adrianc este foarte logica si limpede. In visual lisp, poti folosi si functiile vl-startundomark si vl-endundomark (daca faci programul si pt. Bricscad de ex.).
Lisp-ul meu l-am testat pe AutoCAD 2007 si merge perfect. Un mic sfat: incearca sa reinstalezi versiunea de AutoCAD, poate ca ai niscaiva erori prin registri.
In "tinerete" (pe la 17 ani adica :) ), m-am jucat si eu putin in C++, dar Lisp-ul mi se pare aproape la fel de usor de invatat ca html.
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: zamfy din Feb 06, 2013, 08:06 PM
Citat din: costincalin_66Alta problema, ar mai fi cum trag toata scara intr-o singura pline (adica sa nu iasa intrerupta, treapta cu trteapta). Cum poate sa ma astepte  (command "pline" p1 p2 p3 ) pana mai fac un ciclu repeat.
Am modificat programul ca sa faca si acest lucru:

(defun c:test (/ p1 p2 p3 h L nr list1)
(setvar "CMDECHO" 0)
(command "_.undo" "_begin")
(setq h (getreal "\nInaltimea scarii: "))
(setq L (getreal "\nLungimea scarii: "))
(setq nr (getint "\nNr de trepte: "))     
;  (setq h 200.0 L 360.0 nr 5.0 p1 (list 0.0 0.0) i 0)
(setq p1 (getpoint "Punctul de plecare: "))
(repeat  nr 
  (setq p2 (list (car p1) (+ (cadr p1) (/ h nr)) 0.0))
  (setq p3 (list (+ (car p1) (/ L nr)) (+ (cadr p1) (/ h nr)) 0.0))
  (setq list1 (append (list (list (car p3) (cadr p3)) (list (car p2) (cadr p2)) (list (car p1) (cadr p1))) list1))
  (setq p1 p3)
  )
  (command "_.pline")
  (mapcar 'command list1)
  (command "")
 (command "_.undo" "_end")
(princ)
  )
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 07, 2013, 04:21 PM
F. interesant. Am salvat exemplul tau intr-un fisier aparte ca sa il am de lectie cand voi mai avea nevoie.
Am gasit si eu o solutie. Am gasit si solutia pt care aratau scarile aiurea. Era Objectsnap ul.
Am periat programul si l-am coafat pana m-am declarat multumit.

Asta este primul meu program LISP!!! :finger:

(defun c:SC (/ p1 p2 p3 h L nr osm h1 L1)
(setvar "CMDECHO" 0)
(command "_.UNDO" "_BEGIN")
(setq h   (getreal  "\nInaltimea scarii  : ")
      L   (getreal  "\nLungimea scarii   : ")
      nr  (getint   "\nNr de trepte      : ")     
      p1  (getpoint "\nPunctul de plecare: ")
      osm (getvar   "OSMODE")
  h1 (/ h nr)
      L1 (/ L (- nr 1)))
(princ              "\nInaltime Treapta  :")
(princ h1)
(princ              "\nAdancime Treapta  :")
(princ L1)
(setvar "OSMODE" 0)
(command "PLINE" p1)
(repeat  nr 
  (setq p2 (list (car p1) (+ (cadr p1) h1)))
  (setq p3 (list (+ (car p1) L1) (+ (cadr p2))))
  (command p2 p3)
  (setq p1 p3)  )
(command "" "_.UNDO" "_END")
(setvar "OSMODE" osm)
(setvar "CMDECHO" 1)
(princ))

Modificat de costincalin_66 (07-02-2013 16:22:25)
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 07, 2013, 04:40 PM
Mai am o problema care nu i-am gasit rezolvare. Poate este complicata.

Presupunem ca desenam un obiect rectangle. Vreau sa-l pot indentifica cumva pentru ca mai tarziu sa-l pot folosi,
pentru o selectie de move, hasura, sau sa aflu diverse propietati gen:
  - nume_obiect_x.area
  - nume_obiect_x.propietate_x.

Este posibil in lisp!
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: zamfy din Feb 07, 2013, 05:31 PM
Foarte bine ca ai gasit propria implementare a algoritmului. In LISP poti gasi n solutii la aceeasi problema. Totusi, am o observatie: in programul tau nu ar trebui ca L (lungimea scarii) sa fie egala cu L1(adancime treapta)*nr (numarul de trepte)? Daca nu, imi cer scuze pentru intelegerea eronata a programului.
Pentru cea de-a doua problema, uite o rezolvare simpla:
-sa zicem ca desenezi un dreptunghi si vrei sa il folosesti mai tarziu in program:
(command "rectangle" pause pause)
(setq patrat (entlast))
;;aici iti continui programul si dupa un timp vrei sa muti dreptunghiul
;;
(command "move" patrat "" pause pause)
;;etc.
;;acum vrei sa il stergi
(entdel patrat)
;;etc
Si mai jos iti dau 2 functii foarte utile luate dupa net:

elist-> ruleaza cu comanda elist sau ee si iti arata o lista cu toate codurile dxf ale unei entitati
(defun elist ( entity / prin1x princx data xdata )

    (defun prin1x ( x i ) (repeat i (princ "  ")) (prin1 x))
    (defun princx ( x i ) (repeat i (princ "  ")) (princ x))

    (cond
        (   (or
                (and
                    (eq 'ENAME (type entity))
                    (setq data (entget entity))
                )
                (and
                    (listp entity)
                    (setq data entity)
                    (setq entity (cdr (assoc -1 data)))
                )
            )
            (princ "\n\n  (\n")
            (foreach pair data
                (prin1x pair 2)
                (princ "\n")
            )
            (if (setq xdata (assoc -3 (entget entity '("*"))))
                (progn
                    (princx "(" 2)
                    (prin1 (car xdata))
                    (princ "\n")
                    (foreach app (cdr xdata)
                        (princx "(" 3)
                        (princ "\n")
                        (foreach pair app (prin1x pair 4) (princ "\n"))
                        (princx ")" 3)
                        (princ "\n")
                    )
                    (princx ")" 2)
                    (princ "\n")
                )
            )
            (princ "  )")
            (if (= 1 (cdr (assoc 66 data)))
                (while
                    (progn
                        (elist (setq entity (entnext entity)))
                        (not (eq "SEQEND" (cdr (assoc 0 (entget entity)))))
                    )
                )
            )
        )
        (   (print entity)   )
    )
    (princ)
)

(defun c:ee  nil (elist (car (entsel))))
(defun c:eex nil (elist (car (nentsel))))

dump->iti arata proprietatile unei entitati convertite in vla-object
(defun LM:Dump ( object ) (vl-load-com)
  (if
    (setq object
      (cond
        ( (eq 'ENAME (type object))
          (vlax-ename->vla-object object)
        )
        ( (listp object)
          (cdr (assoc -1 object))
        )
        ( (eq 'VLA-OBJECT (type object))
          object
        )
      )
    )
    (progn
      (vlax-dump-object object t)
      (textpage)
    )
  )
  (princ)
)

(defun c:dump  nil (LM:Dump (car (entsel))))

(defun c:dumpn nil (LM:Dump (car (nentsel))))

Sursa celor 2 functii: http://www.lee-mac.com/

Modificat de zamfy (07-02-2013 17:33:34)
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 08, 2013, 03:58 PM
Citat din: zamfy...Totusi, am o observatie: in programul tau nu ar trebui ca L (lungimea scarii) sa fie egala cu L1(adancime treapta)*nr (numarul de trepte)?
...

Din consideratie practica L este lungimea golului de scara in care incap n-1 trepte si a-n-a este pe nivelul de sosire (se numara si sosirea ca treapta), iar trepte avem n * h1=h adica dif de cote dintre nivele.

Cat despre indentificarea unui obiect este simplu.

Programelele de indentificare a propietatilor sunt greoaie. De altfel ma asteptam, neavand decat atom si list ca tipuri de var(lipsind record si object). La nivelul meu de incepator este demoralizant ca in loc de "rectangle.area" sa folosesc o gramada de car si cdr in ciclu.

Multumesc mult!
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: zamfy din Feb 08, 2013, 04:58 PM
Depinde. De ex., aria unui obiect o poti afla foarte usor astfel:
(command "rectangle" pause pause)
(setq sel (entlast))
(command "area" "o" sel)
(setq ar (getvar "area"))
Fiind incepator, nu intru foarte mult in detalii, dar sa stii ca acel rectangle.area il poti afla exact cum vrei tu folosind functiile vla. Pentru asta, convertesti entitatea intr-un vla-object, apelezi la inceputul programului functia (vl-load-com) si apoi accesezi sau schimbi proprietatile entitatii cu o singura comanda.
De ex. la un dreptunghi ii poti afla proprietatea "area" astfel:
(command "rectangle" pause pause)
(setq sel (entlast))
;;il convertim in vla-object
(setq sel (vlax-ename->vla-object sel))
;;acum ii aflam aria
(setq arie (vlax-get sel 'Area))
Pentru alte proprietati si metode suportate, poti folosi functia dump de mai sus.
Succes!
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: John Doe din Feb 08, 2013, 08:17 PM
Toate obiectele sunt stocate de AutoCAD sub forma de liste, care nu contin chiar toate proprietatile obiectului respectiv. Una dintre proprietati este chiar suprafata.
Alte obiecte (de exemplu blocurile) contin si subliste, putin mai dificil dar nu imposibil de accesat.
Altele (de exemplu entitatile MTEXT) nu contin coordonatele colturilor zonei de text, ci doar punctul de start, latimea si inaltimea zonei.
Multe ar fi de spus, n-ai cum sa povestesti totul pe un forum.
Daca te ajuta cu ceva, am cartea d-lui Stancescu despre Autolisp (scanata), e mai veche dar foarte buna si e in lb. româna. Spre surprinderea mea, in helpul LISP de la AutoCAD 2007 textele sunt aproape identice cu cele din cartea asta - nu stiu cine de la cine s-a inspirat.
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 11, 2013, 04:39 PM
Citat din: zamfyFiind incepator, nu intru foarte mult in detalii, dar sa stii ca acel rectangle.area il poti afla exact cum vrei tu folosind functiile vla. Pentru asta, convertesti entitatea intr-un vla-object, apelezi la inceputul programului functia (vl-load-com) si apoi accesezi sau schimbi proprietatile entitatii cu o singura comanda.

Ambele variante sunt bune de stiut. Prima pentru chestiuni curente, iar a doua pentru fineturi unde prima varianta nu mai merge. Ai vreun manual de vla sau un link unde le pot gasi si il consideri succint si bun.
Multumesc!
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Feb 11, 2013, 04:46 PM
Citat din: John DoeAlte obiecte (de exemplu blocurile) contin si subliste, putin mai dificil dar nu imposibil de accesat.
Altele (de exemplu entitatile MTEXT) nu contin coordonatele colturilor zonei de text, ci doar punctul de start, latimea si inaltimea zonei.

si un banal rectangle are doar xy de inceput(in properties). Restul unde poate fi gasit? Chiar m-am intrebat!

Citat din: John DoeDaca te ajuta cu ceva, am cartea d-lui Stancescu despre Autolisp (scanata), e mai veche dar foarte buna si e in lb. româna. Spre surprinderea mea, in helpul LISP de la AutoCAD 2007 textele sunt aproape identice cu cele din cartea asta - nu stiu cine de la cine s-a inspirat.

Da, ma intereseaza f. mult. Daca poti, trimite-mi. La inceput nu prea stii cum sa incepi. Un manual este f.bun. Si orice altcveva. Chiar si linkuri la care pot gasi programele de calitate si instructive.
Multumesc!
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: costincalin_66 din Mar 25, 2013, 03:37 PM
n

Modificat de costincalin_66 (25-03-2013 13:40:23)
Titlu: Re: O data merge bine de cateva ori prost Ce lipseste
Scris de: John Doe din Mar 25, 2013, 09:40 PM
Daca scrii un MTEXT si dai comanda
(entget (car (entsel)))
, ar trebui sa te prinzi la ce identificator din lista ai punctul de start al casetei, si la care ai dimensiunile casetei - le poti masura si tu, le cauti in lista si vezi.
Blocurile sunt ca un grup de elemente; unele proprietati generale ale grupului le vezi in  lista globala a entitatii, iar subentitatile componente sunt prezente doar ca identificator atasat unui cod de grup; se apeleaza mai departe dupa identificatorul asta, ca entitati separate.
O carte despre AutoLISP ai aici: http://dl.transfer.ro/Carte_AutoLISP-transfer_ro-25mar-fc497e.rar . Ai acolo si codurile de entitati asociate.
E scanata cum am putut eu mai demult dar e un manual bun. Pacat ca nu se mai gaseste in librarii. Alte materiale gasesti pe Net câte vrei, nu prea am ce indicatii sa-ti dau. Cauta eventual dupa cuvântul "AFRALISP", au materiale bune si acolo dar in engleza.