Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Liste asociate entitatilor AutoLISP

autocad



+ Font mai mare | - Font mai mic



Liste asociate entitatilor AutoLISP

Puteti folosi numele unei entitati pentru a extrage toate elementele unei entitati. in AutoLISP un astfel de document este reprezentat print-o lista asociata. Listele asociate cuprind subliste ale listelor obisnuite sau perechi cu punct.

Obiective

in acest capitol veti studia:



Formatul unei perechi cu punct sau cum sa creati o astfel de pereche.

Formatul unei liste asociate.

Cum sa extrageti o lista asociata unei entitati.

Cum sa examinati o lista asociata.

Cum sa determinati tipul entitatii din lista asociata.

Perechi cu punct

O pereche cu punct este o forma speciala a unei liste. O pereche cu punct este o lista formata din doua elemente a carei parte cdr din arborele binar se termina cu ultimul element al listei si nu cu nil.

Atit listele obisnuite cit si perechile cu punct sint folosite in listele asociate entitatilor pentru a reprezenta grupul de coduri DXF si valorile asociate acestora.

Perechile cu punct contin intotdeauna doua elemente. Primul element al unei perechi cu punct poate fi stabilit la fel ca si primul element al unei liste obisnuite: cu functia car. Al doilea element al perechii cu punct poate fi stabilit direct cu functia cdr si acest lucru difera de modul in care se stabileste al doilea element dintr-o lista obisnuita.

Exemplu

Perechea cu punct care contine cele doua elemente 0 si 'Line' arata astfel.

(0 . 'LINE')

Ilustratia care urmeaza prezinta arborii binari pentru doua obiecte similare: o lista si o pereche cu punct, ambele continind aceleasi elemente.

Figura 44. Arbori binari pentru lista obisnuita si pereche cu punct avind elemente identice.

Functia cons

Functia cons cere doua argumente obligatorii: o valoare care se adauga si o valoare la care se adauga.

Daca valoarea care se adauga este un atom, atunci functia cons returneaza o pereche cu punct a celor doua elemente.

Daca valoarea la care se adauga este o lista, atunci functia cons returneaza    lista cu primul argument adaugat in capul listei.

Exemplu

Introduceti expresiile care urmeaza.

Formati o lista obisnuita din elementele si 'Line'.

Command: (setq xlist (list 0 'LINE'))
(0 'LINE')

Formati o pereche cu punct din elementele si 'Line'.

Command: (setq xdot (cons 0 'LINE'))
(0 . 'LINE')

Extrageti primul element din lista si din perechea punct cu car.

Command: (car xlist)
0


Command: (car xdot)
0

Extrageti cel de-al doilea element din lista normala cu car si cdr.

Command: (car (cdr xlist))
'LINE'

Extrageti cel de-al doilea element din lista si din perechea punct cu car.

Command: (cdr xdot)
'LINE'

Entitati inregistrate in baza de date si liste asociate

Modul in care AutoLISP-ul reprezinta o entitate inregistrata in baza de date pentru o entitate desenata de tip Line de la 1,1 la 5,5 pe Layerul 0 este prezentat    in continuare.

(-1 . <Entity name: xxxxxxxx>)

(0 . 'LINE')

(8 . '0')

(10 1.0 1.0 0.0)

(11 5.0 5.0 0.0)

(210 0.0 0.0 1.0)

Entitatea inregistrata in baza de date este pastrata sub forma unei liste asociate.

O lista asociata este o lista de liste.

Primul element al fiecarei subliste este tipul acelei liste. Celelalte elemente reprezinta datele asociate cu codul.

De exemplu, codul din prima sublista este numarul intreg . Data asociata este numele entitatii. Codul din a doua sublista este numarul intreg . Data asociata este tipul entitatii; in acest caz, o entitate Line.

Semnificatia codurilor si si datele lor sint usor de imaginat ce reprezinta.

Datele codului sint reprezentate de sensul pozitiv al axei Z din sistemul de coordonate care contine entitatea.

Memorarea si extragerea formatelor

Prin conventie, datele dintr-o lista asociata entitatii pot fi extrase prin scoaterea cdr-ului unei subliste. Pentru aceasta, AutoLISP-ul foloseste perechi cu punct in cazul sublistelor cu doua elemente si forme normale de liste in cazul sublistelor cu mai mult de doua elemente.

De exemplu, aceste expresii returneaza Layerul entitatii Line si punctul de start.

