Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Criando programa de exemplo autolisp, Notas de aula de Programação Funcional

Slide definindo pontos para criação de rotina de programa

Tipologia: Notas de aula

2019

Compartilhado em 25/10/2019

luiz-silva-14
luiz-silva-14 🇧🇷

4

(1)

1 documento

1 / 47

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
AutoLISP Programas Exemplo
João Manuel R. S. Tavares
Joaquim Oliveira Fonseca
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f

Pré-visualização parcial do texto

Baixe Criando programa de exemplo autolisp e outras Notas de aula em PDF para Programação Funcional, somente na Docsity!

AutoLISP – Programas Exemplo

João Manuel R. S. Tavares

Joaquim Oliveira Fonseca

1º Exemplo - Rectângulo

(O utilizador define a largura, a altura e o ponto pt1.)

2º Exemplo - Porta

Desenvolva um

programa em AutoLISP

que permita criar a

figura junta e traçar as

linhas a traço misto.

Considere que as linhas

a traço misto

ultrapassam a figura em

5mm.

pt

pt3^ pt

pt

pt pt

pt pt

pt

a

b

5

(O utilizador define a largura, a altura e o ponto pt0.)

2º Exemplo - Porta

;Programa para desenhar uma Porta de arco através de: ;Centro inferior, largura e altura direita. jof-92-11- (Defun c:porta() ; LEITURA ; vai ler os valores (setq a (getreal "\nLargura da porta : ")) (setq b (getreal "\nAltura direita da porta : ")) (setq pt0 (getpoint "\nPonto Central inferior : ")) ; CÁLCULOS ; vai calcular outros pontos necessários ao desenho da figura (setq a2 (/ a 2)) (setq pi2 (/ pi 2)) (setq pt1 (polar pt0 0 a2)) (setq pt2 (polar pt1 pi2 b)) (setq pt4 (polar pt0 pi a2)) (setq pt3 (polar pt4 pi2 b))

pt

pt3^ pt

pt

pt pt

pt pt

pt

a

b

5

3º Exemplo – Porta com Cotagem

O mesmo programa do 2º exemplo, mas com a introdução de cotas.

;Programa para desenhar uma Porta de arco através de:

;Centro inferior, largura e altura direita. jof-92-11-

(Defun c:porta()

; LEITURA

; vai ler os valores

(setq a (getreal "\nLargura da porta : "))

(setq b (getreal "\nAltura direita da porta : "))

(setq pt0 (getpoint "\nPonto Central inferior : "))

; CÁLCULOS

; vai calcular outros pontos necessários ao desenho

(setq a2 (/ a 2))

pt

pt3 pt

pt

pt pt

pt pt

pt

a

b

5

3º Exemplo – Porta com Cotagem

(setq pi2 (/ pi 2)) (setq pt1 (polar pt0 0 a2)) (setq pt2 (polar pt1 pi2 b)) (setq pt4 (polar pt0 pi a2)) (setq pt3 (polar pt4 pi2 b)) (setq pt5 (polar pt0 (- pi2) 5)) (setq pt7 (polar pt2 0 5)) (setq pt8 (polar pt3 pi 5)) (setq pp (+ b a2 10)) (setq pt6 (polar pt5 pi2 pp)) ;DESENHO ; Altera layer e desenha (command "layer" "m" "TG" "") (command "line" pt3 pt4 pt1 pt2 "" "arc" "" pt3 ; Arco contínuo )

pt

pt3^ pt

pt

pt pt

pt pt

pt

a

b

5

4º Exemplo – Cabeça de Parafuso

Hexagonal

Desenvolva um programa em AutoLISP

que permita criar a figura junta (cabeça

hexagonal dum parafuso), através da

opção da vista pretendida, ilog. Tenha em

atenção que será necessário definir o

ponto pt0 , a dimensão nominal da rosca

d , o comprimento L e o ângulo da

direcção do corpo do parafuso alfa. Os

valores de p , s , lma x e lmin são lidos

dum ficheiro, em que existirá uma linha

com toda a informação necessária a cada

diâmetro nominal. fl

k

∅s pt

pt

pt3 pt pt pt pt

pt

pt

pt pt10 pt11^ pt

pt 30º

e

4º Exemplo – Cabeça de Parafuso

Hexagonal

Ficheiro a ser criado exteriormente (a primeira linha não pertence ao ficheiro e serve somente para ajudar a localizar os valores em cada linha). parafhex.dat 1234567890123456789012345678901234567890123456 3 ,0.5 ,5.5 , 2.0 ,6. ,20. ,30. , 4 ,0.7 ,7. , 2.8 ,8. ,25. ,40. , 5 ,0.8 ,8. , 3.5 ,10. ,25. ,50. , 6 ,1. ,10. , 4. ,12. ,30. ,60. , 8 ,1.25 ,13. , 5.3 ,16. ,35. ,80. , 10 ,1.5 ,17. , 6.4 ,20. ,40. ,100. , 12 ,1.75 ,19. , 7.5 ,25. ,45. ,100. , 14 ,2. ,22. , 8.8 ,30. ,50. ,100. , 16 ,2. ,24. ,10. ,35. ,55. ,100. , 20 ,2.5 ,30. ,22.5 ,40. ,65. ,100. , 24 ,3. ,36. ,15. ,40. ,80. ,100. , 30 ,3.5 ,46. ,18.7 ,40. ,90. ,100. , 36 ,4. ,55. ,22.5 ,40. ,110. ,100. ,

4º Exemplo – Cabeça de Parafuso

Hexagonal

(setq pt0 (getpoint "\nDefina ponto de localização paraf : ")) (initget 1) ; não admite resposta nula (setq alfa (getangle pt0 "\nDefina direcção do eixo : ")) (initget 1 "1 2 3") (setq ilog (getkword "Três faces(1), Duas faces(2), de cima (3): ")) (if (/= ilog "3") ; pergunta pelo comprimento se não for ; a vista de cima (progn (initget (+ 1 2 4)) ; não permite que L seja vazio, nulo ou negativo (setq L (getreal "\nQual a comprimento do Parafuso :")) ) ) (setq linha nil ; inicializa os valores para controle listd nil i - )

4º Exemplo – Cabeça de Parafuso

Hexagonal

(while (= linha nil) ; while para leitura da tabela (setq f (open "parafhex.dat" "r") dif 0. ierro 0 ) (if (= f nil) (progn (prompt "\nFicheiro parafhex.dat não encontrado!") (setq lixo (getstring "\nIntroduza ENTER : ") ierro 1 ; ficheiro não existe linha "1“ ) )

4º Exemplo – Cabeça de Parafuso

Hexagonal

(close f) (if (= ierro 2) (progn ; então (setq j 0) (prompt "\nDiametro ERRADO. No ficheiro existem: ") (while (<= j i) ; escreve os diâmetros lidos do ficheiro (princ (nth j listd)) ; escreve elemento j da lista listd (princ " , ") (setq j (+ j 1)) ) (setq listd nil i - dif 0. ) ) ) ; fim do if do ierro 2

4º Exemplo – Cabeça de Parafuso

Hexagonal

) ; fim do progn de processamento ) ; Fim do if f=nil ) ; Fim do while para leitura (if (= ierro 0) ; no caso de ter encontrado o d na tabela, desenha (progn ; então ; define os restantes parâmetros (setq p (atof (substr linha 6 5))) ; passo da rosca (setq s (atof (substr linha 12 5))) ; entre-faces do sextavado (setq k (atof (substr linha 18 4))) ; altura da cabeça do parafuso (setq lmin1 (atof (substr linha 24 5))) ; compr mínimo para todo roscado (setq lmin2 (atof (substr linha 30 4))) ; compr mínimo para o com liso (setq lmax1 (atof (substr linha 36 5))) ;compr máx p/ todo roscado (setq lmax2 (atof (substr linha 42 4))) ; compr máx para com liso

4º Exemplo – Cabeça de Parafuso

Hexagonal

(setq op 1) ; senão2 define um valor para o caso da vista de cima ) (if (equal op 1) ; no caso de ser aceitável o comprimento (progn ; então (setq pi6 (/ pi 6)) (setq pi2 (/ pi 2)) (setq e (/ s (cos pi6))) ; definição de layer (command "layer" "m" "tg" "") (setq fl (/ (- e s) 2)) (setq fl (* fl (/ (sin pi6) (cos pi6)))) (if (= ilog "1") (progn ; então3 definição de pontos

4º Exemplo – Cabeça de Parafuso

Hexagonal

(setq pt1 (polar pt0 pi2 (/ e 4))) (setq pt2 (polar pt0 pi2 (/ e 2))) (setq pt3 (polar pt2 pi (- k fl))) (setq pt7 (polar pt0 pi k)) (setq pt4 (polar pt7 pi2 (/ s 2))) (setq pt5 (polar pt7 pi2 (/ (* e 3) 8))) (setq pt6 (polar pt1 pi (- k fl))) (setq pt12 (polar pt0 (- pi2) (/ e 2))) (setq pt13 (polar pt0 (- pi2) (/ e 4))) (setq pt8 (polar pt13 pi (- k fl))) (setq pt9 (polar pt7 (- pi2) (/ (* e 3) 8))) (setq pt10 (polar pt7 (- pi2) (/ s 2))) (setq pt11 (polar pt12 pi (- k fl))) ; vai agora desenhar parafuso