AutoLISP -I Introdução João Manuel R. S. Tavares Joaquim Oliveira Fonseca Bibliografia Programação em AutoCAD, Curso Completo Fernando Luís Ferreira, João Santos FCA Programando em AutoLISP Kramer, W. e Kramer MAKRON Books do Brasil Editora Ltda Domine a 110% AutoCAD 13 Pedro Leão Neto FCA Programando em AutoLISP R. C. Ruschel, DCC-FEC-UNICAMP http://www.fec.unicamp.br/~regina/alisp0.html 2 2011@JST/JOF JST/JOF 1
AutoLISP o que é? O AutoLisp é baseado na linguagem de programação LISP (List Processing); de aprendizagem simples, porém poderosa. O AutoCAD tem um interpretador de Lisp embebido, que permite a digitação de expressões/funções AutoLisp na linha de comando e a sua interpretação automática. O AutoCAD incluí rotinas AutoLisp bastante úteis nos subdirectórios sample e support. 3 2011@JST/JOF Aplicações em AutoLisp São armazenadas em arquivos ASCII com extensão.lsp. Devem ser previamente carregadas para o ambiente do AutoCAD para serem executadas. Como carregar: na linha de comando; pelo menu Tools, opção AutoLISP...; de forma automática incluindo-a no arquivo acad.lsp. 4 2011@JST/JOF JST/JOF 2
Aplicações em AutoLisp Carregamento de programas em autolisp pela opção Load... do submenu AutoLISP existente no menu Tools. 5 2011@JST/JOF Visual Lisp Editor O AutoCAD incluí um editor de programas em AutoLISP: o Visual Lisp Editor executado a partir do submenu Autolisp do menu Tools. 6 2011@JST/JOF JST/JOF 3
Lisp A linguagem de programação Lisp é: da mesma época do Fortran; diferente de outras linguagens de programação, por exemplo, dados e programas são tratados da mesma forma (tudo como listas) e são colocados no mesmo espaço de memória do computador; linguagem interpretada; isto é, toda vez que o programa é executado o código fonte é avaliado; muito utilizada em programação na área da inteligência artificial. O Lisp utiliza a notação infixa (operador seguido dos operandos): 1 + 2 (+ 1 2) 7 2011@JST/JOF Listas - composição Cada instrução em Lisp inicia com (, termina com ) e é composta por átomos, que podem ser: um número inteiro; um número real; uma cadeia de caracteres (uma string); um símbolo: nome de função interna ou definida pelo utilizador; uma variável: um símbolo que representa o nome de um dado; 8 2011@JST/JOF JST/JOF 4
Listas - composição um nil: valor nulo (vazio); um apontador para um arquivo (file descritor); uma sub-rotina: nome de funções internas e externas do AutoLisp; um nome de entidade: código numérico associado ao objeto numa sessão de trabalho; conjunto de seleção: conjunto de objetos selecionados. 9 2011@JST/JOF Listas - Exemplos Exemplos de listas de dados: (2.0 3.5 7.6) ("paola" (11 06 1996) 3.150 51) (sub lista) 10 2011@JST/JOF JST/JOF 5
Listas - Exemplos Lista de programa (primeiro elemento é um nome de função ou uma subrotina): (setq A 21) setq é uma função, A é um símbolo (nome de variável) (list 2 3 4) list é uma função (defun vistalatdir () (command "vpoint" "1,0,0")) defun e command são funções (vistalatdir) vistalatdir é um símbolo (nome de função). 11 2011@JST/JOF Avaliando expressões em Lisp O interpretador do Lisp é denominado avaliador. Toda a entrada em Lisp é processada por meio do avaliador. Tudo dentro do AutoLisp em relação ao avaliador retorna um valor como resultado, por exemplo: quando um elemento de dado é apresentado ao avaliador, o valor atribuído ao elemento é retornado; quando um símbolo é apresentado, o valor da ligação atual do símbolo é retornado; quando uma lista de programa, é apresentada, essa é executada e o valor final da execução é retornado. 12 2011@JST/JOF JST/JOF 6
Avaliando listas de programa Se o primeiro elemento da lista for o nome de uma subrotina ou de uma função definida, a subrotina ou a função é executada; o restante da lista é usado como parâmetros (para a subrotina ou para a função em questão). Se o primeiro elemento da lista não for uma função ou subrotina, obtém-se uma mensagem de erro: bad function (função incorreta). 13 2011@JST/JOF Exemplos de avaliação de listas de programa (list 1 2 3) - constrói uma lista de 3 números inteiros; retorna (1 2 3); (2.0 3.0 6.6) - retorna erro: bad function; (setq a 1.0) - retorna o valor 1.0 atribuído à variável a; (set 'a 1.0) - idem mas usando o símbolo '; (set (quote a) 1.0) - idem mas usando a subrotina/função interna quote. 14 2011@JST/JOF JST/JOF 7
AutoLisp na linha de comando do AutoCAD É possível avaliar expressões em AutoLisp e até funções na linha de comando do AutoCAD. Este recurso é muito utilizado para experimentação e teste. Basta digitar na linha de comando a expressão ou função desejada, por exemplo: Command: (setq A 2.0) 2.0 Retorno Command: (setq B 3.0) 3.0 Retorno 15 2011@JST/JOF AutoLisp na linha de comando do AutoCAD Command: (setq C (+ A B)) 5.0 Command:!C 5.0 Command: (setq p1 (list 1 2)) (1 2) Command: (setq p2 (list 10 20)) (10 20) Escrever valor de C 16 2011@JST/JOF JST/JOF 8
AutoLisp na linha de comando do AutoCAD Command: (command "line" p1 p2 "") line From point: to point: to point: Command: nil Chamada de um comando do AutoCAD Command: (defun vistalatdir() (command "vpoint" "1,0,0")) VISTALATDIR Command: (vistalatdir) 17 2011@JST/JOF Carregar programas AutoLisp no AutoCAD Na linha de comando digitar: (load unidade-dedisco:\\sub-diretório\\nome-do-promaga-comextensão ), por exemplo: Command: (load "c:\\trab\\programa1.lsp") Na opção Load Application... do menu Tools indicar o arquivo a ser carregado, procurando sua localização com auxílio do botão File, e depois carregá-lo acionando o botão Load. 18 2011@JST/JOF JST/JOF 9
Exemplo - isomets.lsp Conteúdo do arquivo isomets.lsp: ;;;Vista isometrica lat-dir, fundo, por-cima (defun c:iso1() (command "vpoint" "1,1,1")) Comando Autocad ;;;Vista isometrica lat-esq, fundo, por-cima (defun c:iso2() (command "vpoint" "-1,1,1")) ;;;Vista isometrica lat-dir, frente, por-cima (defun c:iso3() (command "vpoint" "1,-1,1")) ; = início de comentário 19 2011@JST/JOF Exemplo - isomets.lsp Carregar o arquivo isomets.lsp e executar as funções: Command: (load "c:\\trab\\isomets.lsp") ISO3 Última função carregada Command: iso1 vpoint Rotate/ <0.0000 0.0000 1.0000>: 1,1,1 Regenerating drawing Command: nil 20 2011@JST/JOF JST/JOF 10
Exemplo - media.lsp Conteúdo do arquivo media.lsp: ;;;Programa principal (defun c:mediatestes() (setq t1 (getreal "\nnota teste-1: ")) (setq t2 (getreal "\nnota teste-2: ")) (setq nota (soma-e-divide)) (princ "\nmedia dos testes = ") (princ nota) (princ) ) ;;;funcao soma-e-divide (defun soma-e-divide() (/ (+ t1 t2) 2.0) ) (Para não aparecer Command: nil.) 21 2011@JST/JOF Exemplo - media.lsp Carregar o arquivo media.lsp e executar a função mediatestes: Command: (load "c:\\trab\\media.lsp") SOMA-E-DIVIDE Command: mediatestes Nota teste-1: 15.0 Nota teste-2: 17.0 Media dos testes = 16.0 Command: 22 2011@JST/JOF JST/JOF 11