Sunteți pe pagina 1din 136

UNIVERSITATEA DIN CRAIOVA FACULTATEA DE AUTOMATICĂ, CALCULATOARE ŞI ELECTRONICĂ

DORIAN COJOCARU

CRISTIAN VLADU

Proiectare Asistată de Calculator

DORIAN COJOCARU CRISTIAN VLADU P roiectare A sistată de C alculator TIPOGRAFIA UNIVERSITĂŢII DIN CRAIOVA 2006

TIPOGRAFIA UNIVERSITĂŢII DIN CRAIOVA

2006

Cuprins

1. Iniţiere în AutoCAD 2006.

2. Iniţiere în AutoLISP.

3

Error! Bookmark not defined.

3. Iniţiere în AutoLISP. Introducere de date. Selecţie de

23

4. Iniţiere în AutoLISP Manipulare obiecte. Lucrul cu baza de date AutoCAD

32

5. Iniţiere în AutoLISP – Lucrul cu baza de date AutoCAD. Funcţii condiţionale şi de

39

6. Iniţiere în AutoLISP – Lucrul cu baza de date AutoCAD. Funcţii de creare a obiectelor 45

ciclare

7. Iniţiere în DCL – Lucrul cu ferestre de

52

8. Iniţiere în VisualBASIC – Generalităţi

60

9. Iniţiere în VisualBASIC – Casete de dialog

69

10. Iniţiere în VBA – Crearea obiectelor AutoCAD

80

Bibliografie

95

PROIECTARE 3D PARAMETRIZATĂ ÎN AUTOCAD

1. PROIECTARE 3D PARAMETRIZATĂ ÎN AUTOCAD

1.1.Scopul lucrării

Lucrarea are ca scop iniţierea studenţilor în lucrul cu editorul de desenare al pachetului de programe AutoCAD 2006 şi recapitularea noţiunilor de AutoCAD învăţate în anii precedenţi. De asemenea va fi desenat un obiect tridimensional utilizând comenzi AutoCAD, obiect care va fi folosit pentru exemplificarea funcţiilor AutoLISP care vor fi studiate în cadrul lucrărilor de laborator.

1.2.Noţiuni teoretice

CAD este un acronim pentru Computer-Aided Design sau Computer-Aided Drafting AutoCAD este un program utilizat pentru proiectare/desenare de precizie asistată de calculator. Desenarea asistată de calculator folosind programul AutoCAD prezintă următoarele avantaje:

- precizie mare de desenare precizia de desenare este de 32 zecimale, putând fi executat orice desen la scara reală cu precizie de 100%;

- productivitate foarte mare pentru operaţiile repetitive – elemente sau porţiuni de desen care se repetă pot fi copiate sau multiplicate cu uşurinţă;

- modificarea facilă a unui desen;

- conlucrarea cu alte programe desenele AutoCAD pot fi importate în alte programe (editoare de texte, programe de simulare, animaţie, etc.);

- automatizarea unor operaţii utilizând limbajele de programare acceptate de AutoCAD.

1.2.1. Lansarea programului AutoCAD

start

Start/Programs/Autodesk/AutoCAD 2006/AutoCAD 2006 [Fig.1.1] din TaskBar (bara de task-uri) sau cu ajutorul pictogramei (icon-ului) de pe ecran (desktop) [Fig.1.2]

Programul

AutoCAD

2006

se

lansează

din

meniul

ecran (desktop) [ Fig.1.2 ] Programul AutoCAD 2006 se lansează din meniul Fig.1.1. Lansare AutoCAD 2006

Fig.1.1. Lansare AutoCAD 2006 din TaskBar

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

ASISTAT Ă DE CALCULATOR – Î NDRUMAR DE LABORATOR Fig.1.2. Pictogramă AutoCAD 2006 După lansarea AutoCAD

Fig.1.2. Pictogramă AutoCAD 2006

După lansarea AutoCAD-ului apare fereastra de lucru [Fig.1.3]

Bara de meniuri Bara cu instrumente Bara cu instrumente PROPERTIES Bare cu instrumente Fereastră principală
Bara de meniuri
Bara cu instrumente
Bara cu instrumente
PROPERTIES
Bare cu instrumente
Fereastră principală de lucru
Bara cu instrumente MODIFY
Meniu tip fereastră
poziţionabilă pentru
lucru cu fişiere
Bara cu instrumente DRAW
Meniu tip fereastră
poziţionabilă pentru
lucru cu biblioteca de
blocuri predefinite

Fig.1.3. Fereastra AutoCAD 2006 la prima lansare

1.2.2. Explicarea interfeţei de lucru AutoCAD 2000

Ca orice aplicaţie Windows şi programul AutoCAD rulează într-o fereastră

Windows, dispunând de toate proprietăţile unei asemenea ferestre. Fereastra principală AutoCAD este împărţită în mai multe ferestre 1 (zone).:

- Fereastra de desenare – zonă dreptunghiulară, cu fundal alb 2 dispusă în mijlocul ferestrei AutoCAD. În această fereastră se execută practic desenul, în interiorul ei

1 este menţinut termenul de fereastră (sau subfereastră) deoarece toate elementele ferestrei principale sunt ferestre Windows având proprietăţile unei ferestre (redimensionare, mutare, închidere) 2 pentru setările implicite la AutoCAD 2006 fundalul este negru

PROIECTARE 3D PARAMETRIZATĂ ÎN AUTOCAD

fiind afişat sistemul de axe OXYZ şi cursorul AutoCAD. Această zonă corespunde unui desen 1 , fiind deschisă într-o fereastră internă AutoCAD. Fiecare desen este deschis sau creat într-o asemenea fereastră.

- Fereastra de comenzi – se află în partea de jos a ferestrei principale, având afişat prompterul Command: sau opţiunile unei comenzi în curs de execuţie. Toate comenzile introduse de la tastatură apar în această fereastră 2 . Conţinutul ferestrei poate vizualizat cu ajutorul barei de derulare, sau fereastra poate fi maximizată prin apăsarea tastei F2.

- Barele de instrumente – conţin butoane, care la apăsare execută comenzi AutoCAD. În mod implicit, dacă interfaţa AutoCAD nu a fost particularizată 3 , sunt active 5 bare cu instrumente din cele 30 existente. Barele de instrumente conţin butoane grupate pe tipuri de operaţii: de exemplu bara de instrumente Dimension are butoane care au asociate comenzi de cotare. Toate barele de instrumente pot fi particularizate (customize) adăugându-se comenzile care sunt necesare şi eliminate cele neutilizate. Barele de instrumente implicite sunt:

o

Standard Toolbar – conţine cele mai utilizate comenzi cu caracter general – creare, salvare şi deschidere de fişiere desen, listare, vizualizare, mărire/micşorare (zoom), proprietăţi obiecte, etc.;

o

Object Properties – este dedicată proprietăţii obiectelor – grosime, culoare, tip de linie, etc.;

o

Styles este folosită pentru apelarea stilului de scriere, de cotare şi tabelar;

o

Draw – este dedicată comenzilor de desenare 2D (bidimensional) – linii, cercuri, arcuri de cerc, elipse, dreptunghiuri, haşuri, etc.;

o

Modify – este dedicată comenzilor de modificare a desenului – copiere, mutare, scalare, multiplicare, ştergere, etc., dedicată în general desenelor 2D.

- Bara de meniu – este o bară de meniuri tipică unui program care rulează în Windows 4 , conţinând şi meniurile specifice ale AutoCAD-ului. Toate comenzile din AutoCAD sunt disponibile în meniuri. Majoritatea comenzilor se regăsesc şi în barele de instrumente, fiind activate cele mai utilizate comenzi. Este parte integrantă a ferestrei principale.

- Bara de stare furnizează informaţii despre poziţia cursorului şi despre comutatoarele Snap, Grig, Ortho, etc. Este parte integrantă a ferestrei principale.

1.2.3. Noutăţi în versiunea 2006

Ca şi pentru versiunile precedente de AutoCAD AutoDESK a îmbunătăţit considerabil această versiune în toate domeniile: comenzi noi sau îmbunătăţite, noi meniuri tip fereastră poziţionabilă, utilitare noi, comenzi pentru gestionarea facilă a elementelor desenului, interfaţa mult mai prietenoasă 5 , etc 6 .

1 în funcţie de modul de vizualizare şi de factorul de zoom, la un moment dat, poate fi vizualizat tot desenul sau numai o zonă din acesta în fereastra de desenare

2 orice se tastează apare în fereastra Command indiferent dacă aceasta este activă sau nu 3 în barele cu instrumente pot fi introduse butoane predefinite sau butoane create de utilizator (nu toate comenzile AutoCAD au butoane asociate), sau pot fi create integral bare cu instrumente complet noi

4 meniul File conţine comenzi pentru lucrul cu fişiere, meniul Windows conţine comenzi pentru lucrul cu ferestre, etc.

5 de exemplu fereastra de selecţie a obiectelor este semitransparentă (opacă) şi are culoare diferită funcţie de tipul de selecţie, sau meniul suplimentar din bara de stare, pentru configurarea acesteia, aflat în bară în dreapta

6 pentru detalii privind elementele de noutate puteţi apela la meniul New Features Workshop din meniul Help, sau din fereastra dedicată care apare la pornirea AttoCAD-ului

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

1.2.4. Concepte de lucru în AutoCAD 2D

- Orice desen 2D (bidimensional 2 dimensiuni) este constituit din primitive 2D (puncte, linii, arce de cerc, cercuri, elipse, poligoane, etc.). Pentru crearea acestor primitive AutoCAD pune la dispoziţia utilizatorului un set de comenzi de desenare care creează aceste primitive 2D în funcţie de parametrii furnizaţi. Pentru a putea folosi aceste comenzi este necesară cunoaşterea următoarelor convenţii:

- spaţiul de lucru – reprezintă zona de desenare şi poate conţine spaţiul de desenare sau numai o zonă a acestuia;

- sistem de coordonate este un sistem triortogonal de coordonate OXYZ ataşat zonei de lucru. Pentru desenare 2D axa OZ se neglijează. Prin convenţie, pentru desenare 2D, planul ecran (deci zona de desenare) este conţinut în planul XOY, axa OX având sens pozitiv de la stânga la dreapta şi axa OY având sens pozitiv de jos în sus. Aceste setări sunt implicite la deschiderea unui desen nou;

- coordonatele unui punct un punct este unic reprezentat prin două coordonate x şi y, care reprezintă deplasarea pe axele respective faţă de originea sistemului de coordonate [Fig.1.4]. Aproape în toate situaţiile AutoCAD solicită specificarea (introducerea coordonatelor) unui punct: un punct, unul din capetele unei linii, centrul unui cerc, un punct de selecţie, etc. Un punct poate fi specificat prin următoarele metode:

o

prin introducerea coordonatelor de la tastatură, coordonata x fiind separată prin virgulă de coordonata y (punctul este folosit ca virgulă zecimală), aşa cum s-a explicat mai sus: x,y;

o

prin introducerea coordonatelor relative faţă de punctul curent (punctul curent este ultimul punct introdus (specificat)): @x,y deci se introduce practic deplasarea pe x şi pe y faţă de punctul curent, specificându-se aceasta prin simbolul @ pus înaintea setului de coordonate;

o

prin specificarea unui punct cu mouse-ul (click buton stânga).

o

prin folosirea modului OSNAP

o

prin folosirea modului SNAP

sens pozitiv axa y

y proiecţia punctului P pe axa y P(x,0)=P(15,0) d x =15
y
proiecţia punctului P pe axa y
P(x,0)=P(15,0)
d
x =15

O(0,0)

P(0,y)=(0,20)

deplasarea punctului P pe axa x faţă de originea sistemului de coordonate d y =20
deplasarea punctului P
pe axa x faţă de originea
sistemului de coordonate
d
y =20
originea sistemului de
coordonate: x=0, y=0

P(x,y) = P(15,20)

punctul P de coordonate x=15 şi y=20
punctul
P
de
coordonate
x=15 şi y=20
proiecţia punctului P pe axa x x
proiecţia punctului P pe axa x
x

sens pozitiv axa x

deplasarea punctului P pe axa x faţă de originea sistemului de coordonate
deplasarea punctului P pe axa x faţă de originea
sistemului de coordonate

Fig.1.4. Reprezentarea unui punct în sistemul de coordonate OXY

PROIECTARE 3D PARAMETRIZATĂ ÎN AUTOCAD

1.2.5. Concepte de lucru în AutoCAD 3D

Spre deosebire de desenele bidimensionale, în desenarea tridimensională orice punct este specificat prin 3 coordonate: x, y şi z, deci la lăţime şi lungime se adaugă înălţimea. Implicit sistemul de coordonate indică axa OZ ca fiind perpendiculară pe ecran, sensul pozitiv al axei fiind dinspre ecran spre utilizator. Realizarea unui desen tridimensional se poate realiza prin următoarele metode:

1. Adăugarea dimensiunii pe axa z (adăugarea înălţimii (grosimii)) unui desen plan (bidimensional). Este o metodă utilizată pentru desene simple fiind un caz particular pentru metoda 2.

2. Utilizând comenzi de desenare plane (bidimensionale) având setată implicit înălţimea de desenare pe axa z şi dimensiunea obiectului pe această axă. Această metodă se foloseşte combinată cu schimbarea planului de desenare (mutarea şi/sau rotirea UCS- ului sistemului de coordonate). Reamintim că desenarea bidimensională se face întotdeauna în planul XOY.

3. Prin utilizarea comenzilor generatoare de suprafeţe 3D.

4. Prin utilizarea comenzilor care generează primitive 3D (sfera, con, cilindru, tor, paralelipiped, prismă, etc.). Prin intersecţia şi editarea acestor solide se pot obţine desene oricât de complexe.

5. Prin utilizarea unor solide obţinute prin extrudarea şi revoluţia unor desene

bidimensionale. În funcţie de desen se foloseşte bineînţeles o combinaţie a metodelor prezentate. De fapt comenzile destinate implicit desenării şi editării 3D sunt foarte puţine comparativ cu cele pentru desenarea şi editarea 2D, desenele 3D fiind obţinute, cel mai des, prin extrudarea unor

desene plane realizate în planuri de desenare diferite prin schimbarea sistemului de coordonate.

1.2.6. Comenzi AutoCAD folosite în lucrare

Introducerea comenzilor AutoCAD se poate face în următoarele moduri:

1. tastarea numelui comenzii în linia de comandă (la prompterul Command): (de fapt tot ce se tastează apare în linia de comandă). Această metodă prezintă avantajele:

comenzile care au asociate combinaţii de taste se apelează mai rapid, sintaxa comenzilor se păstrează în general la versiunile următoare de AutoCAD 1 . Printre dezavantaje enumerăm: necesitatea cunoaşterii sintaxei comenzilor.

2. apelarea din meniurile AutoCAD. Această metodă prezintă avantajul localizarii în meniuri pe grupe de comenzi. Prezintă dezavantajul apelării lente, necesitând uneori deschiderea mai multor submeniuri.

