Instituto Superior Técnico Licenciatura em Arquitectura Desenho Assistido por Computador II Ano lectivo 2005/06, 2° ano Responsável: Assistente: Prof. José Pinto Duarte Arq. Deborah Benrós Notas de apoio ao Exercício 1. Parte 2 Introdução ao AutoLISP O que é o LISP O LISP é uma linguagem de programação desenvolvida no MIT na década de 50 para desenvolver programas na área da inteligência artificial. É uma linguagem baseada no conceito matemático de função e basea-se no processamento de listas. o nome LISP é a abreviatura de “list processing”. Por se basear no conceito de função, o LISP diz-se uma linguagem funcional. É no entanto uma linguagem muito flexível e pode simular quase todas as técnicas de programação conhecidas incluindo programação por procedimentos e orientação para objectos. Por este motivo, continua hoje a ser muito utilizada. O que é o AutoLISP O AutoLISP é um dialecto do LISP desenvolvido especificamente para o AutoCAD. E uma “scripting language”, o que significa que tem um grau de abstração superior, sendo portanto mais acessivel para programar. Caracteristicas gerais do AutoLISP Os programas são compostos por uma lista de texto simples (ASCII) com instruções sequênciais, guardados normalmente em ficheiros com extensão .lsp (ex: nome.lsp ). Cada um destes ficheiros LSP pode conter vários programas. Cada programa constitui um comando. A ordem dos programas não interessa e as variáveis não têm que ser declaradas. Quando se carrega um ficheiro os comandos ficam em memória. Editor de AutoLISP Para escrever um programa e elaborar um ficheiro de AutoLISP é necessário um editor de texto. São exemplos de editores de texto o Notepad e o Emacs. O Emacs é distribuido gratuitamente na Internet e tem a vantagem de possuir características que facilitam a programação em AutoLISP, como a verificação do encontro de parêntesis, busca e substitução de sequêcias de palavras, etc. Existem também editores de texto incluidos em ambientes de desenvolvimento mais sofisticados como o VisualLISP, que utilizaremos na aula. O VisualLISP é descrito nas Notas 1.1. Tipos de elementos: • Símbolos ou átomos, ex : A, 1 , c 1 • Variáveis: Listas, ex : (A 1 c) ou (3.0 4.3 5.8) Strings, ex : “Isto é uma string” ou “A1c” Reais, ex : 1.0 ou 3.457 Inteiros, ex : 1 • Funções (comandos), ex : setq , getdist , subst, etc. • Expressões. São todos os elementos de um programa que permitem efectuar uma acção. Se escrevermos uma expressão o computador responde com o resultado da sua avaliação. Avaliação é o processo de executar um programa e que termina com um resultado. Existem expressões primitivas (ex: símbolos, átomos e variáveis) e expressões compostas que resultam da combinação de expressões mais simples através de elementos de agregação (ex: (+ 2 3)). Nota: o AutoLISP não destingue variáveis em letra maiúscula das em letra minúscula, ou seja, a variável b é o mesmo que B. Estrutura de uma programa AutoLISP: (defun c:nome ( VA / VL) ( . . . . . . . .) ( . . . . . . . .) ( . . . . . . . .) ) ; Defun A parte em itálico não é obrigatória, mas ajuda a verificar o encontro de parêntesis. VA = Variáveis de entrada de dados VL = Variáveis locais Existem três tipos de variáveis: o entrada o locais o globais: são todas as que não são indicadas na definição de uma função. Comentários ; um único ponto e virgula evita que o compilador tente executar o texto à sua direita. ; ; ; três pontos e virgula usa-se para grandes comentários. Os comentários facilitam a compreensão do código quer pela pessoas que o escreveu quando volta apegar nele, quer por outras pessoas que têm que continuar o seu trabalho. Comente sempre o seu código! Como executar um programa de AutoLISP Se o ficheiro com o programa estiver numa das pastas definidas pelo AutoCAD: 2 - No Windows Explorer, arrastar um ficheiro com extensão .lsp para a janela do AutoCAD - Na linha de comandos do AutoCAD: o (load “nome”) ou o (load “nome.lsp”) Este modo não é possível nos computadores do laboratório em virtude de a drive C: se encontrar protegida. Se se quiser que o AutoCAD indique se um programa foi carregado; o (load “nome.lsp” “mensagem de erro”) Se se quiser que o program seja carregado se estiver correcto: o (load “c:nome.lsp”) A extensão .lsp pode ser omitida no comando load mas o ficheiro tem que a ter. Se o ficheiro não se encontrar numa das pastas do AutoCAD, na linha de comandos do AutoCAD, escrever: o (load “c:/ . . . / nome do programa lisp”) ou o (load “c:\\ . . . \\ nome do programa lisp”) o (appload) ou o ir ao menu Tools/AutoLisp/Load e browse/load - É possível evitar ter que escrever todas as vezes a path (caminho) onde se encontram os ficheiros de AutoLISP. Para isso é necessário indicar a path indo ao seguinte menu de AutoCAD: o Menu Tools/Options/Files/Support File search path. - Após feito isto, a path fica gravada a sessão de AutoCAD (actual e seguintes) , sendo apenas necessário dar o seguinte comando: o (load “nome do programa lisp”) Se se quiser evitar ter que carregar sempre o programa pode-se escrever um ficheiro com a linha de instrução adequada e dar-lhe o nome acad.lsp. Nota: a tecla F2 faz aparecer a janela de “prompt” em separado. Comandos básicos de AutoLISP (command “comando_de_AutoCAD” ) Permite dar comandos de AutoCAD dentro do AutoLISP Exemplos: (command “line” ‘(0 0) ‘(20 30) “”) Desenha linha da coord. xy 0,0 até 20,30 As 2 aspas “” representam o <enter> 3 (command “circle” ‘(10 15) 5) coord. 10,15 Desenha circulo de raio 5 na (command “.circle” .... ....) Opcional: garante que é o comando circle do AutoCAD e não uma função de Lisp com o nome circle (command “_circle” .... ....) Opcional: garante que o comando é executado, mesmo num AutoCAD numa língua diferente do inglês. Entre aspas coloca-se apenas o nome do comando ou das opções do comando: (command “circle” “R” 5) (prompt “mensagem” ) Escreve na prompt do AutoCAD uma mensagem Funções de atribuição de valores (set (quote variável) valor ) Permite atribuir uma valor a uma variável (set ‘variável valor ) Permite atribuir uma valor a uma variável (setq variável valor ) Permite atribuir uma valor a uma variável Exemplos: (set (quote a) 24) (set ‘a 24) (setq a 24) variável a Atribui o valor 24 à (setq c 5 d 6) Atribui o valor 5 a c e 6 a d (setq a ‘b) Atribui o valor da variável b à variável a !a É apenas possível de usar na linha de comandos do AutoCAD, permitindo obter o valor da variável global a 4 Funções de entrada de dados (getint “mensagem”) Pede um número inteiro Exemplos: (setq c (getint “Escreva um numero inteiro: “) variável c Atribui o número dado à (setq c (getint “\nEscreva um numero inteiro: “) Igual ao anterior, mas a pergunta é feita numa nova linha (getreal “mensagem”) Pede um número real Nota: não esquecer que em AutoCAD o “.” é sempre a casa decimal (getpoint “mensagem”) Pede um ponto, obtendo-se uma lista com coordenadas (getstring “mensagem”) Pede uma string Exemplo: (getstring 1 “Qual o seu primeiro e ultimo nome? ”) O uso de 1 ou T de “true” é opcional e permite que se introduzam espaços na string de resposta (getdist ponto “mensagem”) Pede uma distância através da indicação de pontos. Ponto é opcional Exemplo: (getdist “clique dois pontos”) Dá a distância entre os pontos dados 5 (getdist ‘(10 5) “segundo ponto”) (getangle ponto “mensagem”) Dá a distância do ponto (10 5) ao segundo ponto indicado Pede um ângulo. Ponto é opcional Exemplo: (getangle “Indique ângulo”) Dá o valor em radianos do ângulo em graus indicado ou do ângulo que a recta formada pelos dois pontos indicados faz com a horizontal. (getdist ‘(10 5) “Indique ângulo”) Dá o angulo em radianos que a recta formada pelo ponto dado e pelo ponto indicado faz com a horizontal. (getorient ponto “mensagem”) Pede um ângulo. Ponto é opcional Nota: O getorient funciona de forma semelhante ao getangle se as variáveis do sistema angbase (qual a direcção em que um ângulo é zero) e angdir (qual a direcção em que um ângulo é positivo ou negativo) não tiverem sido alteradas. O getorient não entra em conta com estas variáveis. (getcorner ponto “mensagem”) Pede um ponto no canto oposto ao ponto indicado para abrir uma janela (getkword “mensagem”) Pede a escolha de uma das opções prédefinidas Exemplo: (initget “Sim Não”) (getkword “escolha Sim/Não”) (initget bits “mensagem”) O utilizador tem que responder sim ou não Estabelece as normas para entrar dados 6 Operadores Matemáticos (+ valor valor ...) (- valor valor ...) (* valor valor ...) (/ valor valor ...) adição subtracção multiplicação divisão (max valor valor ...) (min valor valor ...) (rem valor valor) (gcd valor valor ...) retorna o valor máximo de entre os valores indicados. retorna o valor mínimo de entre os valores indicados. retorna o resto da divisão do primeiro pelo segundo. retorna o máximo denominador comum. (1+ valor) (1- valor) (abs valor) (cos ang) (sin ang) (sqrt valor) (expt valor exp) incrementa o valor dado em uma unidade. decresce o valor dado em uma unidade. retorna o valor absoluto de valor. retorna o coseno do ângulo dado em radianos retorna o seno do ângulo dado em radianos. retorna a raiz quadrada do valor dado. retorna o valor dado elevado ao expoente. Também se usa para calcular raizes índice n; recorde que: n√a = a1/n. retorna o arcotangente do valor. retorna o logarítmo natural, ou seja calcula o valor de e levantado ao valor dado. retorna o logarítmo natural do valor dado, ou seja o número a que se tem que elevar a base e para se obter o valor dado. (atan valor) (exp valor) (log valor) 7 APENDICE Programas de exemplo (para referenciar durante a explicação dos comandos, do tipo: “ver programa SOMA”) SOMA (defun soma () (setq a 20 b 40 c (+ a b)) ) TAN (defun tan (ang) ( / sin ang) (cos ang) ) Nota: tang. de 45 graus = (tan (/ pi 4) 8