Tema PFA 2-AUTOLISP.docx

download Tema PFA 2-AUTOLISP.docx

of 7

Transcript of Tema PFA 2-AUTOLISP.docx

  • 7/29/2019 Tema PFA 2-AUTOLISP.docx

    1/7

    Se prezinta piesa 2D de parametrizat, in sectiune axiala, hasurata, cu cotele scrise literal

    (reprezentand parametrii). Totodata se prezinta si orientarea u0, la un anume unghi fata de axa x in

    WCS. Pe baza acestei reprezentari se alege un punct care sa determine originea locala a piesei. Intr-

    un astfel de UCS local, prezentat in figura, se vor calcula punctele caracteristice necesare descrierii

    geometrice a piesei. In figura urmatoare s-au indicat toate aceste puncte.

    Cele doua figuri, impreuna cu parametrii care descriu

    piesa, dau o ipoteza completa pentru realizarea

    algoritmului din program. Parametrul F, in program este

    denumit tesitura, parametru comun pentru cele douatesituri, respectiv pentru canalul din desen.

    - X Y Z

    P1 F B/2 0

    P2 0 B/2+F 0

    P3 0 A/2 0

    P4 E-D A/2 0

    P5 E-D C/2+F 0

    P6 E-D-F C/2 0

    P7 E-D C/2-F 0

    P8 E-D+F C/2 0

    P9 E C/2 0

    P10 E B/2+F 0

    P11 E-F B/2 0

    P12 0 -B/2-F 0

    P13 0 -B/2 0

    P14 E-F -B/2 0

    P15 E -B/2-F 0

  • 7/29/2019 Tema PFA 2-AUTOLISP.docx

    2/7

    Programul este urmatorul:

    (defun date()

    (setq A (getreal "\nDati parametrul A:"))

    (setq B (getreal "\nDati parametrul B:"))

    (setq C (getreal "\nDati parametrul C:"))

    (setq D (getreal "\nDati parametrul D:"))

    (setq E (getreal "\nDati parametrul E:"))

    (setq F (getreal "\nDati parametrul tesitura:"))

    (setq p0 (getpoint "\nPunctul de inserare:"))

    (setq u0 (* (getorient p0 "\nOrientare:")(/ 180 pi)))

    )

    (defun puncte()

    (setq p1 (list F (/ B 2)0))

    (setq p2 (list 0 (+ F(/ B 2))0))

    (setq p3 (list 0 (/ A 2)0))

    (setq p4 (list (- E D) (/ A 2)0))

    (setq p5 (list (- E D) (+ (/ C 2) F)0))

    (setq p6 (list (- (- E D) F) (/ C 2)0))

    (setq p7 (list (- E D) (- (/ C 2) F)0))

    (setq p8 (list (+ (- E D) F) (/ C 2) 0))

    (setq p9 (list E (/ C 2)0))

    (setq p10 (list E (+ (/ B 2) F)0))

    (setq p11 (list (- E F) (/ B 2)0))

    (setq p12 (mapcar '* '(1 -1 1) p2))

    (setq p13 (mapcar '* '(1 -1 1) p1))

    (setq p14 (mapcar '* '(1 -1 1) p11))

    (setq p15 (mapcar '* '(1 -1 1) p10))

  • 7/29/2019 Tema PFA 2-AUTOLISP.docx

    3/7

    )

    (defun desen()

    (command "UCS" "o" p0)

    (command "UCS" "Z" u0)

    (command "pline" p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 "c")

    (setq pl1 (entlast))

    (command "MIRROR" pl1 "" (list 0 0) (list 1 0) "N")

    (setq pl2 (entlast))

    (command "LINE" p1 p13 "")

    (command "LINE" p2 p12 "")

    (command "LINE" p11 p14 "")

    (command "LINE" p10 p15 "")

    (command "HATCH" "U" 45 (/ E 10.) "N" pl1 pl2 "")

    (command "UCS" "W")

    )

    (defun c:piesa_stefan()

    (date)

    (puncte)

    (desen)

    )

    (defun c:ex_geom (/ mesl lal lscris lpoly)

    (setq mesl (list "Coordonate extrase:" "X Y Z"))

    (setq lpoly (extmnc (ENTGET (car (entsel))) 10))

    (foreach n lpoly

    (if(caddr n)

    (setq lscris (strcat (rtos (car n))

    " "

  • 7/29/2019 Tema PFA 2-AUTOLISP.docx

    4/7

    (rtos (cadr n))

    (rtos(caddr n))))

    (setq lscris (strcat (rtos (car n)) " " (rtos (cadr n)) " " "0.")))

    (setq mesl (append mesl (list lscris))))

    (setq lal "")

    (foreach n mesl (setq lal (strcat lal n "\n")))

    (alert lal)

    (princ)

    )

    (defun extmNC (lent cod)

    (setq lex '())

    (setq tiplent (cdr (assoc 0 lent)))

    (cond ((= tiplent "LWPOLYLINE")

    (progn

    (while (member (assoc cod lent) lent)

    (setq lex (append lex

    (append (list (cdar (member (assoc cod lent) lent))))))

    (setq lent (cdr (member (assoc cod lent) lent))))))

    ((= tiplent "POLYLINE")

    (progn

    (setq i 0

    e1 (cdr (assoc -1 lent))

    e (entnext e1)

    lista '()

    lbulg '()

    seq (cdr (assoc 0 (entget e)))

    )

  • 7/29/2019 Tema PFA 2-AUTOLISP.docx

    5/7

    (while (and e (/= seq "SEQEND"))

    (setq pk1 (cdr (assoc 10 (entget e)))

    bulg (cdr (assoc 42 (entget e)))

    x1 (car pk1)

    y1 (cadr pk1)

    pkk (list x1 y1 0)

    e (entnext e)

    seq (cdr (assoc 0 (entget e)))

    )

    (setq lbulg (append lbulg (list bulg)))

    (setq lista (append lista (list pk1)))

    )

    (cond ((= cod 10) (setq lex lista))

    ((= cod 42) (setq lex lbulg))

    )

    )

    )

    )

    (if (not lex)

    (progn

    (princ

    "\Entitatea nu este agreeata (LWPOLYLINE sau

    POLYLINE)!..."

    )

    (exit)

    )

    lex

  • 7/29/2019 Tema PFA 2-AUTOLISP.docx

    6/7

    ))

    (defun c:faex1()

    (initget 7)

    (setq nrex(getint "\Numarul exercitiului:"))

    (setq file (strcat "c:\\ex" (itoa nrex) ".txt"))

    (setq ff (open file "w"))

    (setq lpoly (extmnc (ENTGET(car(entsel)))10))

    (foreach n lpoly

    (if (caddr n)

    (setq lscris (strcat (rtos (car n)) " "(rtos (cadr n)) " " (rtos

    (caddr n))))

    (setq lscris (strcat (rtos (car n)) " "(rtos (cadr n)) " " "0."))

    )

    (write-line lscris ff)

    )

    (close ff)

    (princ)

    )

    Practic programul, in prima lui parte, are definiti o serie de parametrii, care sunt descrisi dupa

    conditiile prezentate in tabelul de mai sus. Se defineste UCS, pe object in p0, si orientarea u0. Se

    deseneaza linia de tip pline intre punctele p1 pana la 11, inchizind conturul prin close. Se realizeaza

    o oglindire a conturului 1 (mirror pl1), fata de axa x a sistemului local. Se deseneaza linii care sa

    definitiveze piesa intre punctele p2-p12, p1-p13, p11-p14, p10-p15. Se deseneaza hasura. In finalul

    primei parti se defineste si comanda care cheama programul(piesa_stefan). Urmeaza programul

    ex_geom , care extrage punctele p1, p2, pn cu coordonatele xyz, ale unei polilinii, dupa cum se

    prezinta in figura urmatoare:

  • 7/29/2019 Tema PFA 2-AUTOLISP.docx

    7/7

    Prin intermediul functiei faex1, se extrag informatiile unei polilinii, intr-un fisier text extern, avand

    ca rezultat urmatoarele valori:

    80.25 37.02 0.

    78.25 39.02 0.

    78.25 99.52 0.

    178.25 99.52 0.

    178.25 61.52 0.

    176.25 59.52 0.

    178.25 57.52 0.

    180.25 59.52 0.

    228.25 59.52 0.

    228.25 39.02 0.

    226.25 37.02 0.

    Command: citdat

    Numarul exercitiului:3

    ("80.25 37.02 0." "78.25 39.02 0." "78.25 99.52 0." "178.25 99.52 0." "178.25

    61.52 0." "176.25 59.52 0." "178.25 57.52 0." "180.25 59.52 0." "228.25 59.52

    0." "228.25 39.02 0." "226.25 37.02 0.")