3. folosirea barelor de instrumente. Această metodă este cea mai folosită din următoarele motive: butoanele au asociate pictograme care reflectă acţiunea comenzii, barele de instrumente pot fi deplasate pe ecran pentru aducerea într-o zonă apropiată zonei de desenare, au comenzile grupate pe grupe de operaţii, pot fi particularizate. Prezintă dezavantajele: nu toate comenzile sunt implicit pe bare (dacă ar conţine toate comenzile, dimensiunea acestora ar creşte foarte mult), trebuie învăţată oarecum ordinea comenzilor de pe o anumită bară de instrumente.

În general se foloseşte o combinaţie a celor trei metode, depinzând de utilizator. În Fig.1.5 este un exemplu de apelare a comenzii AutoCAD Line prin cele 3 metode.

1 prin tastarea numelui comenzile pot fi memorate mai uşor

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

În oricare din cazurile de apelare a unei comenzi din linia de comandă apare sintaxa comenzii. După apelarea unei comenzi AutoCAD sunt ceruţi parametrii necesari executării comenzii. De exemplu în cazul comenzii LINE se cer coordonatele punctelor care definesc

comenzii LINE se cer coordonatele punctelor care definesc a) b) c) Fig.1.5. Apelarea comenzii LINE a)

a)

LINE se cer coordonatele punctelor care definesc a) b) c) Fig.1.5. Apelarea comenzii LINE a) din

b)

LINE se cer coordonatele punctelor care definesc a) b) c) Fig.1.5. Apelarea comenzii LINE a) din

c)

Fig.1.5. Apelarea comenzii LINE a) din bare de instrumente; b) din meniul DRAW; c) de la prompterul Command

linia, pentru comanda CIRCLE se cer coordonatele centrului cercului şi mărimea razei, etc. Majoritatea comenzilor AutoCAD au asociate opţiuni de lucru. Opţiunile unei comenzi setează implicit anumiţi parametri sau particularizează comanda. Se pot apela din linia de comandă, dialogul fiind în general de forma:

Opţiune implicită sau [ opţiune1 / opţiune 2 / …. ] Deasemenea pot fi apelate din meniul rapid 1 . În figură este exemplificată comanda CIRCLE care are opţiunile 3P/2P/Ttr (tan tan radius). Celelalte comenzi care apar sunt implicite, rapide 2 . Orice comandă AutoCAD poate fi întreruptă prin apăsarea tastei Esc şi poate fi reapelată prin apăsarea tastei Enter sau Spaţiu (aceste taste reapelează ultima comandă folosită).

Comenzi AutoCAD folosite în lucrare 3

comandă folosită). Comenzi AutoCAD folosite în lucrare 3 - POLYGON – desenează un poligon regulat cu

- POLYGON – desenează un poligon regulat cu număr specificat de laturi;

- EXTRUDE – generează un corp 3D adaugând grosime unui contur închis 2D;

- CYLINDER – desenează un cilindru;

- CHAMFER comanda clasică 2D poate fi aplicată şi obiectelor 3D cu acelaşi efect;

- INTERSECT – se obţine porţiunea comună a mai multe corpuri intersectate;

- UNION – se obţine un corp 3D din uniunea mai multor corpuri 3D;

- 3DORBIT vizualizează din diverse unghiuri un desen 3D 4 .

LINE 5 – desenează o linie între două puncte specificate. Se poate continua desenarea unei alte linii pornind implicit din ultimul punct, nefiind necesară decât introducerea celui de-al doilea

1 click dreapta mouse

2 sunt cele mai utilizate comenzi într-o anumită situaţie sau etapă de lucru

3 pentru a afla opţiunile unei comenzi AutoCAD se apelează comanda şi se consultă Help-ul asociat comenzii prin apăsarea tastei F1

4 este o comandă complexă cu opţiuni de vizualizare tip cadru de sâmă, suprafeţe pline, etc., vizualizare tip orbită continuă, interacţionează ci ZOOM şi PAN

5 comanda LINE nu este folosită explicit în desen dar fiind cea mai cunoscută comandă AutoCAD este descrisă ca exemplu

PROIECTARE 3D PARAMETRIZATĂ ÎN AUTOCAD

punct. Fiecare segment din linia desenată este considerat o entitate separată (acelaşi efect cu apelarea în mod repetat a comenzii )

Apelare Linie de comandă line Bară cu butoane Draw Meniu Draw: Line Opţiuni From Point
Apelare
Linie de comandă
line
Bară cu butoane
Draw
Meniu
Draw: Line
Opţiuni
From
Point
Se desenează o linie care trece prin 2
puncte specificate
Opţiune implicită
Se solicită specificarea a două puncte
Continue
Se poate continua desenarea linie cu un alt
segment care începe din ultimul punct al
segmentului anterior
Undo
Se anulează ultimul segment de
linie desenat. Devine activă
numai după introducerea primului
punct
Se apelează prin tastare undo
sau u
Close
Se desenează o linie care uneşte
ultimul punct al ultimului
segment desenat cu primul punct
al primului segment. Devine
activă după desenarea a două
segmente ale liniei.
Se apelează prin tastare close
sau c

1.2.7. Salvarea unui desen AutoCAD

Un desen AutoCAD este salvat într-un fişier cu extensie .dwg, respectând convenţia Windows de nume (maxim 256 caractere, fără caractere speciale). Un asemenea fişier are asociată în mod automat pictograma AutoCAD. Salvarea în AutoCAD este asemănătoare cu operaţia corespondentă din orice program care rulează în Windows şi are posibilitatea de a salva sesiunea de lucru într-un fişier. Salvarea unui desen AutoCAD se poate face folosind una din variantele:

1. se selectează din meniul File (Fişier) opţiunea Save (Salvare);

2. se apasă al treilea buton din bara de instrumente Standard Toolbars (cel care are ca pictogramă un flopy-disk)

3. se foloseşte combinaţia de taste Ctrl-s;

-disk) 3. se foloseşte combinaţi a de taste Ctrl-s ; 4. se salvează automat desenul periodic

4. se salvează automat desenul periodic (setarea timpului dintre salvări se face din meniul Tools/Options/Save);

5. se salvează desenul la terminarea sesinii de lucru după confirmarea acestei operaţii.

Extensia dwg este pusă automat, fiind necesară numai specificarea numelui fişierului. Dacă desenul este salvat pentru prima dată este solicitată locaţia unde va fi salvat (implicit dosarul My Documents 1 ). Dacă desenul a fost deja salvat, acesta va fi salvat implicit

1 locaţia pentru salvare a documentelor este setabilă din opţiuni

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

în locaţia unde a fost salvat ultima dată sau de unde a fost deschis pentru editare. Dacă este necesară salvarea desenului cu alt nume sau în altă locaţie se va folosi opţiunea Save As (Salvează ca).

1.3.Chestiuni de studiat

1. Se studiază toate opţiunile ferestrei de iniţializare.

2. Se creează un desen nou.

3. Se salvează desenul folosind un nume sugestiv.

4. Se desenează şurubul din Fig.1.6, notându-se succesiunea comenzilor, opţiunile utilizate şi datele de intrare introduse. Aceste date vor fi necesare în lucrările următoare

5. Se închide sesiunea de lucru cu salvare.

6. Pentru reîmprospătarea cunoştinţelor se recomandă parcurgerea lucrărilor de AutoCAD din Anexa A.

recomandă parcurgerea lucrărilor de AutoCAD din Anexa A. Fig.1.6. Corpul unui şurub 1.4.Modul de lucru 1.
recomandă parcurgerea lucrărilor de AutoCAD din Anexa A. Fig.1.6. Corpul unui şurub 1.4.Modul de lucru 1.

Fig.1.6. Corpul unui şurub

1.4.Modul de lucru

1. Se lansează programul AutoCAD din meniul Start/All Programs/Autodesk/AutoCAD 2006 [Fig.1.1] sau cu ajutorul pictogramei (icon-ului) de pe ecran (desktop) [Fig.1.2].

2. Se crează un desen nou.

3. Se salvează desenul folosind un nume sugestiv (de exemplu: lucrare1) în directorul specificat.

4. Se desenează capul şurubului

Se desenează un poligon regulat cu 6 laturi (un hexagon), cu centrul în punctul 0,0 înscris într-un cerc cu raza de 150. Command: _polygon Enter number of sides <4>: 6 Specify center of polygon or [Edge]: 0,0 Enter an option [Inscribed in circle/Circumscribed about circle] <I>:Enter Specify radius of circle: 150

Se schimbă coloarea de desenare din Bylayer în Cyan (albastru deschis)

INFO: Se utilizează comanda COLOR

Se extrudează poligonul cu lungimea de 50 Command: extrude

PROIECTARE 3D PARAMETRIZATĂ ÎN AUTOCAD

Current wire frame density: ISOLINES=4 Select objects: (se selectează poligonul)1 found Select objects: Enter (terminarea selecţiei) Specify height of extrusion or [Path]: 50 Specify angle of taper for extrusion <0>: Enter

Se utilizează comanda 3DOrbit pentru a vizualiza desenul dintr-un alt unghi. De asemenea se utilizează comenzile Zoom şi Pan pentru a aduce desenul în mijlocul spaţiului de desenare. Se utilizează comanda ShadeMode, opţiunea gOuraung+Edges pentru vizualizare solid. Desenul rezultat este prezentat în

fig.1.7.a.

solid. Desenul rezultat este prezentat în fig.1.7.a . a) b) Fig.1.7. Detaliu desenare şurub c) INFO:
solid. Desenul rezultat este prezentat în fig.1.7.a . a) b) Fig.1.7. Detaliu desenare şurub c) INFO:

a)

b) Fig.1.7. Detaliu desenare şurub

în fig.1.7.a . a) b) Fig.1.7. Detaliu desenare şurub c) INFO: Se observă că din extrudarea

c)

INFO: Se observă că din extrudarea unui poligon se rezultă un solid. Acelaşi efect se obţine şi la extrudarea unui cerc, rezultând un cilindru. În cazul extrudării unei polilinii, chiar dacă ea descrie un cerc se va obţine un ”perete” circular. După parcurgerea paşilor de mai sus am desenat capul şurubului care trebuie teşit. Aplicând comanda CHAMFER pentru fiecare muchie a capului de şurub se obţine solidul din fig.1.7.b, care o teşire incorectă. Pentru a realiza teşirea necesară fig.1.7.c. (care în realitate se obţine prin strunjirea capului şurubului) se va desena un cilindru circumscris hexagonului având acelaşi centru şi rază. Aplicându-i acestuia comanda CHAMFER pe ambele muchii ale feţelor. Cilindrul astfel obţinut se va intersecta cu capul şurubului şi păstrând părţile comune, vom obţine efectul dorit

Se creează un strat de desenare nou numit cap şi se selectează acesta ca fiind stratul de desenare curent. Stratul de desenare va păstra setările implicite cu excepţia culorii de desenare care va fi galben (yelow).

INFO: Stratul de desenare se creează cu comanda LAYER opţiunea NEW. Pentru o desenare mai uşoară se poate ascunde capul şurubului prin închiderea stratului de desenare 0.

Se desenează un cilindru cu centru în punctul 0,0,0, de rază 150 şi înălţime 50. Se utilizează comanda Cylinder.

Cu comanda Chamfer se teşesc ambele muchii circulare ale cilindrului. Pentru razele de teşire se specifică r 1 =20 şi r 2 =10 pentru cea de sus, respectiv r 1 =20 şi r 2 =10 pentru cea de jos.

INFO: Pentru selecţia corpului se selectează frontierele acestuia (muchiile). Pentru o desenare mai facilă se poate reveni în modul de vizualizare cadrul de sârmă folosind comanda ShadeMode, opţiunea 2D wireframe.

Se activează stratul de desenare 0 şi se intersectează cilindrul astfel obţinut cu capul şurubului. Se obţine solidul din fig.1.24.c. Se utilizează comanda Intersect, furnizând ca mulţimi de selecţie cilindrul şi capul şurubului. Se observă că din intersecţia corpurilor selectate s-a obţinut un singur solid. Se desenează corpul şurubului respectând paşii următori.

Se schimbă culoarea de desenare în blue.

Se desenează un cilindru cu raza de 50 şi înălţimea 300. Cilindrul va avea acelaşi centru cu capul şurubului 0,0,0.

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

Se unesc cele două solide folosind comanda Union. Din uniunea corpurilor selectate s-a obţinut un singur solid.

Se schimbă culoarea de desenare în yelow.

Se teşeşte muchia de sus a cilindrului cu comanda Chamfer. Pentru razele de teşire se specifică r 1 =10 şi r 2 =10. Se obţine solidul din fig.1.8.

1 =10 şi r 2 =10. Se obţine solidul din fig.1.8. Fig.1.8. Solidul rezultat după parcurgerea

Fig.1.8. Solidul rezultat după parcurgerea etapelor descrise mai sus

5. Se salvează desenul.

1.5.Conţinutul referatului

1. Titlul lucrării.

2. Tema lucrării.

3. Chestiunile de studiat.

4. Comenzile AutoCAD utilizate şi opţiunile acestora.

5. Istoricul comenzilor necesare pentru realizarea desenului (succesiunea comenzilor, opţiunile utilizate precum şi datele introduse de la tastatură).

6. Desenul realizat în format electronic 1 şi tipărit.

7. Comentarii şi observaţii asupra aspectelor practice întâlnite 2 .

1 În format AutoCAD: DXG, DXF, în format grafic vectorizat: PLT şi exportat ca fişier grafic: BMP şi JPG 2 IMPORTANT. Detaliat.

PROGRAMARE ÎN AUTOLISP PENTRU APLICAŢII 2D AUTOCAD

2. PROGRAMARE ÎN AUTOLISP PENTRU APLICAŢII 2D

AUTOCAD

2.1.Scopul lucrării

Lucrarea are ca scop iniţierea studenţilor în lucrul cu pachetul de programe AutoLISP inclus în AutoCAD 2006.

2.2.Noţiuni teoretice

Desenarea asistată de calculator folosind programul AutoCAD 2006 poate fi realizată în mod semiautomat folosind limbajele de programare incluse/acceptate de acesta. Folosind limbajele de programare acceptate pot fi create module program care să genereze automat blocuri 2D sau 3D. Acestea pot fi utilizate în orice desen şi pot fi incluse la rândul lor în alte module program. Limbajele de programare acceptate de AutoCAD 2006 sunt:

- AutoLISP este un limbaj de programare derivat din LISP (LISt Processing).

o

Este principalul şi primul limbaj de programare adoptat de AutoCAD fiind special conceput pentru lucrul cu liste de dimensiuni variabile, care sunt exact tipul de informaţii vehiculate de AutoCAD.

o

Este un INTERPRETOR (orice linie program introdusă la prompterul Command are efect imediat), deci are avantajul posibilităţii verificării liniilor de cod fără compilarea (generarea) întregului program;

o

Începând cu versiunea AutoCAD 2000 este inclus în program un editor AutoLISP denumit Visual LISP;

o

