My Profile Photo

Jociel Souza

PHP Clojure Javascript Mongodb ZendFramework


Desenvolvedor Web - Backend - PHP


Estudante de Ciência da Computação, desenvolvedor de software apaixonado por tecnologia e entusiasta de empreendedorismo,


Estudante de Ciência da Computação procurando sempre aprender algo novo, desenvolvedor web com conhecimento em PHP7^, Zend Framework, Doctrine ORM, Doctrine ODM, MongoDB, Javascript, HTML, GIT entre outros, atualmente estudando também Clojure, Elm e o paradigma funcional e tentando compartilhar o conhecimento adquirido.


Introdução a AutoLISP | Jociel Souza

Introdução a AutoLISP


O AutoCAD é um software de CAD, Desenho Auxiliado por Computador, permite a criação de desenhos técnicos em 2D e modelos tridimensionais, utilizado em diversas áreas como engenharias, arquitetura topologia, design etc, é um dos software mais utilizados para este fim. Uma característica do AutoCAD é que ele permite o uso de programação em AutoLISP para personalização e estensão de suas funcionalidades.

O AutoLISP é um dialeto da linguagem LISP, uma das mais antigas utilizadas até hoje, o AutoLISP foi incorporado no AutoCAD em 1996 e tem sido amplamente utilizado para customização do ambiente do AutoCAD, permitindo criar “comando” e ferramentas específicas para problemas de áreas diversas.

Nate Grant em Unsplash


AutoLISP

O AutoLISP, assim como o LISP, é extremamente simples e mantém uma enorme flexibilidade, permitindo a fácil extensão e criação de novos meios para resolução de problemas, ele evoluiu e manteve a maioria dos conceitos básicos, tipos de dados e capacidade do LISP, além de acrescentar funcionalidades especiais para operações e recursos do ambiente do AutoCAD.

Quando comparada com outras linguagens mais usuais o AutoLISP pussui uma sintaxe extremamente simples, baseada em S-Expressions, de maneira simploria é uma forma de representar dados em listas encadeadas.
Podemos escrever uma expressão em AutoLISP utilizando elementos primitivos como caracteres, números, ou compondo outras espressões entre si.


Sendo baseada em processamento de listas o AutoLISP se encaiza muito bem em um sistema CAD já que a maioria deste tipo de sistema gráfico se baseiam em pontos e vetores em um plano cartesiano. Tomando como exemplo um sistema CAD com coordenadas em um plano cartesiano, um ponto nesse plano pode ser considerado uma lista de números, cada número representando uma posição nos eixos X Y e Z.

ponto1 = (2 5 3) - coordenada X = 2, coordenada Y = 5, coordenada Z = 3

Agora imaginem uma linha desenhada nesse plano cartesiano definida por dois pontos, podemos perceber essa linha como uma lista contendo duas listas internas descrevendo o ponto inicial e o ponto final da linha.

linha = ((0 0) (3 4))



Sintaxe

A sitaxe do AutoLISP, como citado, é simples, uma expressão é escrita iniciando-se com um ( logo após temos uma
função, tudo o que vier em seguida são parâmetros para esta função e terminamos com um ).

(função parâmetro [...parâmetros])

