Faculdade de Engenharia da Universidade do Porto Concepção e Fabrico Assistido por Computador. Relatório

Documentos relacionados
IMPLEMENTAÇÃO D0 DESENHO AUTOMÁTICO DE CILINDROS DE DUPLO EFEITO AUTOLISP CONCEPÇÃO E FABRICO ASSISTIDOS POR COMPUTADOR ANO LECTIVO

Faculdade de Engenharia Universidade do Porto RELATÓRIO CFAC Trabalho em Autolisp

Concepção e Fabrico Assistido por Computador

EM GESTÃO E ENGENHARIA INDUSTRIAL Disciplina de Concepção e Fabrico Assistidos por Computador

AutoLISP Programas Exemplo

AutoLISP Programas Exemplo. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

1º Exemplo - Rectângulo

Elbow flange coupling

Caixa de Velocidades. Índice

AutoLISP -VII Funções Geométricas, de Strings, de Listas e de Manipulação de Arquivos

Funções Geométricas, de Strings, de Listas e de Manipulação de Arquivos

UNIVERSIDADE DO PORTO

AutoLISP - III Funções de repetição e condicionais, Obter e converter informação. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

Função condicional - if. AutoLISP - III Funções de repetição e condicionais, Obter e converter informação

C.F.A.C. Concepção e Fabrico Assistido por Computador

Conjuntos de selecção

AutoLISP - VI Conjuntos de seleção

Exemplo: ; ver exemplo de aplicação abaixo com mapcar. ; retorna uma lista formada pelos elementos indicados. ; retorna o número de elementos na lista

RELATÓRIO CFAC Ano lectivo

2. LAYERS UTILIZADAS E APLICAÇÕES

DCL Dialog Control Language: Introdução

CFAC: Introdução ao AutoCAD - I. Capitulo I: Iniciação ao AutoCAD

@2007 João Manuel R. S. Tavares FEUP/DEMEGI/SDI. CFAC Concepção e Fabrico Assistidos por Computador

Instituto Superior Técnico Licenciatura em Arquitectura Desenho Assistido por Computador II Ano lectivo 2005/06, 2 ano

CFAC: AutoLISP (I) - Introdução

CFAC: AutoLISP (II) - Cálculos, Variáveis e Listas

AutoLISP - I Introdução. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

Licenciatura em Gestão e Engenharia Industrial CFAC

AutoLISP - II Cálculos, Variáveis e Listas. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

Relatório de CFAC Concepção e Fabrico Assistido por Computador

AutoLISP -II Cálculos, Variáveis e Listas

FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO DEPARTAMENTO DE ENGENHARIA MECÂNICA E GESTÃO INDUSTRIAL C.F.A.C.

AutoLISP -I Introdução

Exercícios de Programação e Computação para Arquitectura. António Menezes Leitão

Programação e Computação para Arquitectura 2010/2011

Prof: Heni Mirna Cruz Santos

CFAC: Introdução ao AutoCAD - V. Capitulo V: Construções geométricas

Concepção e Fabrico Assistidos por Computador 3ºano 1º semestre. Licenciatura em Engenharia Mecânica. Professor: João Manuel R. S.

AutoLISP -V Manipulação de entidades

Faculdade de Engenharia da Universidade do Porto (FEUP) Departamento de Engenharia Mecânica e Gestão Industrial (DEMEGI)

(Concepção e Fabrico Assistido por Computador) Ano lectivo: 2001/2002

Concepção e Fabrico Assistido por Computador

Modelação Geométrica e Visualização de Edifícios 2007/2008

Docentes. JOF/João Manuel R. S. Tavares 1. Eng. Joaquim Fonseca. Prof. José Marafona. MIEM Mestrado Integrado em Engenharia Mecânica

Desenho 3D de uma trompa de harmonia Software: Solidworks 2004

Trabalho: Desenho 3D de um Molde de Injecção em

MIEM Mestrado Integrado em Engenharia Mecânica

Concepção e Fabrico Assistidos por Computador

UNIVERSIDADE ESTADUAL DE SANTA CRUZ DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS COLEGIADO DE ENGENHARIA ELÉTRICA

CFAC: Introdução ao AutoCAD - I. Capitulo I: Iniciação ao AutoCAD

ÍNDICE PROGRAMÁTICO DA ACÇÃO DE FORMAÇÃO DE DESENHO ASSISTIDO POR COMPUTADOR, AutoCad 2018