Principalul dezavantaj îl constituie viteza mică de execuţie (fiind interpretor asamblarea programului se face în timpul execuţiei). Odată cu introducerea Visual LISP-ului acest neajuns este înlăturat, acest limbaj permiţând şi lucrul cu obiecte (lucru imposibil în versiunile anterioare);

o

Acest limbaj de programare va fi tratat în cadrul laboratorului.

- ARX (AutoCAD Runtime Extension) - este un limbaj de programare derivat din limbajul de programare C++, bazat pe programe compilate;

o

Este o versiune îmbunătăţită a limbajului ADS (AutoCAD Development System) care este derivat din limbajul de programare C. Dezavantajul acestuia este dependenţa de platforma hardware cu care se lucra şi faptul ca modulele trebuiau rulate tot sub AutoLISP. Mediul de dezvoltare ARX suportă şi biblioteca ADS;

o

Avantajul acestuia constă în viteza mare de execuţie, deoarece programul este compilat şi încărcat sub formă executabilă;

o

Dezavantajul constă în faptul că limbajul de programare C++ este un COMPILATOR, deci înainte de a putea fi rulat (testat) trebuie compilat tot programul. O aplicaţie ARX nu poate fi citită deoarece nu este disponibilă în formă de program sursă;

o

Încărcarea unei aplicaţii ARX se face cu funcţia arxload.

- DCL (Dialog Control Language) un limbaj independent de platforma hardware creat pentru definirea şi controlul casetelor de dialog;

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

o Un fişier care descrie casete de dialog are extensia .DCL şi este încărcat din AutoLISP prin funcţia load_dialog

- Visual BASIC şi ActiveX – pun la dispoziţia programatorului tehnologia obiectelor ActiveX;

o Visual Basic este un limbaj de programare puternic dezvoltat de Microsoft integrat în pachetul
o
Visual Basic este un limbaj de programare puternic dezvoltat de Microsoft integrat
în pachetul de programe MsOffice, deci va fi simplu de integrat desenele
AutoCAD în aceste aplicaţii;
o
Visual Basic lucrează foarte bine cu obiectele Windows (ferestre, butoane, casete
de dialog, etc), putându-se construi relativ uşor o interfaţă windows (comună de
altfel tuturor programelor care lucrează sub windows);
o
Tehnologia ActiveX poate integra desenele AutoCAD în toate programele care
utilizează această tehnologie (şi viceversa), conform fig.2.1;
Fig.2.1. Lansare AutoCAD 2002 din meniu
o
Împreună cu limbajul de programare AutoLISP sunt singurele care rulează direct de
sub interfaţa AutoCAD.

În continuare va explica progresiv limbajul de programare AutoLISP, realizând un program care să genereze semiautomat în funcţie de parametrii introduşi desenul din lucrarea 1 – un şurub tridimensional. Avantajul utilizării unui limbaj de programare rezidă în posibilitatea creării unei biblioteci de comenzi proprii care să genereze blocuri 2D sau 3D. Spre deosebire de o bibliotecă de blocuri create cu comanda WBlock blocurile generate prin rularea unui program pot fi dimensionate în funcţie de parametrii introduşi (de exemplu la şurub lungimea filetului). De asemenea comenzile din AutoCAD care pot fi modificate sau completate sau pot fi create altele noi. Pot fi făcute selecţii sau generate modele de haşurare, etc. Deci poate fi automatizat orice proces repetitiv şi pot fi modificate/create comenzi AutoCAD.

2.3.Chestiuni de studiat

1. Se studiază Editorul VisualLISP.

PROGRAMARE ÎN AUTOLISP PENTRU APLICAŢII 2D AUTOCAD

2. Se creează un program AutoLISP care să deseneze o grilă din linii.

3. Se creează un program AutoLISP care să deseneze proiecţia capului şurubului în plan.

2.4.Modul de lucru

1. Se lansează programul AutoCAD din meniul Start/All Programs/Autodesk/AutoCAD 2006 [Fig.1.1] sau cu ajutorul pictogramei (icon-ului) de pe ecran (desktop) [Fig.1.2].

2. Se creează un desen nou utilizănd opţiunile implicite.

3. Se salvează desenul.

4. Se deschide editorul Visual LISP din meniul Tools / AutoLISP / VisualLISP Editor

(fig.2.2).

meniul Tools / AutoLISP / VisualLISP Editor ( fig.2.2 ). Fig.2.2. Lansare Editor VisualLISP 5. Se

Fig.2.2. Lansare Editor VisualLISP

5. Se deschide Editorul VisualLISP fig.2.3.

INFO: Limbajul de programare AutoLISP (VisualLISP) va fi explicat gradual, pornind de la simplu (sau foarte simplu) la complex, fiind tratate numai noţiunile şi funcţiile necesare parcurgerii lucrărilor de laborator. Pentru aprofundarea acestui limbaj de programare va fi consultat cursul de specialitate şi bibliografia.

Fereastră principală Editor VisualLISP Creare fişier nou Comutare în fereastra AutoCAD Fereastră editare fişier
Fereastră principală Editor VisualLISP
Creare fişier nou
Comutare în fereastra AutoCAD
Fereastră editare fişier
Încărcare fişier (funcţii
din fişier) în AutoCAD
Fereastră afişare mesaje sistem

Fig.2.3. Fereastră Editor VisualLISP

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

La deschiderea editorului VisualLisp se deschid automat 2 ferestre: VisualLISP Console şi Trace. Deocamdată este utilă numai fereastra VisualLISP Console, care va fi redimensionată astfel încât să poată afişa 3-4 rânduri şi va fi poziţionată în partea de jos a ferestrei principale. În această fereastra sunt afişate mesaje referitoare la programul introdus şi la corectitudinea transferului acestuia către AutoCAD. Fereastra Trace va fi minimizată sau închisă. De asemenea fereastra principală este util să fie maximizată pentru obţinerea unui spaţiu mai mare pentru editare. Se deschide un fişier nou folosind butonul New, dau comanda New din meniul File. Se redimensionează această fereastră astfel încât să poată conţine cât mai multe rânduri.

6. Dacă nu a fost deja deschis un fişier nou (vezi INFO) se deschide şi se salvează utilizând un nume sugestiv, de exemplu lab2.

INFO: Numele fişierului descrie numai conţinutul funcţiilor sau comenzilor definite în el, dar nu are legătură directă cu execuţia sau încărcarea acestora în AutoCAD

7. În această fereastră se scrie un program minimal în LISP:

(defun L2( )

)

Explicarea programului:

Orice program AutoLISP conţine cel puţin o funcţie care are formatul programului de mai sus. Începe cu deschiderea unei paranteze rotunde, urmată de cuvântul cheie DEFUN după care urmează numele funcţiei şi parametrii acesteia, urmate de corpul funcţiei (instrucţiunile executate în cazul apelării funcţiei) după care se termină prin închiderea parantezei rotunde. În AutoLISP simbolul spaţiu este folosit ca separator.

INFO: ATENŢIE! în AutoLISP orice instrucţiune este scrisă între paranteze rotunde. Nu introduceţi 2 sau mai multe spaţii între simboluri deoarece aceasta este considerată eroare. De asemenea în lipsa spaţiilor 2 sau mai mulţi parametri sunt consideraţi unul singur, ceea ce generează erori. Se observă că parantezele sunt scrise cu culoarea roşie, cuvintele cheie AutoLISP sunt scrise cu culoarea albastră, etc. Acest efect uşurează depanarea programului, deoarece o funcţie AutoLISP tastată greşit nu se mai colorează automat în albastru. AutoLISP nu este sensibil la majuscule, deci nu contează dacă numele funcţiilor este scris cu majuscule sau nu.

În cazul exemplului de mai sus este definită funcţia L2 (s-a folosit la nume un nume scurt pentru uşurinţa apelării în AutoCAD; în cazul existenţei mai multor funcţii, numele acestora vor trebui să reflecte acţiunea funcţiei (LINE – trasează o linie)). Funcţia nu are parametri ( ), deci nu cere nimic utilizatorului (aşa cum funcţia LINE solicită introducerea unor puncte între care se trasează linia) Programul ar fi echivalent în Pascal cu:

begin end. şi în C cu main ( )

{

}

programe absolut corecte în ambele limbaje, putând fi compilate şi executate. În anumite limite se poate face o paralelă între limbaje, dar să nu uităm totuşi că limbajele Pascal şi C sunt COMPILATOARE, în timp ce limbajul LISP este INTERPRETOR (deci orice funcţie (comandă) din AutoLISP poate fi executată direct la promterul Command (în AutoCAD bineînţeles)). Se încarcă programul editat în AutoCAD prin apăsarea butonului Load Active Edit Window (vezi fig.2.3).

INFO: Se observă că în fereastra VisualLISP Console apare mesajul:

; error: bad DEFUN syntax: (L2 nil)

PROGRAMARE ÎN AUTOLISP PENTRU APLICAŢII 2D AUTOCAD

Programul este corect ca sintaxă, mesajul de eroare semnalând că funcţia L2 nu conţine nici o instrucţiune. În timp ce în Pascal sau C corpul unei funcţii poate fi vid, în AutoLISP acest lucru generează eroare.

8. Introducem o linie care să afişeze un mesaj. Programul completat cu noua linie va fi următorul:

(defun L2 ( ) (princ"gfghf")

)