Command: (cdr '(8 . '0'))
'0'

Command: (cdr '(10 1.0 1.0 0.0))
(1.0 1.0 0.0)

Coduri de Grup DXF

Codul fiecarei subliste dintr-o lista asociata unei entitati corespunde unui cod de grup DXF. Documentatia despre aceste coduri exista in AutoCAD Release 12 AutoLISP Programmer's Reference Manual, Appendix B.

Exista mici diferente intre codurile de grup dintr-un fisier DXF si codurile de grup returnate intr-o lista asociata unei entitati. in anexa din AutoLISP Programmer's Reference Manual gasiti lista corecta a codurilor de grup pentru liste asociate entitatilor.

Acestea sint codurile listelor asociate entitatilor (sau coduri de grup DXF) pentru entitatea Line.

Cod de group

Semnificatie

Numele entitatii

Tipul (Line, Circle, Arc, etc.)

Layer

Punct de start

Punct final

Directia pozitiva a axei Z de extruziune

Tabelul 27. Coduri de grup DXF si proprietatile entitatilor

Extragerea unei entitati din baza de date cu functia entget

Functia entget cere un singur argument: numele unei entitati. Functia va returna inregistrarea entitatii sub forma unei liste asociate.

Exemplu

incepeti un desen nou si desenati o linie de la 1,1 la 5,5; tipariti expresiile care urmeaza.

Command: (setq ename (entnext))
<Entity name: xxxxxxxx>

Command: (setq elist (entget ename))
( (-1 . <Entity name: xxxxxxxx>) (0 . 'LINE') (8 . '0') (10 1.0 1.0 0.0) (11 5.0 5.0 0.0) (210 0.0 0.0 1.0))

Command: !elist
( (-1 . <Entity name: xxxxxxxx>) (0 . 'LINE') (8 . '0') (10 1.0 1.0 0.0) (11 5.0 5.0 0.0) (210 0.0 0.0 1.0))

Extragerea datelor dintr-o lista asociata

Functia assoc cere doua argumente: valoarea unui cod si o lista asociata. Daca functia gaseste o pereche pentru cod in lista asociata, atunci returneaza    sublista corespunzatoare; daca nu, returneaza nil

Presupuneti ca variabila elist este legata de lista asociata in cazul entitatii Line.

Command: (setq elist (entget (entnext)))
( (-1 . <Entity name: xxxxxxxx>) (0 . 'LINE') (8 . '0') (10 1.0 1.0 0.0) (11 5.0 5.0 0.0) (210 0.0 0.0 1.0))

Command: !elist
( (-1 . <Entity name: xxxxxxxx>) (0 . 'LINE') (8 . '0') (10 1.0 1.0 0.0) (11 5.0 5.0 0.0) (210 0.0 0.0 1.0))

Aceasta expresie va returna sublista care descrie layerul entitatii.

Command: (assoc 8 elist)
(8 . '0')

in aceasta expresie, apelam cdr care returneaza layerul entitatii.

Command: (cdr (assoc 8 elist))
'0'

Exemplu

Introduceti expresiile care urmeaza.

Asigurati-va ca variabila elist este legata de lista asociata in cazul entitatii Line.

Command: (setq ename (entnext))
<Entity name: xxxxxxxx>

Command: !ename
<Entity name: xxxxxxxx>

Command: (setq elist (entget ename))
( (-1 . <Entity name: xxxxxxxx>) (0 . 'LINE') (8 . '0') (10 1.0 1.0 0.0) (11 5.0 5.0 0.0) (210 0.0 0.0 1.0))

Command: !elist
( (-1 . <Entity name: xxxxxxxx>) (0 . 'LINE') (8 . '0') (10 1.0 1.0 0.0) (11 5.0 5.0 0.0) (210 0.0 0.0 1.0))

Extrageti tipul entitatii, Layerul si punctul de start al sublistei din lista asociata.

Command: (assoc 0 elist)
(0 . 'LINE')

Command: (assoc 8 elist)
(8 . '0')

Command: (assoc 10 elist)
(10 1.0 1.0 0.0)

Apelati cdr pentru a extrage tipul entitatii, Layerul si punctul de start din subliste.

Command: (cdr (assoc 0 elist))
'LINE'

Command: (cdr (assoc 8 elist))
'0'

Command: (cdr (assoc 10 elist))
(1.0 1.0 0.0)

Recapitulare

Perechile cu punct au doua elemente si sint forme speciale de liste.

Al doilea element al perechii cu punct este returnat de cdr.

Perechile cu punct sint folosite ca liste obisnuite in listele asociate entitatilor.

Entitatile inregistrate in baza de date sint reprezentate in AutoLISP sub forma de liste asociate.

O lista asociata este o lista de liste.

Fiecare sublista dintr-o lista asociata are doua parti: car si cdr.

Partea car a unei liste asociate entitatii este un cod de grup DXF care desemneaza o proprietate a entitatii car este de asemenea denumit codul sublistei.

Partea cdr a unei liste asociate entitatii reprezinta valoarea codului de grup DXF.

Functia assoc returneaza    o sublista prin cautarea unui cod.

exercitiul 25: utilizarea listelor asociate entitatlor

in acest exercitiu :

Veti consolida cunostintele despre listele asociate entitatilor.

Veti folosi functia entget.

Veti modifica functia de la exercitiul 25.

Veti crea o functie care scaleaza numai entitatile de tip Line din desen.

Etape de lucru

Deschideti fisierul text scaleall.lsp.

Salvati textul intr-un nou fisier scline.lsp.

Schimbati numele functiei din c:scaleall in c:scline.

Modificati functia ca sa scaleze numai entitatile de tip Line din desen.

Salvati fisierul.

Desenati citeva tipuri de entitati in desen:.Lines, Circles and Arcs.

Incarcati fisierul scline.lsp si activati comanda scline. Numai entitatile de tip Line vor fi scalate cu aceasta comanda.

C:SCALEALL

(defun c:scaleall ()

(setq ename (entnext)) ;get first entity

(setq counter 1) ;initialize counter

(while

ename ;we have an entity?

(command '._SCALE' ename '' '0,0' '0.5');scale it

(prompt ;tell user which one

(strcat

'anScaling entity '

(itoa counter)

'.an'

)

)

(setq counter (1+ counter)) ;increment the counter

(setq ename (entnext ename)) ;get the next entity

)

(prin1) ;quiet exit

C:SCLINE

(defun c:scline ()

(setq ename (entnext)) ;get first entity

(setq counter 1) ;initialize counter

(while

ename ;we have an entity?

(if ;if it's a Line

(=

'LINE'

(cdr (assoc 0 (entget ename)))

)

(progn

(command '._SCALE' ename '' '0,0' '0.5');scale it and

(prompt ;tell user which one

(strcat

'anScaling entity '

(itoa counter)

'.an'

)

)

)

)

(setq counter (1+ counter)) ;increment the counter

(setq ename (entnext ename)) ;get the next entity

)

(prin1) ;quiet exit

Aceasta pagina a fost lasata libera in mod intentionat.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1065
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved