32
Faculdade de Engenharia da Universidade do Porto Concepção e Fabrico Assistido por Computador Relatório Programação em AutoLisp para desenho automático Licenciatura de Engenharia Mecânica 3ºAno-1ºSemestre Ano Lectivo 2003/2004 Feito por : Filipe Manuel Marinho Dias Tavares Turma: 3M5 1

Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

Embed Size (px)

Citation preview

Page 1: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

Faculdade de Engenharia da Universidade do Porto

Concepção e Fabrico Assistido por Computador

Relatório

Programação em AutoLisp para desenho automático

Licenciatura de Engenharia Mecânica

3ºAno-1ºSemestre Ano Lectivo 2003/2004

Feito por : Filipe Manuel Marinho Dias Tavares Turma: 3M5

1

Page 2: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

1. Objectivo do Trabalho

Realização de um programa em AutoLisp para desenho automático de um par de elementos, uma Barra de Libertação e de um Tirante de Encravamento para coquilhas de fundição injectada. 2. Programa

O programa, cada vez que é executado, vai desenhar, ou uma vista Frontal ou uma vista de Topo, do par de elementos Tirante de Encravamento (TEN) / Barra de Libertação (Fixa-BLF ou Regulável-BLR). Não foram no entanto desenhados todos os possiveis promenores destes elementos (roscados, dentados, caixas para alojamento de cabeças de parafusos, molas, etc) pois isso tornaria o programa mais pesado e extenso.

Foram utilizadas caixas de diálogo (caixas DCL) de forma a tornar a utilização do programa mais agradável e evitar erros do utilizador.

De salientar ainda a utilização de uma subrotina interna (função rot) que faz a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma dada orientação angular do desenho (também introduzida pelo utilizador).

Esquema lógico seguido para a selecção do par de elementos a desenhar:

Tipo de Barra de Libertação ?

Fixa Regulável (BLF) (BLR)

Todos os tipos de BLR’s

BLF 400 Restantes BLF’s

Todos os TEN’s Apenas TEN 256 Todos os TEN’s (excepto TEN 256) (excepto TEN 256)

2

Page 3: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

Programa em AutoLisp :