INFO: Toate noile linii din program se introduc între linia de definire a funcţiei (defun… şi paranteza rotundă care termină funcţia. În platformă programul va apare în formă integrală numai unde acesta facilitează înţelegerea lui. Când va trebui creată o nouă funcţie sau un nou fişier acest lucru va fi specificat explicit, în rest noile linii vor fi adăugate la programul existent.

9. Îl salvăm şi încărcăm din nou în AutoCAD.

INFO: Se observă că în fereastra VisualLISP Console apare mesajul:

; 1 form loaded from #<editor "C:/My Documents/lab2.lsp"> Mesajul semnalează că nu există nici o eroare în programul încărcat şi că a fost încărcată o singură funcţie din fisierul lab2.lsp.

10. Se comută în fereastra AutoCAD prin apăsarea butonului Activate AutoCAD sau prin utilizarea barei de stare a windows-ului. La prompterul Command se tastează numele funcţiei între paranteze rotunde. În fereastra de comenzi va apărea:

Command: (l2) gfghf " gfghf "

INFO: Se observă că la fiecare modificare fişierul trebuie reîncărcat permanent în AutoCAD. În AutoCAD unele comenzi au asociate combinaţii de taste (de fapt apelul comenzilor mai des utilizate se poate face prin apăsarea unei singure taste). De exemplu comanda zoom poate fi apelată prin apăsarea tastei z. Se dau nume funcţiilor create diferite de numele comenzilor AutoCAD, sau al funcţiilor AutoLISP predefinite. Nu este necesar să copiaţi programul prezentat, deci să respectaţi inclusiv convenţiile de notare (nume funcţii sau texte afişate).

11. Până acum avem un program care afişează un mesaj (şir de caractere) cu ajutorul funcţiei AutoLISP PRINC. În continuare o să “complicăm” programul, adăugându-i linii pentru obţinerea unui program util. În final programul obţinut va trasa o linie între două puncte introduse de la tastatură.

Pentru execuţia oricărei comenzi AutoCAD Se foloseşte funcţia AutoLISP COMMAND, argumentele acesteia fiind comenzi şi subcomenzi AutoCAD. Deci programul va fi completat cu linia:

(Command "LINE" "10,10" "100,100")

programul intergal fiind următorul:

(defun L2( ) (princ"Test") (Command "LINE" "10,10" "100,100")

)

Programul trasează o linie între punctele de coordonate 10,10 şi 100,100.

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

Îl reîncărcăm în AutoCAD:

Command: (l2) TestLINE From point: 10,10 To point: 100,100 To point: nil

Observăm că AutoCAD-ul nu a părăsit comanda LINE şi aşteaptă introducerea unui nou punct. Bineînţeles, deoarece ştim că orice comandă se termină cu ENTER. Deci modificăm programul:

(Command "LINE" "10,10" "100,100" "")

Rulând din nou obţinem trasarea liniei. Se observă că după funcţia AutoLISP COMMAND, între ghilimele, urmează parametrii funcţiei, în cazul nostru comanda AutoCAD ”LINE”, primul punct al liniei ”10,10” , ultimul punct al liniei ”100,100” şi echivalentul tastei Enter ”” pentru terminarea comenzii LINE. Analog se poate folosi orice comandă AutoCAD. Bineînţeles că această modalitate de a desena nu ne satisface (mai simplu ar fi fost de la promter-ul AutoCAD). Să trasăm linia între puncte date de valoarea unor variabile.

(defun L2( ) (princ"Test") (setq pct1 (list 10 10)) (Command "LINE" pct1 "100,100" "")

)

Se observă că funcţia setq creează variabila pct1 şi îi asociază acesteia un punct de coordonate 10,10. Între parametrii comenzilor AutoLISP ca separator se foloseşte spaţiul. Punctul asociat variabilei pct1 a fost creat cu funcţia AutoLISP LIST care alcătuieşte o listă din parametrii daţi, în cazul nostru 10 şi 10. AutoLISP este un limbaj de programare care lucrează cu LISTE. orice punct 2D sau 3D este e fapt o listă (un vector) cu 2 sau 3 elemente. Pentru crearea unei polilinii, de exemplu, trebuie furnizată o listă de puncte între care se trasează polilinia, fiecare punct fiind, în particular, o lista de 2 elemente care conţine coordonatele punctului. Deci avem o lista cu elemente de tip listă.

12. Analog se defineşte şi cel de-al doilea punct, pct2.

(setq pct1 (list 10 10)) (setq pct2 (list 100 100)) (Command "LINE" pct1 pct2 "")

Obţinem acum acelaşi efect ca şi programul precedent, deosebirea fiind că în comanda LINE coordonatele punctelor sunt date de variabilele pct1 şi pct2. Încărcăm şi rulăm programul.

INFO: Deoarece de la rularea anterioară este trasată o linie, acum linia trasată se suprapune peste aceasta şi nu apare nici o schimbare vizibilă. Pentru a înlătura acest neajuns sunt două metode: se şterge tot desenul sau se foloseşte comanda Undo cu parametru. Varianta a doua este cea mai

PROGRAMARE ÎN AUTOLISP PENTRU APLICAŢII 2D AUTOCAD

comodă şi indicată 1 , deci înainte de fiecare rulare se lansează comanda Undo şi ca număr de comenzi anulate se poate furniza un număr între 1 şi 65357, care indică numărul de operaţii care vor fi anulate. Cred că 200 este acoperitor.

13. Continuăm şi variabilele pct1 şi pct2 le obţinem din liste de variabile: x1, y1, x2, y2:

(defun L2( ) (princ"Test") (setq x1 10) (setq y1 10) (setq x2 100) (setq y2 100) (setq pct1 (list x1 y1)) (setq pct2 (list x2 y2)) (Command "LINE" pct1 pct2 "")

)

Dacă tot avem coordonatele punctelor prin variabilele x1, y1, x2, y2, să le folosim. Vom trasa o grilă între punctele 0,0 şi 200,200, având celulele pătrate, cu latura de 10. Traducând, vom trasa 20 de linii orizontale cu lungimea de 200, începând din punctul 0,0 şi având distanţa verticală între ele de 10. Analog vom trasa 20 de linii verticale cu distanţa dintre ele de 10. Să trasăm prima dată liniile orizontale. Vom trasa linii având coordonatele x1 şi x2 fixe, şi anume x1=0 şi x2=200. Coordonatele y1 şi y2 vor fi egale ca valoare 2 având iniţial valoarea 0 şi incrementând această valoare cu 10 pentru fiecare linie nou trasată. Pentru aceasta în AutoLISP dispunem de funcţia while. Formatul funcţiei este următorul:

(while <expresie text> (prima expresie) (a doua expresie)

(ultima expresie)

)

Această funcţie evaluează <expresie test> şi, dacă nu e nil, evaluează celelalte expresii după care evaluează din nou <expresie test>. Aceasta continuă până când <expresie test> devine nil (deci trebuie ca evaluările să modifice această expresie, valoarea ei ajungând în final la valoarea nil 3 ). După modificări programul devine:

(defun L2( ) (setq x1 0 y1 -10 x2 200 y2 -10) (while (< y1 200) (setq y1 (+ y1 10)) (setq y2 (+ y2 10)) (setq pct1 (list x1 y1))

1 dacă programul AutoLISP generează un desen ştergerea acestuia este suficientă, dar dacă în program se fac şi setări (de exemplu stilul de scriere sau de cotare) atunci se recomandă folosirea comenzii AutoCAD UNDO care anulează TOATE acţiunile precedente

2 bineînţeles că în sistemul de axe AutoCAD orice punct de pe o linie orizontală îşi păstrează coordonata y constantă, tocmai pentru a fi pe linie

3 altfel bucla devine „infinită”

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

(setq pct2 (list x2 y2)) (Command "LINE" pct1 pct2 "")

)

)

14. Se observă că setq permite mai multe atribuiri în timpul unei execuţii. Iniţial y1 şi y2 sunt iniţializate cu –10, pentru că înainte de trasarea primei linii valoarea lor se incrementează cu 10.

15. Analog se face pentru trasarea liniilor verticale. Deci:

(defun L2( ) (setq x1 -10 y1 0 x2 -10 y2 200) (while (< x1 200) (setq x1 (+ x1 10)) (setq x2 (+ x2 10)) (setq pct1 (list x1 y1)) (setq pct2 (list x2 y2)) (Command "LINE" pct1 pct2 "")

)

)

16. Acum creăm un program nou în VisualLISP care va trasa o parte din şurub 1 .

17. Se salvează programul folosind un nume sugestiv, de exemplu surub.

INFO: Se observă că se pot deschide mai multe fişiere de lucru în VisualLISP şi se poate lucra simultan cu mai multe programe. De asemenea o funcţie încărcată dintr-un asemenea fişier, sau chiar o variabilă AutoLISP creată la prompterul Command, este activă toată sesiunea de lucru AutoCAD, exact ca orice comandă, de exemplu LINE. Un fişier AutoLISP poate conţine o singură funcţie principală sau mai multe. Orice funcţie dintr-un fişier încărcat în AutoCAD poate fi apelată în corpul unei funcţii sau în mod independent la promterul AutoCAD.

18. Creăm funcţia principală, care pentru început va afişa un mesaj.

(defun sd( ) (princ "Program principal desenare surub")

)

INFO: Se poate alege numele funcţiei respectând convenţia de notare AutoLISP amintită mai sus. Un nume sugestiv ar fi de exemplu surub, dar cum programul va fi rulat de foarte multe ori până în faza finală ar fi mai comod să putem lansa programul prin tastarea unei singure litere. Verificăm în AutoCAD litera s. Şi bineînţeles este atribuită comenzii Stretch, deci nu o putem folosi. Încercăm su, dar şi această combinaţie este asociată comenzii Subtract. Din această cauză am ales sd pentru numele funcţiei, care nu are nici o asociere.

19. Încărcăm programul în AutoCAD şi îl rulăm. Ca rezultat în fereastra de comenzi apare textul Program principal desenare şurub.

20. Consultăm referatul de la lucrarea 1 1 şi observăm că pentru desenarea şurubului prima etapă constă în desenarea unui hexagon folosind comanda Polygon. Introducem apelul acestei comenzi în program.

1 fereastra care conţine programul la care am lucrat până acum poate fi închisă sau minimizată, deoarece nu vom mai folosi programul. Pentru crearea programului nou se procedează analog cu crearea primului program

PROGRAMARE ÎN AUTOLISP PENTRU APLICAŢII 2D AUTOCAD

(command ”polygon” ”6” ”0,0” ”I” ”150”)

INFO: Pentru orice comandă AutoCAD folosită, la care nu se cunosc bine parametrii, este indicat să fie apelată în AutoCAD, şi să fie notaţi parametrii şi ordine solicitării acestora. În cazul nostru sunt solicitaţi 4 parametri în următoarea ordine: număr de laturi, centru cercului, înscris/circumscris, raza cercului. De asemenea este necesar să se cunoască dacă este necesar să fie terminată comanda cu Enter sau nu (cazul comenzii Line, Polyline, etc.). Dacă unele opţiuni implicite sunt convenabile pot fi înlocuite cu Enter - ””, dar este indicată păstrarea opţiunii pentru claritatea programului.

21. Am desenat hexagonul folosind datele din lucrarea 1, dar noi suntem interesaţi să putem genera un şurub în funcţie de dimensiunile introduse de la tastatură. Pentru hexagon avem nevoie de o variabilă în care să fie memorat centrul cercului generator şi de o variabila în care să fie memorată raza cercului. Introducem în program liniile necesare şi programul modificat va fi următorul:.

(defun sd( ) (princ "program principal desenare surub") (setq centru "0,0" razacap "150") (command "polygon" "6" centru "i" razacap)

)

INFO: Toate datele introduse între ghilimele nu sunt evaluate fiind tratate ca şiruri de caractere. În apelul unei comenzi AutoCAD parametrii care sunt daţi prin variabile nu sunt puşi între ghilimele. De fapt variabilele sunt apelate prin nume oriunde în program.

22. Introducem în fişier şi liniile care automatizează ştergerea desenului.

(defun sd( ) (princ "program principal desenare surub") (setq centru "0,0" razacap "150") (command "polygon" "6" centru "i" razacap)

(getstring "apasa enter sau spatiu pentru stergere") (command "undo" "400")

)

INFO: Getstring este o funcţie AutoLISP care solicită introducerea unui şir de caractere terminat cu Enter. Această linie program este necesară deoarece opreşte execuţia programului înainte de ştergerea desenului.

2.5.Conţinutul referatului

1. Titlul lucrării.

2. Tema lucrării.

3. Chestiunile de studiat.

4. Comenzile AutoCAD şi opţiunile acestora.

5. Funcţiile AutoLISP utilizate şi parametrii acestora.

6. Listingul programelor.

7. Desenul realizat în format electronic 2 şi tipărit.

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

8. Comentarii şi observaţii asupra aspectelor practice întâlnite 1 .

1 IMPORTANT. Detaliat.

INIŢIERE ÎN AUTOLISP. INTRODUCERE DE DATE. SELECŢIE DE OBIECTE

3. INIŢIERE ÎN AUTOLISP. INTRODUCERE DE DATE. SELECŢIE DE OBIECTE.

3.1.Scopul lucrării

Această lucrare de laborator urmăreşte familiarizarea studenţilor cu principalele funcţii AutoLISP pentru introducere de date şi selecţie de obiecte.

3.2.Noţiuni teoretice

Pentru generarea unor obiecte cu dimensiunile dorite este necesară introducerea de către utilizator a unor date de tip întreg, real, etc. În limbajul de programare AutoLISP există un set de funcţii specializate în introducerea de date. Cu ajutorul acestor funcţii pot fi solicitate numere, şiruri de caractere, puncte, distanţe, etc. De asemenea multe din comenzile AutoCAD solicită selectarea unuia sau mai multor obiecte. Limbajul de programare AutoLISP dispune de un set de funcţii specializate în crearea şi prelucrarea mulţimilor de selecţie. Se pot crea mulţimi de selecţie, se pot adăuga sau şterge obiecte dintr-o mulţime de selecţie existentă, etc. Funcţiile AutoLISP folosite în lucrare sunt explicate în cadrul punctului 3.4. Pentru o aprofundare a noţiunilor folosite poate fi consultat cursul de specialitate sau materialul bibliografic.

3.3.Chestiuni de studiat

1. Se studiază funcţiile pentru introducerea de date.

2. Se studiază funcţiile pentru crearea şi prelucrarea mulţimilor de selecţie.

3. Se continuă programul început în lucrarea 2, astfel încât acesta să genereze desenul din fig.3.1.

început în lucrarea 2, astfel încât acesta să genereze desenul din fig.3.1. Fig.3.1. Şurub nefiletat 3

Fig.3.1. Şurub nefiletat

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

3.4.Modul de lucru

1. Se lansează programul AutoCAD, se crează un desen nou şi se deschide editorul VisualLISP.

2. Se încarcă programul sd creat în cadrul lucrării de laborator 2.

INFO: În mod implicit programele care au fost deschise la închiderea sesiunii de lucru sunt deschise automat la deschiderea editorului VisualLISP.

3. Programul încărcat este următorul:

(defun sd( ) (princ "program principal desenare surub") (setq centru "0,0" razacap "150") (command "Polygon" "6" centru "i" razacap) (getstring "apasa enter sau spatiu pentru stergere") (command "Undo" "400")

)

4. Încărcând şi rulând desenul în AutoCAD se obţine desenul din fig.3.2.

desenul în AutoCAD se obţine desenul din fig.3.2 . Fig.3.2. Hexagonul generat de programul introdus 5.

Fig.3.2. Hexagonul generat de programul introdus

5. Completăm 1 programul existent cu liniile program necesare introducerii datelor care definesc capul şurubului.

(setq xc (getint "introduceti coordonata x a centrului")) (setq yc (getint "introduceti coordonata y a centrului")) (setq razacap (getint "introduceti raza centrului"))

INFO: Sunt necesare ca date de intrare coordonatele centrului: xc şi yc şi raza cercului care generează hexagonul. Pentru funcţiile de introducere şirul de caractere-mesaj nu este obligatoriu, dar este indicat, ca la rularea programului, fiecare cerere către utilizator să fie explicită 2 .

6. Încărcăm şi rulăm programul. Acum avem 3 variabile de tip întreg pe care le folosim ca parametri pentru comanda Polygon. Deoarece nu am modificat linia din program care desenează hexagonul variabilele introduse nu sunt folosite în program. Pentru a verifica efectul variabilelor apelăm comanda Polygon la prompterul AutoCAD şi ca parametri furnizăm variabilele create în program. Pentru apelarea acestora se tastează numele precedat de !, deci !nume_variabilă 3 . Modificăm programul şi rezultatul va fi următorul:

1 nu creaţi noi funcţii decât dacă este specificat explicit. Se încarcă inutil fişierul cu funcţii una mai complexă decât alta

2 pentru orice comandă AutoCAD cererea de parametri este însoţită de un mesaj explicit

3 verificarea valorii variabilelor pe parcursul execuţiei programului este foarte utilă pentru depanare

INIŢIERE ÎN AUTOLISP. INTRODUCERE DE DATE. SELECŢIE DE OBIECTE

(defun sd( ) (princ "program principal desenare surub") (setq xc (getint "introduceti coordonata x a centrului")) (setq yc (getint "introduceti coordonata y a centrului")) (setq razacap (getint "introduceti raza centrului")) (setq centru (list xc yc)) (command "Polygon" "6" centru "i" razacap) (getstring "apasa enter sau spatiu pentru stergere") (command "Undo" "400")

)

INFO: Din cele două variabile xc şi yc am construit o listă, cu ajutorul funcţiei List, care este furnizată ca parametru comenzii Polygon la cererea de introducere a centrului, deci a unui punct. Dacă dorim să verificăm valoarea unei variabile create cu Setq în AutoCAD o putem apela cu !nume_variabilă. De asemenea o variabilă creată într-un program AutoLISP poate fi folosită ca parametru pentru orice comandă AutoCAD direct de la prompterul AutoCAD. Această opţiune este utilă la verificarea comportării unor comenzi AutoCAD înainte de a introduce liniile respective în program

7. Deoarece avem nevoie ca desenul să rămână pe ecran 1 creăm o funcţie de ştergere st. De asemenea ambele funcţii create le transformăm în comenzi AutoCAD. Programul rezultat este următorul:

(defun c:sd( ) (princ "program principal desenare surub") (setq xc (getint "introduceti coordonata x a centrului")) (setq yc (getint "introduceti coordonata y a centrului")) (setq razacap (getint "introduceti raza centrului")) (setq centru (list xc yc)) (command "Polygon" "6" centru "i" razacap)

)

(defun c:st( ) (getstring "apasa enter sau spatiu pentru stergere")

(command "Undo" "400")

)

INFO: Acum avem în fişier două funcţii care definesc două comenzi AutoCAD 2 . O funcţie AutoLISP se apelează în AutoCAD întotdeauna prin nume între paranteze rotunde, în timp ce o comandă AutoCAD se apelează prin nume.

8. Pasul următor constă în extrudarea hexagonului. Spre deosebire de comenzile apelate până acum comanda EXTRUDE necesită selecţia obiectelor 3 . În AutoLISP sunt definite funcţii pentru crearea şi modificarea mulţimilor de selecţie. Introducem în program liniile necesare extrudării hexagonului:

(defun c:sd( ) (princ "program principal desenare surub") (setq xc (getint "introduceti coordonata x a centrului")) (setq yc (getint "introduceti coordonata y a centrului"))

1 să nu se şteargă automat

2 numele funcţiei trebuie precedat de c:

3 ca la toate comenzile de modificare unul din parametri este obiectul care trebuie modificat, care trebuie indicat programului printr-o variabilă, nu prin intervenţia utilizatorului

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

(setq razacap (getint "introduceti raza centrului")) (setq centru (list xc yc)) (setq ic (getint "introduceti inaltimea capului")) (command "Polygon" "6" centru "i" razacap) (setq cap (entlast)) (command "Color" "blue") (command "ShadeMode" "o") (command "VPoint" "1,1,1") (command "Extrude" cap "" ic "0") (setq cap (entlast)) (command "Zoom" "a")

)

INFO: Am introdus o linie solicită înălţimea capului şurubului şi o memorează în variabila ic. De asemenea funcţia AutoLISP Entlast memorează ultima entitate desenată (în cazul nostru chiar hexagonul). Deci variabila cap poate fi folosită ori de câte ori dorim să selectăm hexagonul. Comanda Color setează culoarea de desenare curentă în blue. Linia din program care apelează comanda ShadeMode schimbă modul de vizualizare al corpurilor din vizualizare tip cadru de sârmă în vizualizare corp plin + muchii. Comanda Vpoint setează punctul de vedere din care este vizualizat desenul. Pentru comanda Extrude este furnizată ca mulţime de selecţie variabila cap. ”” echivalează cu apăsarea tastei Enter, deci terminarea selecţiei 1 . De asemenea mai sunt furnizaţi ca parametrii înălţimea de extrudare ic şi unghiul de extrudare - 0. Ultima linie de program apelează comanda Zoom cu parametrul all pentru ca tot desenul să fie inclus în fereastra de desenare

9. Încărcând şi rulând desenul în AutoCAD se obţine desenul din fig.3.3.

desenul în AutoCAD se obţine desenul din fig.3.3 . Fig.3.3. Desenul generat după introducerea în program

Fig.3.3. Desenul generat după introducerea în program a liniilor necesare extrudării

10. Mai creăm o funcţie care va conţine toate liniile de introducere a datelor 2 , sd rămâne funcţia principală care va desena şurubul şi st funcţia de ştergere. De asemenea liniile care solicită parametrii de la utilizator vor fi transformate în comentarii şi în locul lor vor fi introduse linii de atribuire. Se face această substituire pentru evitarea introducerii datelor iniţiale (4 numere, deocamdată) la fiecare rulare a programului 3 .

(defun intdate( ) (princ "program principal desenare surub") (setq xc 0)

; (setq xc (getint "introduceti coordonata x a centrului"))

1 exact ca şi în AutoCAD este necesar să specificăm terminarea selecţiei de obiecte

2 creăm această funcţie atât pentru structurarea programului, cât şi pentru exemplificarea definirii/folosirii mai multor funcţii în cadrul aceluiaşi fişier

3 până la finalizarea unui program se fac foarte multe rulări de probă pe un set de date predefinit. Este mai comod ca datele să fie transmise automat în această fază

INIŢIERE ÎN AUTOLISP. INTRODUCERE DE DATE. SELECŢIE DE OBIECTE

(setq yc 0)

;

(setq yc (getint "introduceti coordonata y a centrului")) (setq razacap 150)

;

(setq razacap (getint "introduceti raza centrului")) (setq centru (list xc yc))

;

(setq ic (getint "introduceti inaltimea capului")) (setq ic 50)

)

(defun c:sd( ) (intdate) (command "Polygon" "6" centru "i" razacap) (setq cap (entlast)) (command "Color" "blue") (command "ShadeMode" "o") (command "VPoint" "1,1,1") (command "Extrude" cap "" ic "0") (setq cap (entlast)) (command "Zoom" "a")

)

(defun c:st( ) (getstring "apasa enter sau spatiu pentru stergere") (command "Undo" "400")

)

INFO: Se observă că funcţia nou creată intdate este apelată în corpul funcţiei sd 1 .

11. Desenăm cilindrul necesar pentru teşirea capului şurubului (vezi lucrarea1). Pentru aceasta cu comanda Cylinder se desenează un cilindru cu centrul în xc,yc, de rază razacap şi înălţime ic. Culoarea de desenare trebuie setată galben. Pentru aceasta se introduc în program liniile următoare:

(command "Color" "yellow") (command "Cylinder" centru razacap ic)

12. Pentru teşirea muchiilor cilindrului se vor introduce în funcţia sd următoarele linii.

(setq cil (entlast)) (command "Chamfer" (list (+ xc razacap) yc 0) "" "20" "10" (list (+ xc razacap) yc 0) "") (command "Chamfer" (list (+ xc razacap) yc ic) "" "20" "10" (list (+ xc razacap) yc ic) "")

INFO: Pentru a teşi muchiile cilindrului se foloseşte comanda Chamfer cu parametrii: un punct de pe suprafaţa care conţine muchia care va fi teşită, confirmarea teşirii unei muchii de pe suprafaţă, prima distanţă de teşire, a doua distanţă de teşire, un punct de pe muchia care trebuie teşită şi terminarea selecţiei (pot fi selectate pentru teşire una sau mai multe muchii de pe suprafaţa selectată iniţial). Punctul de selecţie pentru suprafaţă şi pentru muchie sunt identice fiind construite cu funcţia List: (list

1 la editarea programului este indicat să se păstreze un alinierea liniilor, folosirea caracterelor minuscule, etc. Un program bine structurat se “citeşte” mult mai uşor în cazul depanării

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

(+ xc razacap) yc 0), unde (+ xc razacap) ne dă coordonata x a punctului fiind obţinută prin adunarea razei cercului la coordonata x a centrului cercului. Deci punctul de selecţie este un punct de pe cerc (baza cilindrului), de fapt capătul din dreapta al diametrului orizontal 1 .

13. Desenul generat de program este prezentat în fig.3.4.

Desenul generat de program este prezentat în fig.3.4 . Fig.3.4. Desenul generat după introducerea în program

Fig.3.4. Desenul generat după introducerea în program a liniilor necesare teşirii cilindrului

14. Se foloseşte comanda Intersect pentru păstrarea părţii comune celor două solide. Se completează funcţia cu liniile:

(setq cil (entlast)) (command "intersect" cap cil "")

15. Desenul generat de program este prezentat în fig.3.5.

Desenul generat de program este prezentat în fig.3.5 . Fig.3.5. Desenul generat după intersectarea celor două

Fig.3.5. Desenul generat după intersectarea celor două corpuri

16. Corpul obţinut este asociat variabilei cap:

(setq cap (entlast))

17. Se creează o mulţime de selecţie surub căreia îi atribuim ca prim element entitatea asociată variabilei cap:

(setq surub (ssadd)) (ssadd cap surub)

INFO: Funcţia ssadd 2 creează o mulţime de selecţie sau adaugă elemente unei mulţimi de selecţie existente.

1 ATENŢIE! la setările AutoCAD. Daca modul OSNAP este activ în locul punctului indicat va fi selectat cel mai apropiat punct particular, conform acţiunii modului OSNAP, POLAR, etc. Acest lucru generează erori de execuţie greu de depistat 2 este recomandată parcurgerea tuturor funcţiilor de lucru cu mulţimi şi înţelegerea modului de acţiune al acestora asupra obiectelor

INIŢIERE ÎN AUTOLISP. INTRODUCERE DE DATE. SELECŢIE DE OBIECTE

18. Se construieşte corpul cilindrului folosind comanda Cylinder. Se completează funcţia de introducere date intdate:

; (setq icil (getint "introduceti inaltimea cilindrului")) (setq icil 400)

şi funcţia de desenare sd cu liniile program:

(command "Color" "cyan") (setq rc (/ razacap 2)) (command "cylinder" centru rc icil)

19. Procedând ca la punctul 10 se teşeşte partea de sus a cilindrului

(command "Zoom" "a") (command "Color" "yellow") (setq pct (list (+ xc rc) yc icil)) (command "Chamfer" pct "" "8" "8" pct "")

INFO: Comanda Zoom se apelează înaintea teşirii deoarece datorită setărilor implicite nu pot fi selectate puncte înafara spaţiului de desenare.

20. Desenul generat de program este prezentat în fig.3.6.

Desenul generat de program este prezentat în fig.3.6 . Fig.3.6. Desenul generat după intersectarea celor două

Fig.3.6. Desenul generat după intersectarea celor două corpuri

21. Se adaugă şi cilindrul desenat la mulţimea de selecţie surub:

(ssadd corp surub)

22. Cu comanda AutoCAD Union se crează un singur corp obţinut din unirea celor două corpuri create până acum

(command "union" surub "")

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

23. Programul complet este următorul:

(defun intdate( ) (princ "program principal desenare surub") (setq xc 0)

;

(setq xc (getint "introduceti coordonata x a centrului")) (setq yc 0)

;

(setq yc (getint "introduceti coordonata y a centrului")) (setq razacap 150)

;

(setq razacap (getint "introduceti raza centrului")) (setq centru (list xc yc))

;

(setq ic (getint "introduceti inaltimea capului")) (setq ic 50)

;

(setq icil (getint "introduceti inaltimea cilindrului")) (setq icil 400)

)

(defun c:sd( ) (intdate) (command "Polygon" "6" centru "i" razacap) (setq cap (entlast)) (command "Color" "blue") (command "ShadeMode" "o") (command "VPoint" "1,1,1") (command "Extrude" cap "" ic "0") (command "Color" "yellow") (setq cap (entlast)) (command "Cylinder" centru razacap ic) (setq cil (entlast)) (command "Chamfer" (list (+ xc razacap) yc 0) "" "20" "10" (list (+ xc razacap) yc 0) "") (command "Chamfer" (list (+ xc razacap) yc ic) "" "20" "10" (list (+ xc razacap) yc ic) "") (setq cil (entlast)) (command "intersect" cap cil "") (setq cap (entlast)) (setq surub (ssadd)) (ssadd cap surub) (command "Color" "cyan") (setq rc (/ razacap 2)) (command "cylinder" centru rc icil) (command "Zoom" "a") (command "Color" "yellow") (setq pct (list (+ xc rc) yc icil)) (command "Chamfer" pct "" "8" "8" pct "") (setq corp (entlast)) (ssadd corp surub) (command "union" surub "") (command "Zoom" "a")

)

INIŢIERE ÎN AUTOLISP. INTRODUCERE DE DATE. SELECŢIE DE OBIECTE

(defun c:st( ) (getstring "apasa enter sau spatiu pentru stergere") (command "Undo" "400")

)

24. După rularea în AutoCAD a programului se generează automat desenul din fig.3.7.

a programului se generează automat desenul din fig.3.7 . Fig.3.7. Desenul generat după unirea celor două

Fig.3.7. Desenul generat după unirea celor două corpuri

3.5.Conţinutul referatului

1. Titlul lucrării.

2. Tema lucrării.

3. Chestiunile de studiat.

4. Comenzile AutoCAD şi opţiunile acestora.

5. Funcţiile AutoLISP utilizate şi parametrii acestora.

6. Listingul programelor.

7. Desenul realizat în format electronic 1 şi tipărit.

8. Comentarii şi observaţii asupra aspectelor practice întâlnite 2 .

1 În format AutoCAD: DXG, DXF, în format grafic vectorizat: PLT şi exportat ca fişier grafic: BMP şi JPG 2 IMPORTANT. Detaliat.

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

4. INIŢIERE ÎN AUTOLISP MANIPULARE OBIECTE, LUCRUL CU BAZA DE DATE AUTOCAD

4.1.Scopul lucrării

Această lucrare de laborator urmăreşte familiarizarea studenţilor cu principalele funcţii AutoLISP pentru manipulare a obiectelor şi extrageri de date din baza de date AutoCAD.

4.2.Noţiuni teoretice

Orice desen AutoCAD este construit pe baza unei baze de date care conţine descrierea tuturor entităţilor din desen. Deci orice fişier AutoCAD conţine descrierea entităţilor din desen, la încărcarea acestuia desenul este regenerat pe baza acestor descrieri. Atributele unei entităţi din desen 1 sunt conţinute în baza de date a acestui desen 2 . În AutoLISP se regăsesc funcţii care extrag sau introduc date în baza de date, deci prelucrează această bază de date. Cu ajutorul acestor funcţii se pot modifica sau crea obiecte în desen fără desenarea efectivă a acestora. Trebuie reţinut că orice obiect din desen este conţinut în baza de date ca o listă de liste. Fiecare sublistă conţine doi termeni – codul proprietăţii 3 , respectiv valoarea acesteia. În funcţie de complexitatea obiectului, numărul de subliste creşte. Trebuie remarcat că complexitatea acestor descrieri creşte pentru versiunile AutoCAD recente. În lucrare vor fi explicate noţiunile principale, minimul necesar pentru lucrul cu baza de date a unui desen AutoCAD. Lucrul direct cu baza de date creşte spectaculos viteza de execuţie a programului.

4.3.Chestiuni de studiat

1. Se studiază comenzile AutoCAD pentru generare de solide 3D prin extrudare.

2. Se studiază funcţiile pentru crearea şi prelucrarea mulţimilor de selecţie

3. Se studiază funcţiile pentru extragerea atributelor din baza de date a unui desen

pentru extragerea atributelor din baza de date a unui desen Fig.4.1. Simularea trasării unei spire 1

Fig.4.1. Simularea trasării unei spire

1 linie, polilinie, cerc, sferă, etc.

2 numele stratului de desenare, culoarea de desenare, coordonatele punctelor de definiţie, nume, etc.

3 coduri de grup DXF

INIŢIERE ÎN AUTOLISP. MANIPULARE OBIECTE. LUCRUL CU BAZA DE DATE AUTOCAD

AutoCAD

4. Se continuă programul început în lucrarea 3, astfel încât acesta să genereze desenul din fig.4.1.

4.4.Modul de lucru

1. Se lansează programul AutoCAD, se creează un desen nou şi se deschide editorul VisualLISP.

2. Se încarcă programul sd creat în cadrul lucrării de laborator 2 şi 3.

INFO: În mod implicit programele care au fost deschise la închiderea sesiunii de lucru sunt deschise automat la deschiderea editorului VisualLISP.

3. Se încarcă şi rulează programul în AutoCAD. După rulare se creează un strat de desenare cu numele şurub. Se selectează şurubul desenat şi se trece în stratul nou creat prin selectarea acestuia. După această operaţie se închide stratul de desenare off (se apasă pe bec, care devine negru).

INFO: După rularea programului toate funcţiile şi variabilele din program rămân active, putând fi apelate în cadrul unui alt program, sau direct din AutoCAD, în cadrul sesiunii de lucru curente.

4. Se minimizează fişierul curent. Se creează un fişier nou în editorul VisualLISP şi se salvează cu numele spira.

INFO: A fost creat un fişier nou pentru simplificarea urmăririi programului principal. Este mai simplă scrierea funcţiilor unui program relativ complex în mai multe fişiere, decât scrierea acestora într-un singur fişier care să conţină sute sau mii de linii program.

5. Se creează o funcţie nouă numită filet fără parametri. Aceasta va fi funcţia principală a programului.

(defun filet( ) (princ "Program principal generare filet")

)

6. În lucrările precedente am creat corpul brut al unui şurub, care mai trebuie filetat.

Pentru aceasta trebuie să generăm filetul cu ajutorul unei funcţii AutoLISP. Să trecem în revistă posibilităţile de creare a filetului pentru a înţelege mai bine structura programului pe care trebuie să îl scriem. Ştim că putem extruda un profil de-a lungul unei traiectorii. Este necesar bineînţeles ca traiectoria să fie continuă, generată de exemplu cu

Traiectoria de extrudare care este o polilinie Profilul de extrudat – cerc – se vede
Traiectoria de extrudare care este o polilinie
Profilul de extrudat – cerc – se
vede ca o linie datorită rotirii UCS
după axa OX
a.
b.

Fig.4.2. Extrudarea unui cerc de-a lungul unei traiectorii (căi)

a – profilul de extrudat şi traiectoria,

b corpul rezultat

comanda polyline. Realizăm o verificare a comenzii.

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

În AutoCAD desenăm o polilinie în modul arc, care să conţină mai multe segmente. Această polilinie va fi traiectoria de extrudare (fig.4.2.a). Rotim UCS-ul cu 90 de grade după axa OX (de exemplu) şi desenăm un cerc, care va constitui profilul de extrudat (fig.4.2a). Extrudăm cercul de-a lungul traiectoriei PATH Cale (fig.4.2.b). Deşi această metodă poate fi folosită pentru crearea filetului (pentru filet triunghiular se extrudează un triunghi, pentru filet rotund un cerc, etc.) traiectoria de extrudare trebuie să fie o spirală 3D. Ştim că polyline crează prin definiţie entităţi 2D, deci nu poate fi folosită pentru generarea traiectoriei. Pentru trasarea unei polilinii 3D dispunem de comanda 3DPoly. Această comandă creează o polilinie ale cărei segmente sunt orientate în spaţiul tridimensional. Dar nici această comandă AutoCAD nu satisface, deoarece nu poate desena decât segmente de dreaptă, spre deosebire de polyline care trasa şi arce de cerc. Datorită acestor motive trebuie să generăm traiectoria de extrudare cu ajutorul unui program AutoLISP. Pentru crearea acestui program (funcţii) se parcurg punctele următoarele din modul de lucru.

7. Se completează programul cu funcţia de ştergere.

(defun filet( ) (princ "Program principal generare filet") (setq test (getstring "apasa enter sau spatiu")) (sterge)

)

(defun sterge( ) (command "UNDO" "END") (command "UNDO" "200")

)

8. Se observă că s-au repetat operaţiile de la lucrarea 3, obţinându-se 2 funcţii, una constituind funcţia principală de desenare şi cealaltă fiind funcţia de ştergere.

9. Se încarcă şi se rulează acest program în AutoCAD

Acum avem încărcate funcţia de ştergere (apelată automat în programul principal) şi bineînţeles funcţia principală filet. Se observă că după apelarea funcţiei de ştergere sunt anulate toate setările făcute de programul surub. Totuşi funcţiile şi variabilele create în acest program rămân active şi pot fi apelate. Avem nevoie de punctul de centru al şurubului care este acelaşi cu cel al spiralei, la care adăugăm coordonata z egală cu grosimea capului.

10. Verificăm dacă putem apela aceste variabile. În AutoCAD încercăm acest lucru

Command: !centru (0 0) Command: !ic

50

 

11.

Se adaugă instrucţiuni în corpul funcţiei filet:

-

Se modifică centrul spirei adăugând şi coordonata z

(setq centrusp (list (car centru) (cadr centru) ic)) verificăm Command: !centrusp (0 0 50)

- Folosind funcţia command se crează un cerc cu centrul în origine şi rază dată de utilizator.

- Analog se creează o linie orizontală care are un capăt în origine şi un capăt pe cerc

INIŢIERE ÎN AUTOLISP. MANIPULARE OBIECTE. LUCRUL CU BAZA DE DATE AUTOCAD

Funcţia filet va fi:

(defun c:filet( ) (princ "Program principal generare filet") (setq centrusp (list (car centru) (cadr centru) ic)) (command "vpoint" "1,1,1") (command "osnap" "off") (command "color" "red") (command "circle" centrusp razacap) (command "color" "green") (command "line" centrusp (list razacap 0 ic) "") (command "vpoint" "1,1,1") (setq test (getstring "apasa enter sau spatiu")) (sterge)

)

INFO: Se observă că a fost dezactivat modul OSNAP pentru evitarea selecţiei punctelor particulare ale entităţilor, selectabile implicit în modul OSNAP.

Reîncărcăm fişierul şi rulând-ul în AutoCAD apare vizibilă deplasarea ucs-ului în centrul ecranului de desenare, fiind desenat cercul şi linia.

12. Se memorează într-o variabilă linia (ultima entitate desenată) şi se roteşte cu un unghi specificat. Se repetă această operaţie până când linia ajunge în poziţia iniţială. Pentru aceasta se va folosi funcţia repeat. Această funcţie repetă instrucţiunile din corpul ei de n ori. (repeat <numar> <expresie> … )

Programul va fi completat cu instrucţiunile necesare:

(defun c:filet( ) (princ "Program principal generare filet") (setq centrusp (list (car centru) (cadr centru) ic)) (command "vpoint" "1,1,1") (command "osnap" "off") (command "color" "red") (command "circle" centrusp razacap) (command "color" "green") (command "line" centrusp (list razacap 0 ic) "") (setq linie (entlast)) (repeat 72 (command "rotate" linie "" centrusp "5") (setq linie (entlast))

)

(setq test (getstring "apasa enter sau spatiu")) (sterge)

)

13. Am desenat şi rotit această linie, deoarece capătul de pe cerc al acesteia descrie proiecţia în plan a unei spirale. Deci vom extrage după fiecare rotaţie coordonatele punctului de intersecţie dintre linie şi cerc. Între două puncte consecutive vom desena cu comanda 3dpoly un segment de linie. Polilinia obţinută va aproxima un arc de cerc.

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

Deoarece avem linia memorată ca mulţime de selecţie în variabila linie putem să o folosim pentru a determina coordonatele celui de-al doilea punct al ei. Vom redesena linia în AutoCAD (fără să mai ştergem, deci întrerupem funcţia filet apăsând tasta Esc) şi vom rula de la prompterul command funcţii AutoLISP pentru observarea efectului acestor funcţii. După clarificarea efectului acestora vor fi folosite în programul principal. Pentru a observa mai bine linia se deplasează ecranul de desenare folosind barele de derulare ale acestuia. ATENŢIE! Linia trebuie desenată din origine, deoarece funcţiile AutoLISP extrag informaţiile raportate la UCS-ul WORLD, deci nu la un ucs definit ulterior. Command: (setq lin (entlast)) <Entity name: 7ef4ff60> Se observă că funcţia setq a asociat variabilei lin entitatea care este ultima entitate desenată, deci linia.

INFO: În funcţie de desenul creat şi de versiunea AutoCAD numele entităţii diferă, în acest caz fiind

7ef4ff60

14. Folosim funcţia entget pentru a obţine informaţii despre o entitate din desen, în cazul

nostru despre cea memorată în variabila lin. Command: (entget lin) ((-1 . <Entity name: 7ef4ff60>) (0 . "LINE") (330 . <Entity name: 7ef4fcf8>) (5 . "9C") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 3) (100 . "AcDbLine") (10 0.0 0.0 50.0) (11 150.0 -8.52651e-014 50.0) (210 0.0 0.0 1.0)) Am obţinut o listă de liste care conţin fiecare codul unei proprietăţi a entităţii şi valoarea asociată lui. Se observă că -1 corespunde numelui entităţii. Analog codul 8 are asociat numele layer-ului în care e desenată entitatea, codul 0 corespunde tipului entităţii şi bineînţeles, ceea ce ne interesează deocamdată, capetele liniei sunt asociate cu 10 şi 11. Ne interesează numai coordonatele celui de-al doilea punct, deci 11. Se observă că avem 40 pentru x (valoarea introdusă de noi), 0 pentru y şi z.