Exemplos de Programas para Tratamento de Ficheiros DXF. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

Tecnologias da Informação e Comunicação: Sistema Operativo em Ambiente Gráfico

Testes e Exames do Desenho Assistido por Computador Teste

Elementos de transmissão de movimento

Elementos de transmissão de movimento

Implementação de Desenhos Automáticos Elemento Hidráulico Normalizado. Concepção e Fabrico Assistidos por Computador Programação VBA

ESCOLA SECUNDÁRIA MANUEL DA FONSECA - SANTIAGO DO CACÉM

Manual Prático. Elisabete Aguiar

Curso de AutoCAD 2D. Instrutor : Mauro Pio Dos Santos Junior Monitor : Thainá Souza. Aula anterior...

Introdução ao Desenho de Construção Mecânica

Escola Secundária Ferreira Dias Agualva - Sintra. Atividade 20

Aplicações de Programação CNC/ISO com Microcomputador. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

Licenciatura em Engenharia Mecânica. Concepção e Fabrico Assistidos por Computador ( C. F. A. C. ) 2001 / Secção de Desenho Industrial

TUTORIAL RHINOCEROS: BONECO LEGO

FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO DEPARTAMENTO DE ENGENHARIA MECÂNICA E GESTÃO INDUSTRIAL C.F.A.C. 2002/03

4 - APLICAÇÕES DE PROGRAMAÇÃO CNC/ISO COM MICROCOMPUTADOR

DEMEGI Departamento de Engenharia Mecânica e Gestão Industrial. SDI Secção de Desenho Industrial

Manual de preenchimento dos formulários de trabalhos de execução de sinalização

SOLID EDGE ST6 TUTORIAL 3 MODELANDO UM CORPO DE BIELA

Introdução ao AutoCAD Capitulo V: Construções geométricas. João Manuel R. S. Tavares Joaquim O. Fonseca

SOLID EDGE ST6 TUTORIAL 9 GERANDO VISTAS A PARTIR DE UM MODELO 3D. Aqui isso será feito com o corpo da Biela que você desenhou no tutorial 6.

Figura Uso de coordenadas polares

Objetivos. Sistema Operativo em Ambiente Gráfico. Introdução às Tecnologias de Informação e Comunicação

1 - Ambiente de desenvolvimento

Cabeça do motor e árvore de cames

Programação e Computação para Arquitectura 2007/2008

Aplicação da Programação CNC a um Eléctrodo com Forma de uma Cruzeta

ALUNO Natália Blauth Vasques. TUTORIAL RHINOCEROS Embalagem Hidratante Alfazol, Granado

CONTEÚDO DA AULA AULA 7 AUTOCAD. Comando APARAR/TRIM

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Gestão de Base de dados Formulários

TUTORIAL COMO MODELAR UM VEÍCULO EM SOLID EDGE COM SUPERFÍCIES USANDO IMAGENS OU DESENHOS

Pró-Reitoria de Graduação Curso de Engenharia Civil Trabalho de Conclusão de Curso

LISP - Introdução. Existem vários dialectos de LISP: COMMON LISP (o mais sofisticado e mais utilizado) Outros: MAC LISP, INTERLISP, XLISP

Programa IsoTools para Instalações Hidráulicas Ezequiel Mendonça Rezende 1

Introdução ao SolidWorks

Para cada programa, por mais simples que seja, comece sempre por esboçar a solução desenhando um fluxograma.

Uma Interface de Parametrização e Visualização para o Programa FastComp

Introdução ao AutoCAD Capitulo IV: Comandos de modificação

CARDANS. Trabalho realizado por: C.F.A.C. 2003/2004. Ricardo de Barros Monteiro

Universidade de Lisboa Faculdade de Letras Departamento de História

Familiarização com o ambiente de desenvolvimento da Keil Software. (uvision 51 e dscope 51)

PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012

Exercício 43. Página 51. Conteúdos: Inserção de campos de formulário Inserção de Macros

Introdução ao AutoCAD Capitulo IV: Comandos de modificação

EME005 - Tecnologia de Fabricação IV Fresamento CNC 5

PROGRAMAÇÃO I - Folha prática 1