; ;Definição da subrotina interna de rotação em torno de um ponto pt0 e um angulo ; (defun rot (ptc / angHor dist); ptc é variável de entrada e saida, AngHor e dist são variáveis locais e pt0 é uma variável global (setq angHor (angle pt0 ptc) dist (distance pt0 ptc) ptc (polar pt0 (+ angHor ang) dist)) ) ; ;------------------------------------------------------------------------------------------------------------------------ ;PROGRAMA PRINCIPAL ; (defun c:Trab () ; ;Gravar modos iniciais ; (setq oblip (getvar "blipmode") ;guarda o modo de colocação de cruzes nos pontos oecho (getvar "cmdecho") ;guarda o modo de projecção dos comandos olay (getvar "clayer") ;guarda o layer corrente oosnap (getvar "osmode") ;guarda o modo osnap actual ) ; ;Desligar os modos iniciais ; (setvar "blipmode" 0) ;desliga a colocação de cruzes nos pontos (setvar "cmdecho" 0) ;desliga a projecção dos comandos (setvar "osmode" 0) ;desliga qualquer modo osnap ; Abertura dos ficheiros e escolha dos parâmetros standart ;---------------------------------------------------------------------------------------------------------------------- (setq erro1 0 erro2 0 ) ; inicia estes valores de controlo dos ciclos while para as barras BL e tirante TEN

3

Page 4: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

(while (= erro1 0) ; vai realizar este ciclo até os ficheiros serem encontrados e os valores standart serem correctos ;ciclo só não é executado quando erro1=1 e erro2=1, isto é, quando se encontram o par de valores nos ficheiros de dados ; Caixa de Diálogo que pergunta qual o valor da variável BarraL (setq BarraL 1) ; Define qual a opção por defeito (setq dcl1 (load_dialog "a:\\DCL\\Tipo_BL.dcl")); abre o ficheiro de dialogo e guarda-o com o nome dcl1 (if (not (new_dialog "Tipo_BL" dcl1)) ; verifica se o fiheiro existe senão sai (exit) ) (action_tile "RR" "(setq BarraL 0)") ; para a respectiva key define a acção a fazer (action_tile "FF" "(setq BarraL 1)") (start_dialog) ; executa a caixa de dialogo (unload_dialog dcl1) ; retira da memória a caixa de diálogo (If (= BarraL 1) ; se a Barra de Libertação for Fixa (progn (setq BLF (open "a:\\Dados\\BLF.dat" "r")) (setq linhaBLR nil) ; serve para limpar da memória este valor caso tenha sido usado em situações anteriore (if (= BLF nil) (progn ; Caso algum ficheiro de dados não exista vai repetir tudo do principio (prompt "\nO ficheiro de dados a:BLF.dat não foi encontrado, verifique se o ficheiro existe " ) ) (PROGN ; Se o ficheiro BLF foi encontrado ; Vamos primeiro escolher qual o comprimento standart da barra de libertação (prompt "\nAs Referências no ficheiro da barra de libertação Fixa são : " ) (prompt "\n ") (setq linhaBLF (read-line BLF)) (while (/= linhaBLF nil) (prompt (substr linhaBLF 1 3)) (prompt " ") (setq linhaBLF (read-line BLF)) ) (close BLF) (setq BLF (open "a:\\Dados\\BLF.dat" "r"))

4

Page 5: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

(setq BLF400 0) ; Caixa de Diálogo que pergunta a Referência para a BLF (setq RefBL 200) (setq dcl2 (load_dialog "a:\\DCL\\BLF_ref.dcl")) (if (not (new_dialog "BLF_ref" dcl2)) (exit) ) (action_tile "AA" "(setq RefBL 200)") (action_tile "BB" "(setq RefBL 250)") (action_tile "CC" "(setq RefBL 300)") (action_tile "DD" "(setq RefBL 400)") (start_dialog) (unload_dialog dcl2) (If (= RefBL 400) (setq BLF400 1) ; se a barra escolhida for a BLF 400 , BlF400 passa a ser 1 ) (setq linhaBLF (read-line BLF)) (while (and (/= linhaBLF nil) (/= (atof (substr linhaBLF 1 3)) RefBL) ) (setq linhaBLF (read-line BLF)) ) ; caso o comprimento escolhido exista fica a linha respectiva guardada (close BLF) (if (= linhaBLF nil) (prompt "\nA Referência escolhida para a BLF NÂO EXISTE, repita " ) (progn (setq erro1 1) (prompt "\nA Referência escolhida para a BLF existe, e a sua linha é : " ) (prompt "\n") (prompt linhaBLF) (setq L1 (atof (substr linhaBLF 5 3))) ; guarda os valores escolhidos na base de dados (setq I1 (atof (substr linhaBLF 9 3))) (setq a1 (atof (substr linhaBLF 13 3))) (setq b1 (atof (substr linhaBLF 17 3))) (setq c1 (atof (substr linhaBLF 22 3))) (setq d1 (atof (substr linhaBLF 25 3))) (setq e1 (atof (substr linhaBLF 29 3))) (setq f1 (atof (substr linhaBLF 33 3))) (setq g1 (atof (substr linhaBLF 37 3)))

5

Page 6: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

) ) ) ; fecho do If caso o ficheiro BLF.dat for encontrado ) ;fecho do If que testa se o ficheiro BLF.dat existe ou não ) ;fecho do Progn caso o que queremos desenhar for uma BLF ; se a barra de libertação for Regulável (progn (setq BLR (open "a:\\Dados\\BLR.dat" "r")) (setq linhaBLF nil) ; serve para limpar da memória este valor caso tenha sido usado em situações anteriore (setq BLF400 0) ; serve para limpar da memória este valor caso tenha sido usado em situações anteriore (if (= BLR nil) (progn ; Caso o ficheiro de dados não exista vai repetir tudo do principio (prompt "\nO ficheiro de dados a:BLR.dat não foi encontrado, verifique se o ficheiro existe " ) ) (PROGN ; Se o ficheiro BLR foi encontrado ; Vamos primeiro escolher qual o comprimento standart da barra de libertação (prompt "\nAs Referências standart no ficheiro da barra de libertação Regulável são : " ) (prompt "\n ") (setq linhaBLR (read-line BLR)) (while (/= linhaBLR nil) (prompt (substr linhaBLR 1 3)) (prompt " ") (setq linhaBLR (read-line BLR)) ) (close BLR) (setq BLR (open "a:\\Dados\\BLR.dat" "r")) ; Caixa de Diálogo que pergunta a Referência para a BLR (setq RefBL 140) (setq dcl3 (load_dialog "a:\\DCL\\BLR_ref.dcl")) (if (not (new_dialog "BLR_ref" dcl3)) (exit) ) (action_tile "AA" "(setq RefBL 140)") (action_tile "BB" "(setq RefBL 200)") (action_tile "CC" "(setq RefBL 250)")

6

Page 7: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

(start_dialog) (unload_dialog dcl3) (setq linhaBLR (read-line BLR)) (while (and (/= linhaBLR nil) (/= (atof (substr linhaBLR 1 3)) RefBL) ) (setq linhaBLR (read-line BLR)) ) ; caso o comprimento escolhido exista fica a linha respectiva guardada (close BLR) (if (= linhaBLR nil) (prompt "\nA Referência escolhida para a BLR NÂO EXISTE, repita " ) (progn (setq erro1 1) (prompt "\nA Referência escolhida para a BLR existe, e a sua linha é : " ) (prompt "\n") (prompt linhaBLR) (setq L1 (atof (substr linhaBLR 5 3))) ; guarda os valores escolhidos na base de dados (setq I1 (atof (substr linhaBLR 9 3))) (setq I2 (atof (substr linhaBLR 13 3))) (setq I3 (atof (substr linhaBLR 17 3))) (setq I4 (atof (substr linhaBLR 21 3))) (setq I5 (atof (substr linhaBLR 25 3))) (setq a1 (atof (substr linhaBLR 29 3))) (setq b1 (atof (substr linhaBLR 33 3))) (setq c1 (atof (substr linhaBLR 37 3))) (setq d1 (atof (substr linhaBLR 41 3))) (setq e1 (atof (substr linhaBLR 45 3))) (setq f1 (atof (substr linhaBLR 49 3))) (setq g1 (atof (substr linhaBLR 53 4))) ) ) ) ; fecho do If caso o ficheiro BLR.dat for encontrado ) ;fecho do If que testa se o ficheiro BLR.dat existe ou não ) ;fecho do Progn caso o que queremos desenhar for uma BLR ) ;fecho do if de escolha da BL ) ;fecho do while para as barras BL

7

Page 8: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

; Vamos ao Tirante TEN (while (= erro2 0) (If (or (/= linhaBLF nil) (/= linhaBLR nil)) (progn (setq TEN (open "a:\\Dados\\TEN.dat" "r")) (if (= TEN nil) (progn ; Caso o ficheiro de dados não exista vai repetir tudo do principio (setq erro2 1) ; para que o programa não entre em ciclo infinito caso o ficheiro não seja encontrado (prompt "\nO ficheiro de dados a:TEN.dat não foi encontrado, verifique se o ficheiro existe " ) ) (PROGN ; Se o ficheiro TEN foi encontrado ; Vamos primeiro escolher qual o comprimento standart do Tirante de Encravamento (If (= BLF400 1) (setq RefTEN 256) ; se a barra BlF for a 400 escolhe automáticamente o TEN 256, não sendo necessário perguntar qual TEN quer (progn (prompt "\nAs Referências standart no ficheiro do Tirante de Encravamento são : " ) (prompt "\n ") (setq linhaTEN (read-line TEN)) (while (/= linhaTEN nil) (prompt (substr linhaTEN 1 3)) (prompt " ") (setq linhaTEN (read-line TEN)) ) (close TEN) (setq TEN (open "a:\\Dados\\TEN.dat" "r")) ; Caixa de Diálogo que pergunta a Referência para o TEN (setq RefTEN 70) (setq dcl4 (load_dialog "a:\\DCL\\TEN_ref.dcl")) (if (not (new_dialog "TEN_ref" dcl4)) (exit) ) (action_tile "AA" "(setq RefTEN 70)") (action_tile "BB" "(setq RefTEN 90)") (action_tile "CC" "(setq RefTEN 170)") (action_tile "DD" "(setq RefTEN 220)") (action_tile "EE" "(setq RefTEN 270)") (start_dialog) (unload_dialog dcl4)

8

Page 9: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

) ) (setq linhaTEN (read-line TEN)) (while (and (/= linhaTEN nil) (/= (atof (substr linhaTEN 1 3)) RefTEN) ) (setq linhaTEN (read-line TEN)) ) ; caso o comprimento escolhido exista fica a linha respectiva guardada (close TEN) (if (= linhaTEN nil) (prompt "\nA Referência escolhida para a TEN NÂO EXISTE, repita " ) (progn (setq erro2 1) (prompt "\nA Referência escolhida para a TEN existe, e a sua linha é : " ) (prompt "\n") (prompt linhaTEN) (prompt "\n") (setq L (atof (substr linhaTEN 5 3))) ; guarda os valores escolhidos na base de dados (setq I (atof (substr linhaTEN 9 3))) (setq a (atof (substr linhaTEN 13 3))) (setq b (atof (substr linhaTEN 17 3))) (setq c (atof (substr linhaTEN 22 3))) (setq d (atof (substr linhaTEN 25 3))) (setq e (atof (substr linhaTEN 29 3))) (setq f (atof (substr linhaTEN 33 3))) (setq g (atof (substr linhaTEN 37 3))) (setq h (atof (substr linhaTEN 41 3))) (setq j (atof (substr linhaTEN 46 3))) (setq k (atof (substr linhaTEN 49 4))) (setq n (atof (substr linhaTEN 54 4))) (setq m (atof (substr linhaTEN 59 4))) (setq x (atof (substr linhaTEN 64 2))) ) ) ) ; fecho do If caso o ficheiro TEN.dat for encontrado ) ;fecho do If que testa se o ficheiro TEN.dat existe ou não ) )

9

Page 10: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

) ;Fecho do while para o TEN ; ;--------------------------------------------------------- ; ; Caixa de Diálogo que pergunta qual Vista a Desenhar (setq Vista "T") (setq dcl5 (load_dialog "a:\\DCL\\Vista.dcl")) (if (not (new_dialog "Vista" dcl5)) (exit) ) (action_tile "TT" "(setq Vista \"T\")") (action_tile "FF" "(setq Vista \"F\")") (start_dialog) (unload_dialog dcl5) ; ;Vamos agora começar a definir os pontos dependendo da vista ; ; Caixa de Diálogo que pede o ponto de referência para o TEN e a sua orientação (setq dcl6 (load_dialog "a:\\DCL\\Ponto_ang.dcl")) (if (not (new_dialog "Ponto_ang" dcl6)) (exit) ) (start_dialog) (unload_dialog dcl6) (setq pt0 (getpoint "\nEscolha o ponto de fixação do TEN ")) (setq ang (getorient pt0 "\nQual a orientação do desenho (angulo com a horizontal), clique noutro ponto ? " ) ) (If (= Vista "T") ; se a Vista for de Topo (progn ; ; Vamos agora definir os pontos do TEN para a vista de Topo ; (setq pt1 (list (+ (car pt0) (- a)) (+ (cadr pt0) (/ b 2)) )

10

Page 11: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

pt2 (polar pt1 0 d) pt3 (polar pt1 (/ pi -2) b) pt4 (polar pt3 0 d) pt5 (polar pt2 (/ pi -2) (/ (- b 10) 2)) pt6 (polar pt5 (- pi) 25) pt7 (polar pt6 (- pi) 5) pt8 (polar pt4 (/ pi 2) (/ (- b 10) 2)) pt9 (polar pt8 pi 25) pt10 (polar pt9 pi 5) pt11 (polar pt5 0 5) pt12 (polar pt8 0 5) pt13 (polar pt11 (/ pi 2) (/ (+ e -10) 2)) pt14 (polar pt12 (/ pi -2) (/ (+ e -10) 2)) pt15 (list (+ (car pt5) (+ L -10)) (cadr pt13) ) pt16 (list (+ (car pt8) (+ L -10)) (cadr pt14) ) pt17 (polar pt15 (/ pi 2) (/ (- 30 e) 2)) pt18 (polar pt16 (/ pi -2) (/ (- 30 e) 2)) pt19 (polar pt15 0 10) pt20 (polar pt16 0 10) pt21 (polar pt17 0 10) pt22 (polar pt18 0 10) pt23 (list (car pt19) (+ (cadr pt0) (/ g 2)) ) pt24 (list (car pt20) (+ (cadr pt0) (/ g -2)) ) pt25 (polar pt23 0 f) pt26 (polar pt24 0 f) pt27 (list (car pt25) (+ (cadr pt0) (/ x 2))) pt28 (list (car pt26) (- (cadr pt0) (/ x 2))) pt29 (list (+ (car pt1) I) (cadr pt27)) pt30 (list (+ (car pt1) I) (cadr pt28)) pt31 (list (+ (car pt27) -10) (cadr pt0)) pt32 (list (+ (car pt1) -5) (cadr pt0)) pt33 (list (+ (car pt30) 5) (cadr pt0)) pt34 (polar pt1 (/ pi -2) (/ (- b 23) 2)) pt35 (polar pt2 (/ pi -2) (/ (- b 23) 2)) pt36 (polar pt3 (/ pi 2) (/ (- b 23) 2)) pt37 (polar pt4 (/ pi 2) (/ (- b 23) 2)) ) (if (= BLF400 1) ; pontos excepcionais para o TEN256 (progn (setq pt38 (list (+ (car pt1) 10) (+ (cadr pt0) 10)) ; centros de circunferência pt39

11

Page 12: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

(list (+ (car pt3) 10) (+ (cadr pt0) -10)) ) ) ) (setq pt40 (polar pt2 pi 9) Pt41 (polar pt4 pi 9) pt42 (polar pt2 pi 21) pt43 (polar pt4 pi 21) pt44 (list (+ (car pt2) -15) (+ (cadr pt2) 2)) pt45 (list (+ (car pt4) -15) (+ (cadr pt4) -2)) pt46 (list (+ (car pt31) (/ h 2)) (+ (cadr pt31) (/ g 2))) pt47 (polar pt46 (/ pi -2) g) pt48 (polar pt47 pi h) pt49 (polar pt48 (/ pi 2) g) pt50 (list (car pt31) (+ (cadr pt31) (+ (/ g 2) 2))) pt51 (list (car pt31) (+ (cadr pt31) (+ (/ g -2) -2))) ) ;terminamos os pontos de TEN, vamos desenhar (command "layer" "m" "Tm" "") (command "line" (rot pt32) (rot pt33) "" "line" (rot pt44) (rot pt45) "" "line" (rot pt50) (rot pt51) "" "line" (rot (list (- (car pt15) 2) (- (cadr pt0) 9.5))) (rot (list (+ (car pt19) 2) (- (cadr pt0) 9.5))) "" "mirror" (entlast) "" (rot pt33) (rot pt32) "n" "line" (rot (list (car pt0) (+ (cadr pt0) (+ 2 (/ c 2))))) (rot (list (car pt0) (- (cadr pt0) (+ 2 (/ c 2))))) "" ) (command "layer" "m" "Ti" "")

12

Page 13: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

(command "line" (rot pt40) (rot pt41) "" "line" (rot pt42) (rot pt43) "" "line" (rot pt15) (rot pt16) "" "line" (rot pt46) (rot pt47) "" "line" (rot pt48) (rot pt49) "" ) (command "layer" "m" "TG" "") (command "line" (rot pt1) (rot pt3) (rot pt4) (rot pt8) (rot pt10) (rot pt7) (rot pt5) (rot pt2) "c" "line" (rot pt6) (rot pt9) "" "line" (rot pt5) (rot pt11) (rot pt13) (rot pt19) (rot pt20) (rot pt14) (rot pt12) (rot pt8) "" "line" (rot pt15) (rot pt17) (rot pt21)

13

Page 14: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

(rot pt19) "" "line" (rot pt16) (rot pt18) (rot pt22) (rot pt20) "" "line" (rot pt23) (rot pt25) (rot pt26) (rot pt24) "" "line" (rot pt27) (rot pt29) (rot pt30) (rot pt28) "" "line" (rot pt34) (rot pt35) "" "line" (rot pt36) (rot pt37) "" "circle" (rot pt0) "d" c "circle" (rot pt31) "d" j ) (if (= BLF400 1) (progn (command "circle" (rot pt38) "d" 10 "trim" (entlast) "" "f" (rot pt38) (rot (polar pt38 (/ pi 2) 4)) ""

14

Page 15: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

"" "circle" (rot pt39) "d" 10 "trim" (entlast) "" "f" (rot pt39) (rot (polar pt39 (/ pi -2) 4)) "" "" ) ) ) ; ; Aqui termina o desenho de Topo do TEN ; Vamos á Vista de Topo para a BL ; Caixa de Diálogo que pede o ponto de referência para a BL (setq dcl7 (load_dialog "a:\\DCL\\Ponto.dcl")) (if (not (new_dialog "Ponto" dcl7)) (exit) ) (start_dialog) (unload_dialog dcl7) (setq pt0 (getpoint "\nEscolha o ponto de fixação da Barra de Libertação ") ) ; Vamos agora definir os pontos comuns para a BL (setq pt1 (list (+ (car pt0) a1) (+ (cadr pt0) (/ g1 2))) pt2 (polar pt1 pi L1) pt3 (polar pt2 (/ pi -2) g1) pt4 (polar pt3 0 L1) pt6 (list (- (car pt1) b1) (+ (cadr pt0) 5)) pt7 (list (- (car pt1) b1) (+ (cadr pt0) -5)) ) ; vamos desenhar uma parte da Barra de Libertação comum quer a BLF quer a BLR (command "layer" "m" "Tm" "") (command "line" (rot (list (car pt0) (+ (cadr pt0) (+ 2 4)))) (rot (list (car pt0) (- (cadr pt0) (+ 2 4)))) "" "line" (rot (list (car pt6) (+ (cadr pt6) (+ 1 3))))

15

Page 16: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

(rot (list (car pt7) (- (cadr pt7) (+ 1 3)))) "" "line" (rot (list (- (car pt6) (+ 1 3)) (cadr pt6))) (rot (list (+ (car pt6) (+ 1 3)) (cadr pt6))) "" "line" (rot (list (- (car pt7) (+ 1 3)) (cadr pt7))) (rot (list (+ (car pt7) (+ 1 3)) (cadr pt7))) "" ) (command "layer" "m" "TG" "") (command "line" (rot pt1) (rot pt2) (rot pt3) (rot pt4) "c" "circle" (rot pt0) "d" 8 "circle" (rot pt6) "d" 6 "circle" (rot pt7) "d" 6 ) ; fim da parte comum da barra de libertação (if (/= linhaBLF nil) (progn ; se a barra a desenhar for BLF (setq pt8 (polar pt2 (/ pi -2) 3) pt9 (polar pt3 (/ pi 2) 3) pt10 (polar pt9 0 I1) pt11 (polar pt8 0 I1) pt12 (list (- (car pt1) (+ f1 (* 0.8 (- L1 f1)))) (cadr pt0)); ponto para posicionar parte movél (podia ter escolhido outro) pt13 (list (- (car pt1) (+ (- L1 I1) 12)) (cadr pt0)) pt14 (list (- (car pt12) (/ c1 2)) (cadr pt8)) pt15 (list (- (car pt12) (/ c1 2)) (cadr pt9)) pt16 (list (- (car pt12) (/ d1 2)) (cadr pt9)) pt17 (list (- (car pt12) (/ d1 2)) (cadr pt8)) pt18 (list (+ (car pt17) d1) (cadr pt17)) pt19 (list (+ (car pt16) d1) (cadr pt16)) pt20 (list (+ (car pt14) c1) (cadr pt14))

16

Page 17: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

pt21 (list (+ (car pt15) c1) (cadr pt15)) pt22 (list (- (car pt13) 12) (cadr pt8)) pt23 (list (- (car pt13) 12) (cadr pt9)) pt24 (polar pt23 0 24) pt25 (polar pt22 0 24) ) (command "layer" "m" "TG" "") (command "line" (rot pt8) (rot pt11) "" "line" (rot pt9) (rot pt10) "" "circle" (rot pt12) "d" 6 "circle" (rot pt13) "d" 6 "line" (rot pt14) (rot pt15) "" "line" (rot pt17) (rot pt16) "" "line" (rot pt18) (rot pt19) "" "line" (rot pt20) (rot pt21) "" "arc" (rot pt10) "en" (rot pt11) "r" (/ (distance pt10 pt11) 2) "" (if (= BLF400 1) ; vai desenhar furos extra se for uma BLF400 (progn (command "circle" (rot (list (- (car pt12) 11) (cadr pt12)))

17

Page 18: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

"d" 4 "circle" (rot (list (+ (car pt12) 11) (cadr pt12))) "d" 4 ) (command "layer" "m" "Ti" "") ) ) "circle" (rot (list (- (car pt13) 8) (cadr pt13))) "d" 4 "circle" (rot (list (+ (car pt13) 8) (cadr pt13))) "d" 4 ) (command "layer" "m" "Ti" "") (command "line" (rot pt22) (rot pt23) "" "line" (rot pt24) (rot pt25) "" ) (command "layer" "m" "Tm" "") (command "line" ;Linha auxiliar de simetria (rot (list (- (car pt2) 5) (cadr pt0))) (rot (list (+ (car pt1) 5) (cadr pt0))) "" "line" (rot (list (car pt12) (+ (cadr pt12) 5))) (rot (list (car pt12) (- (cadr pt12) 5))) "" "line" (rot (list (car pt13) (+ (cadr pt13) 5))) (rot (list (car pt13) (- (cadr pt13) 5))) "" ) ) (progn ; vamos agora á parte da barra BLR (setq pt8 (list (+ (car pt2) 4) (- (cadr pt2) 3)) pt9 (polar pt8 (/ pi -2) 15.5) pt10 (polar pt9 0 (- I1 8)) pt11 (polar pt10 (/ pi 2) 15.5)

18

Page 19: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

pt12 (list (- (car pt1) (+ f1 (* 0.8 I3))) (cadr pt0)) ; ponto para posicionar parte movél (podia ter escolhido outro) pt13 (list (- (car pt1) (+ f1 (* 0.3 I5))) (cadr pt0)) ; ponto para posicionar parte movél pt14 (list (+ (car pt8) 8) (- (cadr pt8) 5)) pt15 (polar pt14 (/ pi -2) 5.5) pt16 (polar pt15 0 (- I1 30)) pt17 (polar pt16 (/ pi 2) 5.5) pt18 (list (- (car pt12) (/ c1 2)) (+ (cadr pt12) 7.75)) pt19 (polar pt18 (/ pi -2) 15.5) pt20 (polar pt19 0 (/ (- c1 d1) 2)) pt21 (polar pt20 (/ pi 2) 15.5) pt22 (polar pt21 0 d1) pt23 (polar pt22 (/ pi -2) 15.5) pt24 (polar pt19 0 c1) pt25 (polar pt18 0 c1) pt26 (list (- (car pt13) 6) (cadr pt25)) pt27 (polar pt26 (/ pi -2) 15.5) pt28 (polar pt27 0 12) pt29 (polar pt28 (/ pi 2) 15.5) pt30 (list (- (car pt13) 10) (cadr pt14)) pt31 (polar pt30 (/ pi -2) 5.5) pt32 (polar pt31 0 20) pt33 (polar pt32 (/ pi 2) 5.5) ) (command "layer" "m" "TG" "") (command "line" (rot pt8) (rot pt9) (rot pt10) (rot pt11) "c" "line" (rot pt20) (rot pt21) "" "line" (rot pt22) (rot pt23) "" "line" (rot pt30) (rot pt31) "" "line" (rot pt32) (rot pt33) ""

19

Page 20: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

"arc" (rot pt14) "en" (rot pt15) "r" (/ (distance pt14 pt15) 2) "" "circle" (rot pt12) "d" 5 "" "circle" (rot pt13) "d" 5 "arc" (rot pt16) "en" (rot pt17) "r" (/ (distance pt16 pt17) 2) "" "line" (rot pt14) (rot pt17) "" "line" (rot pt15) (rot pt16) "" ) (command "line" (rot pt18) (rot pt19) "" ) (setq enti (entlast)) ;guarda a última entidade desenhada (command "line" (rot pt24) (rot pt25) "" "line" (rot pt26) (rot pt27) "" "line" (rot pt28) (rot pt29) ""

20

Page 21: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

) (command "trim") ; vai selecionar sucessivamente entidades para fazer um "trim" (while (/= enti nil) (command enti) (setq enti (entnext enti)) ) (command "" "f" (rot (polar pt12 (/ pi 2) 7)) (rot (polar pt12 (/ pi -2) 7)) "" "f" (rot (polar pt13 (/ pi 2) 7)) (rot (polar pt13 (/ pi -2) 7)) "" "" ) (command "layer" "m" "Tm" "") ;Linha auxiliar de simetria (command "line" (rot (list (- (car pt2) 5) (cadr pt0))) (rot (list (+ (car pt1) 5) (cadr pt0))) "" "line" (rot (list (car pt12) (+ (cadr pt12) 5))) (rot (list (car pt12) (- (cadr pt12) 5))) "" "line" (rot (list (car pt13) (+ (cadr pt13) 5))) (rot (list (car pt13) (- (cadr pt13) 5))) "" ) ) ) ;fim do if linhaBLF /= nil ;fim do If para as BL ) ; Fim do desenho para as Vistas de Topo (progn ; Começo do desenho para as Vistas de Frente ; ; Vamos agora definir os pontos do TEN para a Vista de Frente ; (setq pt1 (list (+ (car pt0) (- a)) (cadr pt0) )

21

Page 22: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

pt2 (polar pt0 pi 6) pt3 (polar pt0 0 6) ) (if (= RefTEN 70) ;se for para desenhar um TEN 70 (setq pt4 (polar pt2 (/ pi -2) 3.5) pt5 (polar pt3 (/ pi -2) 3.5) ) (setq pt4 pt2 pt5 pt3 ) ) (setq pt6 (polar pt1 0 d) pt7 (list (car pt6) (+ (cadr pt5) m)) pt8 (polar pt7 pi d) pt9 (list (+ (car pt6) -15) (+ (cadr pt6) 15)) ) (If (= RefTEN 70) ;se for para desenhar um TEN 70 (setq pt10 pt6) (setq pt10 (list (car pt6) (+ (cadr pt6) 15))) ) (setq pt11 (polar pt10 (/ pi 2) n) pt12 (polar pt11 0 (+ L 4)) pt13 (polar pt10 0 (+ L 4)) pt14 (polar pt11 0 L) pt15 (polar pt14 (/ pi -2) n) pt16 (polar pt15 (/ pi -2) 6.5) pt17 (polar pt16 0 5) pt18 (list (car pt14) (+ (cadr pt16) k)) pt19 (polar pt18 0 f) pt20 (polar pt15 0 f) pt21 (polar pt15 (/ pi -2) 15) pt22 (polar pt21 pi 10) pt23 (polar pt22 (/ pi 2) 15) pt24 (list (car pt19) (+ (- (cadr pt14) (/ n 2)) (/ x 2))) pt25 (list (+ (car pt1) I) (cadr pt24)) pt26 (polar pt25 (/ pi -2) x) pt27 (polar pt24 (/ pi -2) x) pt28 (list (+ (car pt24) -10) (+ (cadr pt19) -10)) pt29 (polar pt11 0 5) pt30 (polar pt10 0 5) pt31 (polar pt8 (/ pi -2) 3.5) pt32 (polar pt7 (/ pi -2) 3.5) pt33 (list (+ (car pt0) (/ c 2)) (cadr pt5)) pt34 (list (+ (car pt0) (/ c 2)) (+ (cadr pt5) (+ m -3.5))) pt35 (list (car pt0) (+ (cadr pt5) -2)) pt36 (list (car pt0) (+ (cadr pt5) (+ m -5.5))) pt37 (list (+ (car pt8) 5) (+ (cadr pt8) -3.5)) pt38 (list (+ (car pt1) 5) (cadr pt1)) pt39 (list (+ (car pt8) 10) (+ (cadr pt8) 3)) pt40 (list (+ (car pt1) 10) (+ (cadr pt1) -3))

22

Page 23: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

pt41 (list (car pt0) (+ (cadr pt5) -2)) pt42 (list (car pt0) (+ (cadr pt5) (+ m -1.5))) pt43 (list (+ (car pt25) 2) (- (cadr pt25) (/ x 2))) pt44 (list (- (car pt24) 2) (- (cadr pt24) (/ x 2))) pt45 (list (+ (car pt21) 2) (+ (cadr pt21) 5.5)) pt46 (list (- (car pt22) 2) (+ (cadr pt22) 5.5)) pt47 (list (+ (car pt8) 10) (+ (cadr pt8) 3)) pt48 (list (+ (car pt1) 10) (+ (cadr pt1) -3)) ) (command "layer" "m" "TG" "") (command "line" (rot pt1) (rot pt2) (rot pt4) (rot pt5) (rot pt3) (rot pt6) (rot pt7) (rot pt8) "c" "line" (rot pt11) (rot pt12) (rot pt13) (rot pt10) "" "line" (rot pt14) (rot pt18) (rot pt19) (rot pt20) (rot pt17) (rot pt16) (rot pt15) "" "line" (rot pt16) (rot pt21) (rot pt22) (rot pt23) "" "line" (rot pt24) (rot pt25) (rot pt26) (rot pt27)

23

Page 24: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

"" "line" (rot pt29) (rot pt30) "" "circle" (rot pt28) "d" h "circle" (rot pt9) "d" 12 ) (command "layer" "m" "Ti" "") (command "line" (rot pt31) (rot pt32) "" "line" (rot pt33) (rot pt34) "" "mirror" (entlast) "" (rot pt35) (rot pt36) "n" ) (if (= BLF400 1) (command "line" (rot pt37) (rot pt38) "" "mirror" (entlast) "" (rot pt39) (rot pt40) "n" ) ) (command "layer" "m" "Tm" "") (command "line" (rot pt41) (rot pt42) ""

24

Page 25: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

"line" (rot pt43) (rot pt44) "" "line" (rot pt45) (rot pt46) "" ) (if (= BLF400 1) (command "line" (rot pt47) (rot pt48) "" ) ) ; Vamos agora ás Vistas de Frente para as BL ; Caixa de Diálogo que pede o ponto de referência para a BL (setq dcl8 (load_dialog "a:\\DCL\\Ponto.dcl")) (if (not (new_dialog "Ponto" dcl8)) (exit) ) (start_dialog) (unload_dialog dcl8) (setq pt0 (getpoint "\nEscolha o ponto de fixação da Barra de Libertação ") ) ; Vamos definir os pontos da BL (setq pt1 (polar pt0 0 a1) pt2 (polar pt1 (/ pi 2) e1) pt3 (polar pt2 pi L1) pt4 (polar pt3 (/ pi -2) (- e1 1)) pt5 (list (- (car pt1) f1) (cadr pt4)) pt6 (polar pt5 (/ pi -2) 1) pt7 (list (- (car pt2) b1) (+ (cadr pt2) 5)) pt8 (polar pt7 (/ pi -2) (+ e1 10)) pt9 (list (- (car pt1) a1) (- (cadr pt1) 5)) pt10 (polar pt9 (/ pi 2) (+ e1 10)) pt11 (list (- (car pt7) 3) (cadr pt2)) pt12 (polar pt11 (/ pi -2) e1) pt13 (polar pt12 0 6) pt14 (polar pt13 (/ pi 2) e1) pt15 (list (- (car pt10) 4) (cadr pt2)) pt16 (polar pt15 (/ pi -2) e1) pt17 (polar pt16 0 8) pt18 (polar pt17 (/ pi 2) e1) )

25

Page 26: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

(setq JJ 20) ; JJ variável auxiliar (cotaque não está na base de dados que varia apenas em BLF400) (If (/= LinhaBLF nil) (progn ; se estivermos a desenhar uma BLF ; Pequenas diferenças entre a construção de BLF e BLR (para posicionar as partes móveis) (setq KK (+ f1 (* 0.8 (- L1 f1))); KK variável auxiliar NN (+ (- L1 I1) 12) ; NN variável auxiliar ) (If (= BLF400 1) (setq JJ 24) ) ) (setq KK (+ f1 (* 0.8 I3)) NN (+ f1 (* 0.3 I5)) ) ) (setq pt19 (list (- (car pt2) KK) (+ (cadr pt2) 12)) ; ponto para posicionar parte movél (em coerência com o que foi escolhido para a Vista de Topo) pt20 (polar pt19 (/ pi -2) (+ e1 17)) pt21 (list (- (car pt19) (/ d1 2)) (+ (cadr pt2) 7)) pt22 (polar pt21 0 d1) pt23 (list (- (car pt19) (/ c1 2)) (cadr pt2)) pt24 (polar pt23 0 c1) pt25 (list (- (car pt1) NN) (+ (cadr pt1) (+ e1 5))) ; ponto para posicionar parte movél pt26 (polar pt25 (/ pi -2) (+ e1 13)) pt27 (list (- (car pt25) (/ JJ 2)) (- (cadr pt1) 6.5)) pt28 (polar pt27 0 JJ) pt29 (polar pt28 (/ pi 2) 6.5) pt30 (polar pt29 pi JJ) ) (command "layer" "m" "TG" "") (command "line" (rot pt1) (rot pt2) (rot pt3) (rot pt4) (rot pt5) (rot pt6) "c" "line" (rot pt23) (rot pt21) (rot pt22) (rot pt24) "" "line" (rot pt30) (rot pt27)

26

Page 27: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

(rot pt28) (rot pt29) "" ) (command "layer" "m" "Tm" "") (command "line" (rot pt7) (rot pt8) "" "line" (rot pt9) (rot pt10) "" "line" (rot pt19) (rot pt20) "" "line" (rot pt25) (rot pt26) "" ) (command "layer" "m" "Ti" "") (command "line" (rot pt11) (rot pt12) "" "line" (rot pt13) (rot pt14) "" "line" (rot pt15) (rot pt16) "" "line" (rot pt17) (rot pt18) "" ) ; Fim do if para as BL Vistas de Frente ) ; Fim do desenho para as Vistas de Frente ) ; Fim do If caso Vista = T ;---------------------------------------------------------------------------------------------------------------- ; Restaurar os modos iniciais

27

Page 28: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

; (command "layer" "m" olay "") (setvar "osmode" oosnap) (setvar "blipmode" oblip) (setvar "cmdecho" oecho) ; ; FIM ; ) 3. Caixas de Diálogo