Toda expressão é enviada para o interpretador do AutoLISP para ser avaliada e saber qual a natureza da expressão, se o
primeiro elemento da lista for um nome de uma subr ou uma função, esta será executada e o restante da lista é usada
como parâmetros, se o primeiro elemento não for uma função ou subr`é apresentado uma mensagem de erro.

Uma das vantagens é que podemos executar uma expressão diretamente no prompt de comando do AutoCAD, isso nor permite
testar trechos de códigos e vê-los funcionando ou falhando antes de escrevê-los em um código principal.

O AutoLISP manteve a notação prefixada, ou seja, o operador vem primeiro e em seguida os operandos, aplicando isso em uma operação matemática temos:

Transfoemando isso para a notação infixa a qual esmos acostumados seria algo como o seguinte

(2 * 2) e ((45 * PI) / 180)


Existem alguns caracteres especiais em AutoLISP:

( e ) - Define o inicio e fim de uma expressão;
" - Define um nome de comando do AutoCAD ou um texto qualquer;
; - Define uma linha de comentário;
Letras maiúsculas e minúsculas não tem diferença em AutoLISP.

Algumas características da linguagem:

Átomo é o elemento de dado básico do AUtoLISP, tipos de dados complexos são construídos usando conjunto de Átomos;
Symbols refere-se a qualquer ‘nome’ em um código AutoLSIP, seja já existente no interpretador ou definido pelo usuário;
Variável é um símbolo utilizado para guardar alguma informação relevante em um código AutoLISP;


Tipos de dados

Variáveis podem guardar diversos tipos de dados, seguem alguns tipos básicos.

inteiro são números sem casas decimais;
real são números que possuem uma parte decimal;
Nothing (nil) o mesmo que nulo;
sub-rotina (subr) são funções já definidas no interpretador do AutoLISP e disponíveis para serem utilizadas;
ponteiro de arquivo (file) é um ponteiro para um arquivo, utilizado para manipulação de arquivos de texto (txt);
Entity name (ename) é um ponteiro para o banco de dados do desenho, utilizado para acesso as propriedades de uma entidade no desenho;
lista é um conjunto de dados, uma lista pode conter tipos diferente de dados inclusive outras listas, existem dois tipos de listas, lista simples e lista de associação;
funções são trechos de códigos definido pelo usuário;


Ambiente do VisualLISP

O AutoCAD possui um editor chamado VisualLISP, nele é possǘiel escrever código AutoLISP com destaque de sintaxe entre outras coisas, podemos abri-lo usando o comando vlisp.

Na parte superior temos o editor e na inferior temos um console onde podemos executar trechos de código e ver os resultados desses testes.
Temos também algumas ferramentas na parte superior, nas barras de ferramentas, por exemplo o Load active edit window

que faz o “load” para o AutoCAD de todo o código escrito na janela atual deixando disponível para executar no AutoCAD aberto no momento, e também temos o Load selection

que faz “load” apenas do trecho selecionado do código atual.


Variáveis

Variávei são simbolos onde podemos “guardar” alguma informação a ser utilizada, uma variável é definida com a subr setq.


Funções

Uma função é um trecho de código bem definido que resolve um problema específico, podemos dividir um problema grande em funções menores que resolvem uma parte desse problema para no final conseguir a solução completa. Toda função ou subr retorna um valor, esse retorno é o resultado da avaliação da última expressão da função.
Para criarmos uma função em AutoLISP usamos a subr defun, a criação de uma função segue o seguinte exemplo:


Exemplos:


Variáveis em funções podem assumir três estados diferentes de determinado por sua existência e localização na lista de parâmetros da função:

Variável associada, Variável global e Variável local

A área onde definimos os parâmetros de um função pode ser dividida em duas partes

(defun teste(<parâmetros> / <variáveis locais>) ...

Variáveis associadas são os parâmetros da função e ficam do lado esquerdo da /, variáveis locais ficam do lado direito da /, o resto são variáveis globais. Sempre defina variáveis locais para evitar sobrescrita de outros nomes de variáveis, funções ou que outra função manipule uma variável alterando completamente o resultado final.
Uma variável local só existe dentro do copro da função, seu valor não é visto fora dela.


Para executar uma função criada no AutoLISP após fazer “load” do código, podemos chamar ela no prompt de comando coloando o nome da função entre parenteses.

Para chamarmos essa função no formato de um comando do AutoCAD, apenas com o nome da função, devemos colocar o prefixo c: na hora de definir o nome.


Desta forma criamos um “comando” novo e podemos executar apenas digitando o nome da função.


Alguns exemplos de funções.

Função que retorna o comprimento de um círculo de diâmetro 25.


Função que retorna a área de um triângulo b=5, h=7.


Função que retorna a área de um círculo de diâmetro 20.


Conclusão

Fica aqui uma introdução a AutoLISP que pode ser uma poderosa ferramenta para quem trabalha com AutoCAD possibilitando a criação de rotinas para automatização de tarefas repetitivas bem como para criação de ferramentas que não existem prontas para problemas específicos da área, inclusive muitos dos comando do AutoCAD são rotinas AutoLISP, também é possível a manipulação de entidades em um desenho podendo assim capturar informações sobre as mesmas e/ou alterar essas informações, esses e outros assuntos tentarei abordar em outros textos.
Comentem se gostaram, compartilhem se conhecem alguém a quem possa ser útil este texto e até o próximo.




Referências:
  • GAÁL, José Alberto. Curso de AutoLISP. Campinas, SP: Desecad, 1997. 251 p.
  • KRAMER, William. Programando em AUtoLISP. São Paulo, SP: Makron Books, s/d, 274 p.
  • AUTODESK. AutoCAD Developer Documentation. 2019. Disponível em: https://help.autodesk.com/view/OARX/2019/PTB
comments powered by Disqus