Transcrição:

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

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 (BLF Regulável (BLR BLF 400 Restantes BLF s Todos os tipos de BLR s Apenas TEN 256 Todos os TEN s Todos os TEN s (excepto TEN 256 (excepto TEN 256 2

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

(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

(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

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

(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

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

(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

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

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

(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 (rot pt32 (rot pt33 (rot pt44 (rot pt45 (rot pt50 (rot pt51 (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" (rot (list (car pt0 (+ (cadr pt0 (+ 2 (/ c 2 (rot (list (car pt0 (- (cadr pt0 (+ 2 (/ c 2 (command "layer" "m" "Ti" 12

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

(rot pt19 (rot pt16 (rot pt18 (rot pt22 (rot pt20 (rot pt23 (rot pt25 (rot pt26 (rot pt24 (rot pt27 (rot pt29 (rot pt30 (rot pt28 (rot pt34 (rot pt35 (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

"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 (rot (list (car pt0 (+ (cadr pt0 (+ 2 4 (rot (list (car pt0 (- (cadr pt0 (+ 2 4 (rot (list (car pt6 (+ (cadr pt6 (+ 1 3 15

(rot (list (car pt7 (- (cadr pt7 (+ 1 3 (rot (list (- (car pt6 (+ 1 3 (cadr pt6 (rot (list (+ (car pt6 (+ 1 3 (cadr pt6 (rot (list (- (car pt7 (+ 1 3 (cadr pt7 (rot (list (+ (car pt7 (+ 1 3 (cadr pt7 (command "layer" "m" "TG" (command (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

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 (rot pt8 (rot pt11 (rot pt9 (rot pt10 "circle" (rot pt12 "d" 6 "circle" (rot pt13 "d" 6 (rot pt14 (rot pt15 (rot pt17 (rot pt16 (rot pt18 (rot pt19 (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

"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 (rot pt22 (rot pt23 (rot pt24 (rot pt25 (command "layer" "m" "Tm" (command Linha auxiliar de simetria (rot (list (- (car pt2 5 (cadr pt0 (rot (list (+ (car pt1 5 (cadr pt0 (rot (list (car pt12 (+ (cadr pt12 5 (rot (list (car pt12 (- (cadr pt12 5 (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

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 (rot pt8 (rot pt9 (rot pt10 (rot pt11 "c" (rot pt20 (rot pt21 (rot pt22 (rot pt23 (rot pt30 (rot pt31 (rot pt32 (rot pt33 19

"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 (rot pt14 (rot pt17 (rot pt15 (rot pt16 (command (rot pt18 (rot pt19 (setq enti (entlast guarda a última entidade desenhada (command (rot pt24 (rot pt25 (rot pt26 (rot pt27 (rot pt28 (rot pt29 20

(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 (rot (list (- (car pt2 5 (cadr pt0 (rot (list (+ (car pt1 5 (cadr pt0 (rot (list (car pt12 (+ (cadr pt12 5 (rot (list (car pt12 (- (cadr pt12 5 (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

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

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 (rot pt1 (rot pt2 (rot pt4 (rot pt5 (rot pt3 (rot pt6 (rot pt7 (rot pt8 "c" (rot pt11 (rot pt12 (rot pt13 (rot pt10 (rot pt14 (rot pt18 (rot pt19 (rot pt20 (rot pt17 (rot pt16 (rot pt15 (rot pt16 (rot pt21 (rot pt22 (rot pt23 (rot pt24 (rot pt25 (rot pt26 (rot pt27 23

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

(rot pt43 (rot pt44 (rot pt45 (rot pt46 (if (= BLF400 1 (command (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

(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 (rot pt1 (rot pt2 (rot pt3 (rot pt4 (rot pt5 (rot pt6 "c" (rot pt23 (rot pt21 (rot pt22 (rot pt24 (rot pt30 (rot pt27 26

(rot pt28 (rot pt29 (command "layer" "m" "Tm" (command (rot pt7 (rot pt8 (rot pt9 (rot pt10 (rot pt19 (rot pt20 (rot pt25 (rot pt26 (command "layer" "m" "Ti" (command (rot pt11 (rot pt12 (rot pt13 (rot pt14 (rot pt15 (rot pt16 (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

(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. 1ª Caixa de diálogo Caixas 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

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

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

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

Listagens das Bases de Dados 1. Base de dados BLF.dat 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. Base de dados BLR.dat 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. Base de dados TEN.dat 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