INFO: Bineînţeles că coordonata y este ”aproape” zero, deoarece am rotit linia şi aceasta nu a mai ajuns în poziţia orizontală. Pentru simplificarea explicaţiilor considerăm că aceasta se află în poziţia în care a fost desenată, adică orizontală.

15. Putem extrage aceste coordonate cu funcţia assoc.

(assoc <articol> <lista>). Funcţia caută un articol în lista asociată şi returnează intrarea din listă. Dacă articol nu este găsit ca o cheie în lista, assoc returnează nil. Practic:

Command: (assoc 11 (entget lin)) (11 150.0 0.0 50.0) unde lista este dată de entget. Memorăm într-o variabilă. Command: (setq co (assoc 11 (entget lin))) (11 150.0 0.0 50.0)

16. Deoarece nu avem nevoie de 11 îl eliminăm cu funcţia cdr care taie (elimină) primul element dintr-o listă.

Command: (setq co (cdr co)) (150.0 0.0 50.0)

17. Folosim funcţia car pentru a extrage primul element din listă, în acest caz coordonata x a punctului.

Command: (setq pctx (car co))

150.0

INIŢIERE ÎN AUTOLISP. MANIPULARE OBIECTE. LUCRUL CU BAZA DE DATE AUTOCAD

Command: (setq pcty (cadr co))

