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
Download

Notas 2