Ao todo foram feitas 7 caixas de diálogo em linguagem DCL, armazenadas numa pasta própria (DCL) que são várias vezes chamadas aquando da execução do programa em Lisp.

Algumas servem para escolhas de opções, outras apenas dão avisos.

Caixas de diálogo: 1ª Caixa de diálogo Tipo_BL: dialog{ label="Escolha da Barra de Libertação"; :boxed_radio_row{ label = " Que Barra de Libertação quer desenhar ?"; :radio_button { label = "Fixa"; key = "FF"; value=1; } :radio_button { label = "Regulável"; key = "RR"; value=0; } } ok_only; } _____________________________________________________________________ 2ª Caixa de diálogo BLF_ref: dialog{ label="Escolha a Referência para a Barra de Libertação Fixa"; :boxed_radio_column{ label = " Qual a Referência da Barra de Libertação Fixa ?"; :radio_button {

28

Page 29: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

label = "200"; key = "AA"; value=1; } :radio_button { label = "250"; key = "BB"; value=0; } :radio_button { label = "300"; key = "CC"; value=0; } :radio_button { label = "400 (exclusivo para Tirante TEN 256 que é automáticamente seleccionado)"; key = "DD"; value=0; } } ok_only; } ______________________________________________________________________ 3ª Caixa de diálogo BLR_ref: dialog{ label="Escolha a Referência para a Barra de Libertação Regulável"; :boxed_radio_column{ label = " Qual a Referência da Barra de Libertação Regulável ?"; :radio_button { label = "140"; key = "AA"; value=1; } :radio_button { label = "200"; key = "BB"; value=0; } :radio_button { label = "250"; key = "CC"; value=0; } } ok_only; } ______________________________________________________________________ 4ª Caixa de diálogo