0.0

Command: (setq pct (list pctx pcty)) (150.0 0.0) Am extras din lista co cel de-al doilea element (coordonata y) şi am introdus-o împreună cu coordonata pe x în lista pct creeată cu funcţia list. Avem acum coordonatele punctului şi deci repetând aceste comenzi după fiecare rotaţie a liniei vom obţine coordonatele punctelor care definesc “arcul” de cerc (proiecţia spiralei în plan). Verificăm aceasta simulând trasarea spiralei cu comanda polyline

18. Creăm o nouă funcţie care să realizeze acest lucru.

Programul în varianta finală:

(defun c:filet( ) (princ "Program principal generare filet") (setq centrusp (list (car centru) (cadr centru) ic)) (command "vpoint" "1,1,1") (command "osnap" "off") (command "color" "red") (command "circle" centrusp razacap) (command "color" "green") (command "line" centrusp (list razacap 0 ic) "") (setq linie (entlast)) (command "color" "bylayer") (setq pct2 (list razacap 0 ic)) (repeat 72 (command "rotate" linie "" centrusp "5") (setq lin linie) (setq pct1 pct2) (coord) (setq pct2 pct) (command "pline" pct1 pct2 "")

)

(setq test (getstring "apasa enter sau spatiu")) (sterge)

)

(defun coord( ) (setq co (assoc 11 (entget lin))) (setq co (cdr co)) (setq pctx (car co)) (setq pcty (cadr co)) (setq pct (list pctx pcty))

)

(defun sterge( ) (command "undo" "END") (command "undo" "200")

)

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

19. După rularea în AutoCAD a programului se obţine desenul din Fig.4.3.

în AutoCAD a programul ui se obţine desenul din Fig.4.3 . Fig.4.3. Simularea trasării unei spire

Fig.4.3. Simularea trasării unei spire

4.5.Conţinutul referatului

1. Titlul lucrării.

2. Tema lucrării.

3. Chestiunile de studiat.

4. Comenzile AutoCAD şi opţiunile acestora.

5. Funcţiile AutoLISP utilizate şi parametrii acestora.

6. Listingul programelor.

7. Desenul realizat în format electronic 1 şi tipărit.

8. Comentarii şi observaţii asupra aspectelor practice întâlnite 2 .

1 În format AutoCAD: DXG, DXF, în format grafic vectorizat: PLT şi exportat ca fişier grafic: BMP şi JPG 2 IMPORTANT. Detaliat.

INIŢIERE ÎN AUTOLISP. LUCRUL CU BAZA DE DATE AUTOCAD. FUNCŢII DE CONDIŢIONARE ŞI DE CICLARE

5. INIŢIERE ÎN AUTOLISP LUCRUL CU BAZA DE DATE AUTOCAD, FUNCŢII CONDIŢIONALE ŞI DE CICLARE

5.1.Scopul lucrării

Această lucrare de laborator urmăreşte familiarizarea studenţilor cu principalele funcţii AutoLISP ciclare şi extrageri de date din baza de date AutoCAD.

5.2.Noţiuni teoretice

În lucrare sunt folosite funcţiile AutoLISP de condiţionare şi ciclare prezentate în curs.

5.3.Chestiuni de studiat

1. Se studiază comenzile AutoCAD Extrude, Ucs, 3Dpoly.

2. Se studiază funcţiile pentru crearea şi prelucrarea mulţimilor de selecţie

3. Se studiază funcţiile pentru extragerea atributelor din baza de date a unui desen AutoCAD

4. Se continuă programul început în lucrarea 4, astfel încât acesta să genereze şurubul filetat

5.4.Modul de lucru

1. Se lansează programul AutoCAD, se creează un desen nou şi se deschide editorul VisualLISP.

2. Se încarcă în AutoLISP programul sd creat în cadrul lucrării de laborator 3, respectiv programul filet creat în cadrul lucrării de laborator 4.

3. Se încarcă şi rulează programele în AutoCAD. Se observă că spirala este generată de-a lungul cercului mare (de generare a hexagonului), deoarece pentru generare s-a folosit razacap în loc de rc, care este raza cilindrului. Se înlocuieşte razacap cu rc în programul filet (apare de două ori) şi se rulează din nou ambele programe. Pentru o vizualizare mai bună se foloseşte comanda 3DOrbit cu opţiunea WireFrame.

4. Modificăm programul filet pentru a transforma cercul generat într-o spiră. Pentru

aceasta la coordonatele capătului liniei adăugăm coordonata z. Am setat pasul de generare a spirei de 5 grade. Întradevăr 360/72=5. Introducem o variabilă în locul numărului 72 care ne dă rezoluţia spirei.

Fisierul surub

(defun intdate( ) (princ "program principal desenare surub")

; (setq rezs (getint "introduceti rezolutia spirei"))

(setq rezs 75)

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

; (setq pf (getint "introduceti pasul filetului")) (setq pf 75)

)

