Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Tabele si nume de simboluri AutoLISP

autocad



+ Font mai mare | - Font mai mic



Tabele si nume de simboluri AutoLISP

Tabelele pastreza lista AutoCAD-ului cu nume de simboluri cum ar fi : layere, definitii Block si tipuri de linii.

Obiective

in acest capitol veti studia:

Tipuri diferite de tabele intr-un fisier grafic AutoCAD.



Cum sa cititi fiecare intrare intr-un tabel AutoCAD.

Cum sa cautati o intrare anume intr-un tabel AutoCAD.

Tabele intr-un desen

AutoCAD are 8 tabele diferite care pot fi accesate de AutoLISP.

Block

Dimstyle

Layer

Ltype

Style

UCS

View

Vport

Fiecare tabela poate fi citita direct din AutoLISP. Fiecare in parte poate fi accesata secvential sau accesata pentru un nume de simbol dat.

Functiile AutoLISP care acceseaza tabelele AutoCAD pot extrage datele asociate cu o tabela dar nu pot modifica o tabela sau datele sale.

Cautarea secventiala a tabelului layer

Functia tblnext scaneaza un tabel si returneaza o lista asociata care contine datele unui obiect denumit din tabel sau returneaza nil daca ultima instructiune din tabel a fost atinsa.

Functia tblnext are o sintaxa ciudata. Functia cere un argument: un sir care corespunde unuia dintre numele de tabele AutoCAD. Daca se adauga al doilea argument optional si acesta nu este nil, atunci functia tblnext returneaza primul nume de simbol din tabel; daca nu se adauga argumentul, functia returneaza simbolul cerut care il urmeaza pe cel returnat prin apelarea anterioara a functiei tblnext.

Exemplu

Aceasta expresie returneaza lista asociata pentru prima intrare in tabelul layer.

Command: (tblnext 'LAYER' t)
((0 . 'LAYER') (2 . '0') (70 . 0) (62 . 7) (6 . 'CONTINUOUS'))

Lista asociata este o lista cu perechi cu punct, a carei cod este realizat in acelasi mod in care sint realizate codurile pentru liste asociate entitatilor. Deoarece nu lucram cu entitati individuale, este clar ca aceasta lista asociata nu are un grup -1 reprezentind un nume de entitate.

Vezi anexa B din AutoLISP Programmer's Reference Manual, 'Block and Table Group Codes', pentru o descriere completa a codurilor din lista asociata layerelor.

Exemplu

Daca un desen ar contine layerele din tabelul de mai jos, atunci s-expresiile care urmeaza ar returna listele asociate aratate mai jos.

Layer

Stare

Culoare

Tipul de linie

Dezghetat, On

7 sau alb

continuu

DIM

Dezghetat, Off

2 sau galben

continuu

HIDDEN

Inghetat, Off

5 sau albastru

ascuns

OBJECT

Dezghetat, On

1 sau rosu

continuu

Tabelul 31. Lista de layere si proprietati care ilustreaza valorile returnate de functia tblnext

Command: (tblnext 'LAYER' t)
((0 . 'LAYER') (2 . '0') (70 . 0) (62 . 7) (6 . 'CONTINUOUS'))

Command: (tblnext 'LAYER')
((0 . 'LAYER') (2 . 'DIM') (70 . 0) (62 . -2) (6 . 'CONTINUOUS'))

Command: (tblnext 'LAYER')
((0 . 'LAYER') (2 . 'HIDDEN') (70 . 1) (62 . -5) (6 . 'HIDDEN'))

Command: (tblnext 'LAYER')
((0 . 'LAYER') (2 . 'OBJECT') (70 . 0) (62 . 1) (6 . 'CONTINUOUS'))

Command: (tblnext 'LAYER')

nil

O bucla care returneaza listele asociate pentru toate numele de simboluri dintr-un tabel este usor de implementat. Acest fragment de cod tipareste lista asociata pentru fiecare nume de simbol din tabelul layer.

(setq tlist (tblnext 'LAYER' t))