29

Page 30: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

TEN_ref: dialog{ label="Escolha a Referência para Tirante de Encravamento"; :boxed_radio_column{ label = " Qual a Referência para Tirante de Encravamento ?"; :radio_button { label = "70 (Tirante curto)"; key = "AA"; value=1; } :radio_button { label = "90"; key = "BB"; value=0; } :radio_button { label = "170"; key = "CC"; value=0; } :radio_button { label = "220"; key = "DD"; value=0; } :radio_button { label = "270"; key = "EE"; value=0; } } ok_only; } ______________________________________________________________________ 5ª Caixa de diálogo Vista: dialog{ label="Vista a Desenhar"; :boxed_radio_row{ label = "Qual a Vista a Desenhar ?"; :radio_button{ key="TT"; label="Topo"; value="1"; } :radio_button{ key="FF"; label="Frente";

30

Page 31: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

value="0"; } } ok_only; } ______________________________________________________________________ 6ª Caixa de diálogo Ponto_ang: dialog{ label="Ponto do Tirante de Encravamento e Orientação do desenho"; :text{ label="Pique num ponto para desenhar o Tirante de Encravamento e de seguida pique noutro ponto para definir a sua direcção"; } ok_only; } ______________________________________________________________________ 7ª Caixa de diálogo Ponto: dialog{ label="Ponto da Barra de Libertação"; :text{ label="Pique noutro ponto para desenhar a Barra de Libertação"; } ok_only; } 4. Conclusão