Fisierul spira (defun c:filet( )

(princ "Program principal generare filet")

(repeat rezs

5. Folosim această variabilă pentru generarea coordonatei z a spirei. La fiecare parcurgere a instrucţiunilor din ciclul repeat adăugăm variabila z incrementată cu o valoare care să ne dea pasul spirei, respectiv pasul filetului. Deoarece în AutoLISP rezultatul împărţirii a două numere întregi este tot un număr întreg, trebuie să iniţializăm pasul filetului ca număr real. Modificările apărute în cele două programe sunt următoarele:

(defun intdate( )

(princ "program principal desenare surub")

;

(setq rezs (getint "introduceti rezolutia spirei")) (setq rezs 72)

;

(setq pf (getint "introduceti pasul filetului")) (setq pf 100.0)

)

(defun c:sd( )

)

(defun c:filet( )

(princ "Program principal generare filet")

(setq pct2 (list razacap 0 ic)) (setq pctz 0) (repeat rezs

(command "rotate" linie "" centrusp (/ 360 rezs))

(setq pcty (cadr co)) (setq pctz (+ pctz (/ pf rezs))) (setq pct (list pctx pcty pctz))

)

(defun sterge( )

După rulare se observă o spiră

6. Modificăm programul astfel încât să fie generate toate spirele filetului. Presupunem că pasul filetului este 20 (raportat la dimensiunile şurubului). Deci trebuie să generăm un

INIŢIERE ÎN AUTOLISP. LUCRUL CU BAZA DE DATE AUTOCAD. FUNCŢII DE CONDIŢIONARE ŞI DE CICLARE

număr de spire egal cu raportul dintre înălţimea cilindrului şi pasul filetului. Modificând linia repeat din program obţinem:

(repeat (* rezs (/ ic pf)) Dar argumentul funcţiei repeat este în majoritatea cazurilor un număr real şi funcţia repeat acceptă ca argument numai numere întregi. Modificăm programul astfel încât să înlocuim funcţia de ciclare repeat cu funcţia de ciclare while. Pentru a studia modul de apelare şi parametrii acestor funcţii se tastează numele funcţiei în program şi se apasă Ctrl-F1 (modul uzul de apelare a Help-ului contextual). Se va deschide fereastra de Help poziţionată la funcţia respectivă. Modificăm programul pentru funcţia while. Obţinem modulul:

(defun intdate( )

(princ "program principal desenare surub")

;

(setq icil (getint "introduceti inaltimea cilindrului")) (setq icil 400)

;

(setq rezs (getint "introduceti rezolutia spirei")) (setq rezs 72)

;

(setq pf (getint "introduceti pasul filetului")) (setq pf 10.0)

)

 

(defun c:filet( )

 

(setq pctz 0) (setq temp (* rezs (/ icil pf))) (while (>= temp 0) (command "rotate" linie "" centrusp (/ 360 rezs)) (setq lin linie) (setq pct1 pct2) (coord) (setq pct2 pct) (command "pline" pct1 pct2 "") (setq temp (- temp 1))

pct1 pct2 "") (setq temp (- temp 1)) … După rularea programului se obţine spira din

După rularea programului se obţine spira din figură

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

7. Apelăm funcţia de ştergere ST şi observăm că nu se anulează tot desenul (funcţiile executate). Aceasta din cauză că anulăm un număr mic de comenzi. Se dă comanda Undo cu parametru 65536 de câte ori este nevoie. Eventual se modifică şi în funcţiile de ştergere din cele două programe.

8. Pentru a obţine filetul utilizăm această spiră pentru a extruda un profil de filet de-a lungul ei. Cel mai simplu este să obţinem un profil rotund, deci să extrudăm un cerc. Pentru toate tipurile de filet se procedează la fel. Trebuie desenat un cerc (profilul filetului) într-un plan perpendicular pe începutul căii de extrudare. Pentru aceasta mutăm şi rotim ucs-ul la capătul liniei generatoare de filet. Ştim coordonatele celui de- al doilea punct al liniei şi orientarea acesteia. Pentru aceasta folosim comanda Ucs cu opţiunea New. Corectăm şi erorile din program, mai precis: raza de generare a spirei trebuie să fie rc nu razacap; spira trebuie să înceapă de la baza cilindrului nu de la baza capului. De asemenea păstrăm doar generarea unei spire pentru simplitate (am verificat generarea filetului).După aceste modificări programul este următorul:

(defun intdate( ) (princ "program principal desenare surub") (setq xc 0)

;

(setq xc (getint "introduceti coordonata x a centrului")) (setq yc 0)

;

(setq yc (getint "introduceti coordonata y a centrului")) (setq razacap 150)

;

(setq razacap (getint "introduceti raza centrului")) (setq centru (list xc yc))

;

(setq ic (getint "introduceti inaltimea capului")) (setq ic 50)

;

(setq icil (getint "introduceti inaltimea cilindrului")) (setq icil 400)

;

(setq rezs (getint "introduceti rezolutia spirei")) (setq rezs 72)

;

(setq pf (getint "introduceti pasul filetului")) (setq pf 10.0)

)

(defun c:sd( ) (intdate) (command "Polygon" "6" centru "i" razacap) (setq cap (entlast)) (command "Color" "blue") (command "ShadeMode" "o") (command "VPoint" "1,1,1") (command "Extrude" cap "" ic "0") (command "Color" "yellow") (setq cap (entlast)) (command "Cylinder" centru razacap ic) (setq cil (entlast)) (command "Chamfer" (list (+ xc razacap) yc 0) "" "20" "10" (list (+ xc razacap) yc 0) "")

INIŢIERE ÎN AUTOLISP. LUCRUL CU BAZA DE DATE AUTOCAD. FUNCŢII DE CONDIŢIONARE ŞI DE CICLARE

(command "Chamfer" (list (+ xc razacap) yc ic) "" "20" "10" (list (+ xc razacap) yc ic) "") (setq cil (entlast)) (command "intersect" cap cil "") (setq cap (entlast)) (setq surub (ssadd)) (ssadd cap surub) (command "Color" "cyan") (setq rc (/ razacap 2)) (command "cylinder" centru rc icil) (command "Zoom" "a") (command "Color" "yellow") (setq pct (list (+ xc rc) yc icil)) (command "Chamfer" pct "" "8" "8" pct "") (setq corp (entlast)) (ssadd corp surub) (command "union" surub "") (command "Zoom" "a")

)

(defun c:st( ) (getstring "apasa enter sau spatiu pentru stergere") (command "Undo" "400")

)

(defun c:filet( ) (princ "Program principal generare filet") (setq centrusp (list (car centru) (cadr centru) ic)) (command "vpoint" "1,1,1") (command "osnap" "off") (command "color" "red") (command "circle" centrusp rc) (command "color" "green") (command "line" centrusp (list rc 0 ic) "") (setq linie (entlast)) (setq coorducs (cdr (assoc 11 (entget linie)))) (command "color" "bylayer") (setq pct2 (list razacap 0 ic)) (setq pctz ic) (setq temp (* rezs (/ (- icil ic) pf))) (setq pct1 pct2) (setq lis (list pct1 pct2)) (while (>= temp 0) (command "rotate" linie "" centrusp (/ 360 rezs)) (setq lin linie) (setq pct1 pct2) (coord) (setq pct2 pct) (setq lis (cons pct lis)) (setq temp (- temp 1))

)

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

(setq temp (* rezs (/ (- icil ic) pf))) (command "3dpoly") (while (>= temp 0) (setq pct1 (car lis)) (setq pct2 (cadr lis)) (command pct1 pct2) (setq lis (cdr lis)) (setq temp (- temp 1))

)

(command "") (setq fil (entlast)) (command "ucs" "m" coorducs) (command "ucs" "n" "x" "") (command "color" "cyan") (command "circle" "0,0" (/ pf 2.5)) (setq profil (entlast)) (command "extrude" profil "" "p" fil)

(setq test (getstring "apasa enter sau spatiu")) (sterge)

)

(defun coord( ) (setq co (assoc 11 (entget lin))) (setq co (cdr co)) (setq pctx (car co)) (setq pcty (cadr co)) (setq pctz (+ pctz (/ pf rezs))) (setq pct (list pctx pcty pctz))

)

(defun sterge( ) (command "UNDO" "END") (command "UNDO" "200")

)

9. Se studiază posibilităţile de optimizare a generării filetului.

5.5.Conţinutul referatului

1. Titlul lucrării.

2. Tema lucrării.

3. Chestiunile de studiat.

4. Comenzile AutoCAD şi opţiunile acestora.

5. Funcţiile AutoLISP utilizate şi parametrii acestora.

6. Listingul programelor.

7. Desenul realizat în format electronic 1 şi tipărit.

8. Comentarii şi observaţii asupra aspectelor practice întâlnite 2 .

1 În format AutoCAD: DXG, DXF, în format grafic vectorizat: PLT şi exportat ca fişier grafic: BMP şi JPG 2 IMPORTANT. Detaliat.

INIŢIERE ÎN AUTOLISP. LUCRUL CU BAZA DE DATE AUTOCAD. FUNCŢII DE CREARE A OBIECTELOR

6. INIŢIERE ÎN AUTOLISP LUCRUL CU BAZA DE DATE AUTOCAD, FUNCŢII DE CREARE A OBIECTELOR

6.1.Scopul lucrării

Această

lucrare

de

laborator

urmăreşte

familiarizarea

studenţilor

cu

crearea

şi

modificarea entităţilor în date din baza de date AutoCAD a desenului.

6.2.Noţiuni teoretice

Crearea şi modificarea entităţilor 1 direct în baza de date a desenului în AutoCAD oferă avantajele unei generări sau modificări rapide a desenului. Funcţia ENTMAKE permite crearea unei noi entităţi în desenul curent. Dacă entitatea a putut fi creată, funcţia returnează parametrii definitorii ai entităţii. În cazul în care entitatea nu a putut fi creată, funcţia returnează Nil. Pentru crearea unei entităţi se apelează funcţia ENTMAKE având ca

parametru o listă ce conţine parametrii definitorii ai entităţii. Forma acestei liste trebuie să fie identică cu forma listelor returnate de funcţia ENTGET. O metodă simplificată de obţinere a unor noi entităţi este următoarea:

- se aplică funcţia ENTGET unei entităţi asemănătoare ce există sau este creată în desenul curent. Se obţin astfel caracteristicile primare ale noii entităţi;

-

caracteristicile obţinute se modifică, şi cu funcţia ENTMAKE se crează noua

entitate.

Înainte de a crea o nouă entitate funcţia ENTMAKE verifică validitatea următoarelor caracteristici:

- numele stratului de desenare;

- numele tipului de linie;

- tipul de culoare;

- numele blocurilor;

- numele tipurilor de cotări;

- numele tipurilor de text.

În cazul unui nume de strat de desenare nou ENTMAKE îl va crea automat. Primul sau al doilea element al listei trebuie să fie de tipul entitate (line, circle, arc, etc.). Dacă tipul

deentitate este al doilea element al listei, el poate fi precedat doar de numele entităţii care atunci când entitatea este creată este automat ignorat. Definirea unei entităţi complexe presupune apelarea repetată a funcţiei ENTMAKE, deoarece trebuie create mai multe subentităţi. Succesiunea de subentităţi trebuie terminată prin crearea entităţii SEQUEND 2 sau ENDBLK 3 . Dacă una din subentităţi este greşit definită ENTMAKE abandonează automat crearea entităţii complexe. Funcţia este ENTMOD folosită pentru actualizaea parametrilor entităţii al cărui nume este furnizat în lista parametrilor sub codul de grupă -1. Prin actualizarea parametrilor înţelegem înlocuirea vechilor parametri cu alţii noi. Argumentul funcţiei ENTMOD este o listă ai cărui parametri trebuie să fie similară cu cea returnată de funcţia ENTGET.

1 Obiectelor

2 Pentru polilinii

3 Pentru blocuri

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

Modificarea unei entităţi existente trebuie să parcurgă următoarele etape:

- entitatea se extrage utilizând funcţia ENTGET, obţinându-se în acest fel lista parametrilor entităţii;

- se modifică lista obţinută;

- se actualizează parametrii entităţii cu funcţia ENTMOD.

Utilizarea funcţiei ENTMOD impune următoarele restricţii:

- identificatorul entităţii nu poate fi modificat;

- tipul de text, tipul de linie, numele blocurilor trebuie să fie definite înainte de a fi utilizate de funcţie. În cazul în care este ENTMOD utilizată pentru actualizarea unei entităţi compuse, aceasta după modificare va fi automat reafişată. În cazul în care funcţia actualizează o subentitate a unei entităţi compuse imaginea pe terminal nu va fi modificată. Pentru

actualizarea imaginii trebuie utilizată funcţia ENTMOD.

6.3.Chestiuni de studiat

1. Se studiază programul de generare a unei spire.

2. Se studiază funcţiile AutoLISP pentru crearea obiectelor AutoCAD.

3. Se studiază funcţiile pentru modificarea atributelor din baza de date a unui desen AutoCAD.

4. Se crează un program care crează un şurub filetat.

6.4.Modul de lucru

1. Se lansează programul AutoCAD, se creează un desen nou şi se deschide editorul VisualLISP.

2. Se editează în VisualLISP programul de mai jos, studiindu-se posibilităţile acestuia, modul de apelare. Funcţia spira generează o spiră 3D cu parametri configurabili 1 . Această funcţie va înlocui funcţia iniţială de generare a spirei tratată în lucrările anterioare.

(defun c:spira (/ NrSp DivSp CenSp RazaInit IncRaz UnghiInc DistIntreSpire IncInalt RevCont r x y a z) (graphscr)

; (setq NrSp(getreal"\nNumarul de spire: ")

; DivSp(getint"\nNumarul de diviziuni pe rotatie: ")

; CenSp(getpoint"\nCentrul bazei: ")

; RazaInit(getdist"\nRaza initiala: ")

; IncRaz(getdist"\nIncrementul razei (+

; UnghiInc(getangle"\nUnghiul de inceput: ")

; DistIntreSpire(getdist"\nDistanta initiala intre spire: ")

; IncInalt(getdist"\nIncrementul inaltimii: ") (setq NrSp 30 DivSp 30 CenSp (list 100 100 10) RazaInit 160

-

):")

1 Funcţia de generare a spirei tratată în lucrările anterioare este mult mai „stufoasă”, deaoarece exemplifică folosirea a cât mai multe funcţii din AutoLISP. Funcţia prezentată în continuare este optimizată din punct de vedere al codului.

INIŢIERE ÎN AUTOLISP. LUCRUL CU BAZA DE DATE AUTOCAD. FUNCŢII DE CREARE A OBIECTELOR

IncRaz 5.0 UnghiInc 0 DistIntreSpire 20 IncInalt 0.0

UnghiInc (/ (* UnghiInc pi) 180.0)

a

UnghiInc

z

(caddr CenSp)

r

0

RevCont 0) (command "3dpoly") (while (< r NrSp) (setq x (+ (car CenSp)(* RazaInit (cos a)))

y (+ (cadr CenSp)(* RazaInit (sin a)))) (command (list x y z)) (setq a (+ a (/ (* 2.0 pi) DivSp))

z

(+ z(/ DistIntreSpire DivSp))

r

(+ r (/ 1.0 DivSp))

RevCont (+ 1 RevCont) RazaInit (+ RazaInit (/ IncRaz DivSp))) (if (equal RevCont DivSp) (setq DistIntreSpire (+ DistIntreSpire IncInalt) RevCont 0))

)

(command "")

(princ)

)

(equal RevCont DivSp) (setq DistIntreSpire (+ DistIntreSpire IncInalt) RevCont 0)) ) (command "") (princ) ) 6

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

Se observă simplitatea corpului funcţiei 1 şi posibilităţile oferite de aceasta. Printre avantajele oferite de această funcţie putem aminti: numărul mic de entităţi care generează spira 2 , numărul mic de instrucţiuni 3 . Vom folosi această funcţie pentru a genera cale pentru filetul şurubului deci o spirală 3D “cilindrică”, având pasul între spire constant.

3. Vom crea un nou program care să genereze şurubul folosind cât mai puţine funcţii AutoLISP care apelează comenzi AutoCAD şi cât mai multe funcţii care generează obiecte direct în baza de date AutoCAD. Începem cu cele mai simple obiecte AutoCAD: linia şi cercul pentru a studia mecanismul de creare al acestora.

Începem cu linia. Pentru a crea obiecte în baza de date AutoCAD a desenului se foloseşte funcţia ENTMAKE. Deschidem un nou fişier în VisualLISP şi edităm următorul program:

(defun test( ) (entmake '((0 . "LINE") (8 . "StratLinie") (62 . 5) (6 . "dashdot") (10 150.0 70.0 0.0) (11 230.0 170.0 0.0)

) )

(entmake '((0 . "CIRCLE") (10 15.0 70.0 0.0) (40 . 30.0)

) )

)

; tipul obiectului ; stratul de desenare ; culoarea de desenare ; tipul de linie ; primul punct ; al doilea punct

; tipul obiectului ; centrul cercului ; raza cercului

Se încarcă şi se rulează programul care are ca rezultat generarea unei linii şi a unui cerc.

Să analizăm programul introdus. Funcţia test crează două entităţi, o linie şi un cerc, în desenul curent. Se observă că primul patametru al argumentului lui ENTMAKE descrie tipul de entitate creat, corespunzând codului DXF 0. Următorii parametri setează în ordine: stratul de desenare 4 cod DXF 8, culoarea de desenare cod DXF 62, tipul de linie 5 cod DXF6, coordonatele punctelor între care se desenează linia – cod DXF 10, respectiv 11. Se obţine o linie albastră, desenată cu tipul de linie dashdot, între punctele (150,70) respectiv (230,170). Pentru entitatea de tip cerc sunt folosite numai codurile DXF necesare creării cercului, restul proprietăţilor 6 se preia cele setate implicit în desen. Se obţine un cerc desenat cu culoarea şi tipul de linie curent, în stratul de desenare curent, etc., cu centrul în (15,70) având raza de 30.

4. Vom crea o entitate complexă, respectiv o polilinie formată din trei entităţi, prima şi ultima fiind de tipul linie, cea din mijloc fiind de tip arc. De asemenea pentru

1 Funcţie simplă cu rezultate foarte variate funcţie de datele de intrare.

2 Numărul mic de componente (obiecte) integrate în spirală. Se poate observa prin aplicarea comenzii UNDO cu parametru, spre deosebire de funcţia anterioară

3 Numărul mic de instrucţiuni, exceptând instrucţiunile entru introducerea de date

4 Dacă stratul de desenare nu există el este creat automat

5 Dacă tipul de linie respectiv nu este încărcat în desenul curent ENTMAKE returnează eroare şi entitatea nu este creată

6 Culoare, strat de desenare, etc.

INIŢIERE ÎN AUTOLISP. LUCRUL CU BAZA DE DATE AUTOCAD. FUNCŢII DE CREARE A OBIECTELOR

segmentul de tip arc se specifică grosimea de începul şi de sfârşit a acestuia 1 . Pentru această se tastează programul următor într-o fereastră nouă în VisualLISP. O polilinie este o entitate complexă, prima interogare a acesteia furnizând informaţii globale despre polilinie. Subentităţile poliliniei sunt de tip Vertex, acestea fiind de fapt nodurile 2 poliliniei. Interogând un vertex se obţin informaţiile subentităţii respective 3 . (defun pli( ) (entmake (list (cons 0 "polyline") (cons 66 3) (cons 62 5)

)

)

(entmake (list (cons 0 "vertex") (cons 10 (list 10 10 0)))

)

(entmake (list (cons 0 "vertex") (cons 42 0.756894) (cons 40 10) (cons 41 0) (cons 10 (list 100 200 0)))

)

(entmake (list (cons 0 "vertex") (cons 10 (list 200 300 0)))

)

(entmake (list (cons 0 "vertex") (cons 10 (list 300 400 0)))

)

(entmake (list (cons 0 "SEQEND")))

)

Se încarcă şi se rulează programul care are ca rezultat generarea unei polilinii.

1 Orice setare de proprietate afectează numai entitatea sau subentitatea respectivă, neavănd efect la nivel de desen sau obiect. Deci grosimea de început sau de sfârşit pentru restul segmentelor rămâne cea implicită

2 Punctele care definesc liniile sau arcele din polilinie

3 Puteţi să va imaginaţi polilinia ca o structura arboricolă, unde entitatea polililie este de nivel 1, subentităţile de tip vertex fiind de nivel 2. Pentru entităţi compuse, pot exista mai multe nivele, deci subentităţi ale subentităţilor, etc. Se aplică în general la entităţile 3D

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

ASISTAT Ă DE CALCULATOR – Î NDRUMAR DE LABORATOR Să analizăm programul introdus. Funcţia pli crează

Să analizăm programul introdus. Funcţia pli crează o polilinie formată din trei segmente, deci trei subentităţi. Primul apel al funcţiei setează proprietăţile globale ale poliliniei şi construieşte entitatea globală. Fiecare din celelalte apeluri construieşte un vertex al poliliniei, pentru fiecare fiind furnizate coordonatele vertexului respectiv. Un caz special îl constituie vertexul 2 care prin codul DXF 42 specifică că următoarea subentitate este de tip arc, setându- se valoarea parametrului BOUNCE 1 . De asemenea pentru acest vertex este setată grosimea de început şi de sfârşit, 0 respectiv 10. Definiţia poliliniei se termină prin crearea entităţii SEQEND.

5. Folosind informaţiile de la punctele anterioare se creează şurubul astfel: toate obiectele 3D se obţin prin extrudare din obiecte 2D folosind funcţia COMMAND cu parametrul EXTRUDE. Obiectele 2D se crează folosind funcţia ENTMAKE, respectiv cercurile şi hexagonul 2 .

6. Se adaugă funcţia de generare a spirei folosind parametrii şurubului.

7. Se generează filetul extrudând un cerc de-a lungul spirei 3 . Corpul 3D obţinut se extrage din corpul şurubului folosind funcţia COMMAND cu parametrul SUBTRACT.

În tabelele din Anexa D sunt prezentate codurile DXF pentru entităţile de tip cerc, pentru vertexul unei polilinii, respectiv toate codurile DXF grupate pe categorii.

6.5.Conţinutul referatului

1. Titlul lucrării.

2. Tema lucrării.

3. Chestiunile de studiat.

4. Comenzile AutoCAD şi opţiunile acestora.

5. Funcţiile AutoLISP utilizate şi parametrii acestora.

6. Listingul programelor.

7. Desenul realizat în format electronic 4 şi tipărit.

8. Comentarii şi observaţii asupra aspectelor practice întâlnite 5 .

1 Acesta specifică curbură segmentului funcţie de tangenta dusă la acesta.

2 Hexagonul este un poligon regulat înscris sau circumscris într-un cerc, şi va fi creat dintr-o polilinie.

3 Pentru o extrudare reuşită calea de extrudare, respeciv spira, nu trebuie să fie inclusă în acelaşi plan cu obiectul 2D care va fi extrudat. Cel puţin începutul căii de extrudare

4 În format AutoCAD: DXG, DXF, în format grafic vectorizat: PLT şi exportat ca fişier grafic: BMP şi JPG

5 IMPORTANT. Detaliat.

INIŢIERE ÎN AUTOLISP. LUCRUL CU BAZA DE DATE AUTOCAD. FUNCŢII DE CREARE A OBIECTELOR

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

7. INIŢIERE ÎN DCL LUCRUL CU FERESTRE DE DIALOG.

7.1.Scopul lucrării

Această lucrare de laborator urmăreşte familiarizarea studenţilor cu crearea casetelor de dialog folosind limbajul DCL.

7.2.Noţiuni teoretice

Crearea unei casete de dialog pentru un program/comandă AutoLISP este adesea benefică pentru utilizatorul final al produsului. O casetă de dialog cu aspectul unei interfeţe dialog Windows asigură o introducere comodă a parametrilor funcţiei, interacţionează foarte bine cu utilizatorul putându-l ghida prin intermediul mesajelor interogative sau de atenţionare pentru introducerea datelor. Stabilirea informaţiilor ce urmează a fi furnizate de utilizatori prin intermediul

casetelor de dialog este doar la latitudinea dumneavoastră. Veţi întâlni situaţii în care o casetă

de dialog se va dovedi inutilă, sau chiar deranjantă, încetinind utilizarea rutinei. De exemplu o

funcţie care nu solicită date utilizatorului nu este adecvată pentru folosirea casetelor de dialog.

O comandă cum ar fi cea de scalare la dimensiunile ferestrei, iarăşi nu este potrivită pe aşa

ceva, deoarece necesită selectarea a două puncte de pe ecran în vederea executării opţiunii Window a comenzii ZOOM. Utilizarea unei casete de dialog în acest caz ar fi curată pierdere de timp. Casetele de dialog sunt definite într-un fişier auxiliar cu extensia DCL. Acesta este scris intr-un limbaj special, numit Dialog Control Languge (limbaj pentru controlul casetelor de dialog). Avantajul acestui limbaj constă în faptul că este utilizat în comun de AutoLISP, ADS şi ARX la crearea casetelor de dialog. Fişierul DCL este apelat în cadrul unei funcţii AutoLISP care realizează şi legătura între datele introduse prin intermediul casetei de dialog şi variabilele funcţiei AutoLISP.

7.3.Chestiuni de studiat

1. Se studiază crearea unei interfeţe grafice DCL.

2. Se studiază obiectele DCL incluse în caseta de dialog, creare, apelare, parametri.

3. Se studiază instrucţiunile AutoLISP care apelează şi interfaţează pentru AutoLISP un fişier\o interfaţă DCL.

4. Se creează interfaţa unui program AutoLISP care desenează trei cercuri concentrice.

7.4.Modul de lucru

1.

Se lansează programul AutoCAD, se creează un desen nou şi se deschide editorul VisualLISP.

INIŢIERE ÎN DCL. LUCRUL CU FERESTRE DE DIALOG

2. Se deschide un fişier nou în editor. Se salvează acesta cu extensia DCL 12 folosind

Se salvează acesta cu extensia DCL 1 2 folosind opţiunea Save As . 3. Introducem în

opţiunea Save As.

3. Introducem în fişierul nou creat următoarele linii de cod:

hello : dialog {

label = "Fereastră de dialog – Hello World";

:

text { label = "Hello, world";

}

:

button { key = ""; label = "OK"; is_default = true;

}

}

Acesta este unul din cele mai simple module DCL. Conţine codul minim necesar pentru realizarea unei casete de dialog 3 . Codul unei asemenea ferestre are sintaxa:

nume_apelare : dialog {

instrucţiuni_setare_parametri

}

Fereastra de dialog conţine două elemente: o casetă text static şi un buton. Cum se observă şi în cod numele este setat ferestrei de dialog Fereastră de dialog – Hello World, textul afişat de caseta text static Hello, world şi textul de pe buton OK.

Blocul 4 de definire al fiecărui element din fereastra de dialog este de forma:

: tip_element {

instrucţiuni_setare_parametri

}

1 Extensia implicită pentru salvarea fişierului este LSP. Deşi editorul este Visual LISP oferă suport şi pentru editarea fişierelor DCL

2 Este recomandat ca numele de fişierului DCL să fie sugestiv. Acesta va fi folosit ca parametru pentru funcţia AutoLISP de apelare a fişierului DCL

3 Deşi putem avea ferestre de dialog (introducere date, interogări asupra unei acţiuni, etc.), ferestre de atenţionare (afişează un mesaj de eroare), ferestre de confirmare (afişează rezultatul unei acţiuni, interogând utilizatorul asupra operaţiei următoare), etc., vom folosi termenul generic de fereastră de dialog infiferent la ce tip de fereastră ne referim

4 Setul/grupul de instrucţiuni

PROIECTARE ASISTATĂ DE CALCULATOR ÎNDRUMAR DE LABORATOR

ASISTAT Ă DE CALCULATOR – Î NDRUMAR DE LABORATOR Se observă codul key cu valoarea accept

Se observă codul key cu valoarea accept. Acesta asociază o variabilă elementului activ respectiv, în cazul nostru butonul OK. Această variabilă este folosită de AutoLISP pentru lucrul cu elementul respectiv.

La deschiderea unei ferestre de dialog unul din elementele acesteia este selectat implicit 1 . Instrucţiunea pentru aceasta este is_default = true;

Se rulează programul DCL 2 co opţiunea Interface tools/Preview DCL in Editor din meniul Tools.

Interface tools/Preview DCL in Editor din meniul Tools . Se deschide o fereastră de dialog care

Se deschide o fereastră de dialog care ne solicită numele de apelare al ferestrei 3 pentru care

solicită numele de apelare al ferestrei 3 pentru care dorim verificarea. În fereastră apare implicit numele

dorim verificarea. În fereastră apare implicit numele de apelare al primei ferestre din fişier sau al ultimei apelate.

Se obţine rezultatul din figură.

1 Este foarte utilă pentru cazul unei ferestre cu mai multe elemente. De exemplu în cazul unei ferestre pentru introducerea datelor fără valori iniţiale va fi selectată prima casetă de introducere a textului. În cazul unei ferestre pentru introducerea datelor, cu valori iniţiale va fi selectat butonul de confirmare a acestora, deoarece aceasta este acţiunea cea mai probabilă

2 Deşi codul DCL nu rulează independent de o funcţie AutoLISP editorul Visual LISP dispune de modulele necesare rulării, pentru verificarea rezultatului, a unui fişier DCL

3 La fel ca şi pentru fişierele AutoLISP putem avea definite mai multe ferestre de dialog în acelaşi fişier DCL

INIŢIERE ÎN DCL. LUCRUL CU FERESTRE DE DIALOG

I NIŢIERE ÎN DCL. L UCRUL CU FERESTRE DE DIALOG Dacă sintaxa de apelare a ferestrei

Dacă sintaxa de apelare a ferestrei sau definirea elementelor este greşită vom fi avertizaţi printr-o fereastră de eroare care ne specifică tipul erorii şi numărul linia de cod unde este localizată eroarea.

4. Creăm un fişier nou AutoLISP, pentru a scrie codul de apelare al ferestrei de dialog. Îl salvăm şi introducem următoarele linii de cod:

(defun c:fd ( ) (setq dcl_id (load_dialog "hello.dcl")) (if (not (new_dialog "hello" dcl_id)) (exit)

)

(action_tile "accept" (done_dialog)") (start_dialog)

(princ) (unload_dialog dcl_id )

)

La rularea fişierului va produce acelaşi rezultat ca şi rularea directă a fişierului DCL 1 . Prima linie a codului încarcă fişierul DCL, respectiv caseta de dialog, în AutoCAD. Instrucţiunea de condiţionare iniţializează fereastra de dialog. În caz de eroare se apelează funcţia exit. (action_tile "accept" (done_dialog)") asociază acţiunea done_dialog cu butonul OK 2 . (start_dialog) afişează fereastra de dialog. (unload_dialog dcl_id ) se descarcă 3 din AutoCAD caseta de dialog.

5. Adăugăm codul pentru încă o fereastra de dialog în acelaşi fişier cu prima.

hello : dialog { label = "Fereastra de dialog - Hello World";

:

text { label = "Hello, world";

}

:

button { key = "accept"; label = "OK"; is_default = true;

1 Dacă la rulare este returnată eroare cauza probabilă este calea spre fişierul DCL. Deoarece aceasta nu este specificată fişierul este căutat în calea implicită. Se poate seta din opţiunile AutoCAD şi alta cale pentru fişierele de lucru.

2 Reamintim ca variabila asociat[ acestuia este accept

3 La încărcarea în AutoCAD a unui fişier AutoLISP sau DCL acesta este păstrat în memoria de lucru AutoCAD. La terminarea sesiunii de lucru cu elementul respectiv este recomandat ca memoria să fie eliberată, deci acel element să fie descărcat din memorie. După această operaţie AutCAD-ul nu mai recunoaşte /funcţiile/casetele de dialog respective

P