(while

tlist

(print tlist)

(setq tlist (tblnext 'LAYER'))

exercitiul 35: cautarea intr-o tabela

in acest exercitiu :



Veti consolida cunostintele despre tabele.

Veti crea o noua functie care scaneaza fiecare intrare din tabel.

Veti tipari numele fiecarui simbol in tabel.

Etape de lucru

Deschideti desenul moddim.dwg in directorul student.

intr-un fisier nou din editorul text, introduceti codul care urmeaza. Acesta implementeaza functia c:tlist.

TLIST cere utilizatorului un cod care corespunde unuia dintre tabelele AutoCAD iar apoi scaneaza tabelul secvential folosind functia tblnext si tipareste numele fiecarui simbol in tabel.

(defun c:tlist ()

;set up list of keywords for user prompt

(initget 'Block Dimstyle LAyer LType Style Ucs View VPort')

(setq ttype ;get table type from user

(getkword 'anBlock/Dimstyle/LAyer/LType/Style/Ucs/View/VPort: ')

(if ;if user pressed return, exit

(not ttype)

(exit)

(setq tlist (tblnext ttype t)) ;get first entry in table

(while ;while we have a valid entry

tlist ;in the table

(print (cdr (assoc 2 tlist))) ;print its name

(setq tlist (tblnext ttype)) ;get the next entry

(prin1) ;quiet exit

Salvati fisierul ca tlist.lsp in directorul student.

incarcati programul in AutoCAD.

Activati comanda TLIST.

Cautarea unui nume de simbol

Functia tblsearch va cauta un nume de simbol intr-un tabel. Functia cere doua argumente: un sir care corespunde unui tabel AutoCAD si un sir care corespunde numelui unui simbol cerut.

Daca numele cerut nu exista, functia tblsearch returneaza nil.

Exemplu

Aceasta expresie cauta layerul 0 si-i returneaza lista asociata.

Command: (tblsearch 'LAYER' '0')
((0 . 'LAYER') (2 . '0') (70 . 0) (62 . 7) (6 . 'CONTINUOUS'))

Recapitulare

AutoCAd pastreaza simbolurile cum ar fi layer-ele si Block Definitions in tabele.

Exista 8 tabele in AutoCAD.

Functia tblnext poate scana fiecare simbol din tabel.

Functia tblsearch poate cauta un anume simbol intr-un tabel.

Tabelele nu pot fi modificate direct de AutoLISP.

exercitiul 36: cautarea in tabela de layer-e

in acest exercitiu:

Veti folosi functia tblsearch.

Veti cauta in tabela Layer numele layerului dat de utilizator.

Veti determina daca layerul exista si veti informa utilizatorul in consecinta.

Instructiuni

Deschideti desenul moddim.dwg din directorul student.

intr-un fisier nou din editorul de text introduceti codul care urmeaza. Acesta implementeaza functia c:chklayer.

CHKLAYER cere utilizatorului numele layerului si determina daca layerul exista in desenul respectiv iar apoi tipareste un mesaj adecvat pentru utilizator.

(defun c:chklayer ()

(setq lname ;get layer name from user

(getstring 'anName of layer: ')

(if

(tblsearch 'LAYER' lname) ;layer exists?

(prompt (strcat 'anLayer ' lname ' exists. ')) ;yes

(prompt (strcat 'anLayer ' lname ' does not exist. ')) ;no

(prin1) ;quiet exit

Salvati fisierul text ca chklayer:lsp in directorul student.



incarcati programul in AutoCAD.

Activati comanda CHKLAYER.

exercitiul 37: exercitii suplimentare cu tabele

Acesta este un exercitiu optional.

Etape de lucru

Deschideti fisierul grafic moddim.dwg in directorul student.

intr-un fisier nou din directorul student scrieti doua functii: c:chktable si c:layerset.

Salvati totul intr-un fisier. incarcati functiile in AutoCAD si testati-le in desenul moddim.

c:chktable

intreaba utilizatorul ce tabela sa caute.

intreaba utilizatorul care este simbolul cautat.

Cauta tabelul pentru simbolul cautat.

Spune utilizatorului daca simbolul cautat exista.

c:layerset

intreaba utilizatorul care este numele layerului.

Daca layerul exista, functia spune operatorului tipul de linie si culoarea atribuite layerului.

Daca layerul exista, legati o variabila globala de un set de selectie format din toate entitatile de pe layerul respectiv.

exercitiul 14: un execitiu mai complex de cautare in tabele

Acesta este un exercitiu optional

Etape de lucru

Deschideti fisierul grafic moddim.dwg din directorul student.

intr-un fisier nou din editorul de text, introduceti codul care urmeaza. Acesta implementeaza functia c:tsearch.

TSEARCH cauta simbolul intr-un tabel si daca simbolul exista tipareste fiecare cod de grup si valoare din lista asociata simbolului.

(defun c:tsearch ()

;set up list of keywords for user prompt

(initget 'Block Dimstyle LAyer LType Style Ucs View VPort')

(setq ttype ;get table type from user

(getkword 'anBlock/Dimstyle/LAyer/LType/Style/Ucs/View/VPort: ')

(if ;if user pressed return, exit

(not ttype)

(exit)

(setq ttarget ;get target search name

(getstring (strcat 'an' ttype ' table entry: '))

(if ;if user pressed return, exit

(not ttarget)

(exit)

(setq tlist (tblsearch ttype ttarget));get list for target

;from its table.

(if

(not tlist) ;if no list, then target

(progn ;was not found, so exit.

(prompt 'anNo such entry.')

(exit)

)

(while

tlist ;while we still have a list

(print (car (car tlist))) ;print first group code

(print (cdr (car tlist))) ;and value from assoc list

(setq tlist (cdr tlist)) ;then truncate assoc list.

(prin1) ;quiet exit

Salvati fisierul text ca tsearch.lsp in directorul student.

incarcati programul in AutoCAD si testati comanda TSEARCH.





Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1524
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