Com a realização deste trabalho, relativamente ás aulas, aumentei significativamente os meus conhecimentos de AutoLisp e aprendi a mexer em caixas de diálogo (DCL).

5. Bibliografia Sebenta da cadeira de C.F.A.C. – F.E.U.P.

Livro “Desenho Técnico Básico – 3º Volume” de Simões Morais

Livro “Programação em AutoCAD – Curso Completo” de Fernando Luis Ferreira e João Santos – FCA Exemplos de trabalhos práticos da página na Internet da disciplina

31

Page 32: Cadeira de C - web.fe.up.pttavares/ensino/CFAC/2003-2004/Works/Autolisp... · a rotação de pontos em torno de outro ponto de referência (pt0-introduzido pelo utilizador) para uma

List

agen

s da

s B

ases

de

Dad

os

1.

B

ase

de d

ados

BL

F.da

t 200

200

170

007

015

030

012

020

020

020

250

250

220

007

015

030

012

020

020

020

300

300

270

007

015

030

012

020

020

020

400

396

360

010

020

050

030

030

030

020

";exclusivamente para tirante TEN 256"

Ref L1

I1

a1

b1

c1

d1

e1

f1

g1

2.

B

ase

de d

ados

BL

R.d

at

140

140

120

020

100

020

104

007

015

030

012

020

020

21.5

200

204

184

020

164

020

168

007

015

030

012

020

020

21.5

250

254

234

020

214

020

218

007

015

030

012

020

020

21.5

Ref

L1

I1

I2

I3

I4

I5

a1

b1

c1

d1

e1

f1

g1

3.

B

ase

de d

ados

TE

N.d

at

070

070

152

010

030

M10

050

025

020

027

006

M05

37.5 23.5 31.5 18

090

090

172

010

030

M10

050

025

020

027

006

M05

37.5 23.5 0042 18

170

170

252

010

030

M10

050

025

020

027

006

M05

37.5 23.5 0042 18

220

220

302

010

030

M10

050

025

020

027

006

M05

37.5 23.5 0042 18

256

256

379

030

040

M12

080

029

027

030

012

M06

0055 0040 0056 24

";exclusivo para a barra BLF400"

270

270

352

010

030

M10

050

025

020

027

006

M05

37.5 23.5 0042 18

Ref. L

I

a

b

c

d

e

f

g

h

j

k

n

m

x