Está en la página 1de 9

Aprendiendo a programas en AutoLISP.

Cmo es la sintaxis de programacin en el AutoLISP?


En el AutoLISP se trabaja con listas, es decir una lista es un objeto encerrado
siempre entre parntesis por ejemplo:
( + 3 2 ) es una lista.
( Hola Mundo ) es una lista.
( 2 (Hola Mundo) ( 1 2 ( + 3 2 ) ) ) es una lista.
Entonces para programar en el AutoLISP siempre todos los argumentos,
objetos, nmero, etc. Siempre deben estar encerrados entre parntesis los
cuales formaran listas.
Cmo funciona o Cmo evala un programa en AutoLISP?
En el AutoLISP siempre se evala todo lo que est dentro de un parntesis:
(Lo que evaluar)
Y si se tiene varios parntesis siempre habr un parntesis principal que
contenga a todos los dems parntesis:

Comandos Bsicos utilizados en el AutoLISP


Comando DEFUN: Nos permite definir funciones que realizaran alguna
tarea, calculo, procedimiento, etc. Que deseemos. Sintaxis:

Donde:

DEFUN

Es el comando que creara nuestra funcin.

Smbolo

Es el nombre de la funcin.

Lista de
Parmetr
os
Cuerpo
de la
funcin

Es la lista de parmetros que necesitar nuestra funcin.

Ejemplo:

Es la parte donde se definir el que har nuestra funcin y


que valores nos arrojara.

Realicemos un programa que sume dos nmeros dados:

Entonces el programa anterior define la funcin suma que sumar dos


nmeros a y b devolvindonos como resultado la suma de estos dos
nmeros. Veamos cmo funciona dicha funcin:
Llamando a la funcin desde la lnea de comandos para que sume 2 + 3

El resultado se mostrara como se ve en la figura:

Otro ejemplo: dado un ngulo en grados sexagesimales calcular el seno de


dicho ngulo:

Este programa calculara el seno de un ngulo x en grados sexagesimales


dado, para lo cual utilizamos la funcin interna sin del AutoLISP el cual
devuelve el seno de un ngulo pero en radianes por lo que para que el
programa calcule el seno pero de ngulos sexagesimales se tuvo que
realizar una conversin de ngulos en el cuerpo de la funcin que definimos,
as nos arrojara resultados coherentes. Vemos:
Llamando a la funcin desde la lnea de comandos para que calcule el seno
de 90

El resultado se mostrara como se ve en la figura:

Como se vio en ejemplos anteriores el comando DEFUN nos permite definir


nuestras propias funciones facilitndonos as la realizacin de ciertas tareas.
Comando SETQ: permite almacenar en una variable algn valor indicado o
desarrollado por una funcin o una expresin, es decir permite almacenar
algo dentro de una variable que nosotros indicaremos. Sintaxis:

Donde:

SETQ

Smbolo

Expresi
n

Ejercicios:

Es el comando que permite guardar un valor o expresin


en una variable.
Es el nombre de la variable.
Es la lista, funcin, valor numrico, cadena de caracteres,
etc., es decir algn objeto que se guardara en la variable
indicada.

1. Dibujar una lnea, dando valores fijos de los puntos, es decir los
siguientes puntos:
Lnea 1

L1 : P1 P 2 , P1=( 1, 1 ) y P2=( 5, 10 )

Lnea 2

L2 : P1 P 2 , P1=(10,1 ) y P 2=( 15,10 )

Lnea 3

L3 : P1 P2 , P1=( 0, 0 ) y P 2=( 0, 20 )

Lnea 4

L4 : P1 P2 , P 1=( 3,0 ) y P2=( 15, 0 )

Desarrollo:
El cdigo necesario para poder dibujar las lneas que se nos solicita
en el ejercicio se podr implementar de la siguiente manera:
Con Listas:

Con Cadena de Texto como se introduce al AutoCAD por el teclado:

Para ambos casos el resultado es:

Pero vemos que los puntos que nosotros hemos ingresado estn en
coordenadas absolutas, pero si quisiramos que los puntos estn
referidos con coordenadas relativas con respecto a un punto base nos
convendra trabajar de la segunda manera es decir los parmetros del
comando deben estar en forma de cadena de texto, as podremos
ingresar e indicar al AutoCAD que queremos que el punto este en
coordenadas relativas, veamos el ejemplo anterior:
Aqu estamos indicando que el siguiente punto
con respecto al punto base
absoluto

( 0 0)

( 11 )

( 5 10 )

es referido

y no con respecto al punto base

esto se comprueba con el comando LIST

2.

Dibujar una lnea, pidiendo los puntos mediante GETPOINT


Primera opcin:
(command line (getpoint Primer punto) (getpoint segundo
punto) )
Segunda Opcin:
(command line (setq Pb (getpoint Primer punto)) Pb (getpoint Pb
segundo punto) )

3. Dibujar una lnea, esperando valores que ingrese el usuario


Primera opcin:
(command "line" (setq Pb (getpoint "primer punto:")) Pb pause "")
Segunda opcin:
(command "line" pause pause "")
4. Dibujar un tringulo cualquiera:
Primera Opcin (con valores fijos y coordenadas relativas):
(command "line" "1,1" "@5,10" "@4,-5" "c")
Segunda Opcin (con getpoint):
(command line (setq Pb (getpoint primer punto:)) Pb (setq Pb
(getpoint Pb segundo punto: )) Pb (getpoint Pb tercer punto:) c)
Tercera opcin (con pause):
(command line pause pause pause c)
5. Dibujar un cuadriltero cualquiera:
Primera opcin (con valores fijos y coordenadas relativas):
(coomand line 1,1 @5,10 @5,0 @3,-10 c)
Segunda opcin (con getpoint):
(command line (setq Pb (getpoint primer punto:)) Pb (setq Pb
(getpoint Pb segundo punto: )) Pb (setq Pb (getpoint Pb tercer
punto: )) Pb (getpoint Pb cuarto punto:) c)
Tercera opcin (con pause):
(command line pause pause pause pause c)
6.

EL RETURN ()
Es el equivalente a un ENTER en algunos comandos pero no necesariamente
significa eso pues hay que saber en qu comandos trabaja como pulsar
ENTER y en que otros no. Algunos de estos ejemplos son los comandos TEXT
CIRCLE estos comandos no necesitan un RETURN de finalizacin de
comando pues solo necesitan ingreso de datos por ejemplo para dibujar una
circunferencia:
Comando: CIRCLE
1ro nos pide: ingresar un centro para la circunferencia y luego pulsamos
ENTER.
2do nos pide: ingresar un radio para la circunferencia y luego pulsamos
ENTER.
Termina el comando no es necesario hacer un ENTER de salida para
terminar el comando, pero que pasa si pulsamos un ENTER ms lo que
entiende el AutoCAD al hacer esto es que nosotros estamos solicitando el
ultimo comando ejecutado o solicitado en el PROMPT del AutoCAD es decir
en este caso se volver a ejecutar el comando CIRCLE esto se puede
entender mejor con el siguiente ejemplo:
Primero dibuje una POLILINEA con el comando PLINE luego ejecute el
siguiente cdigo:
((command circle 10,10 2 ) (PRINT HOLA) ) Qu paso? Por qu
paso esto?
Lo que paso es que se volvi a ejecutar el comando PLINE (el ltimo
comando ejecutado en el PROMPT del AutoCAD) y no la siguiente expresin
que queramos que se ejecute en este caso que imprima la palabra HOLA,
esto paso pues porque el comando CIRCLE solo necesita los datos
solicitados por el comando y termina pero en el cdigo nosotros
introducimos un RETURN o ENTER que ya no es necesario para el comando
entonces AutoCAD entiende que este RETURN () es un ENTER que solicita
el ultimo comando ejecutado en el PROMPT del AutoCAD por lo que vuelve a
ejecutar el comando PLINE pues este era el ltimo comando del PROMPT
esto provoca o fuerza a salir al AutoCAD del cdigo Lisp por lo que ya no
ejecutara la siguiente expresin pues esta expresin se vuelve un
parmetro del comando y evidentemente no reconocer este parmetro
arrojndonos el mensaje ; error: no function definition: nil por lo que se
pierde la expresin y volver a solicitar que se ingrese un parmetro
correcto para el comando ejecutado. Explicado esto a la hora de programar
un cdigo hay que tener cuidado de donde utilizar el RETURN () pues nos
puede llevar a errores no deseados y provocar que el programa no trabaje
bien.

El OBJECT SNAP es la funcin que nos permite identificar puntos claves pero
cuando interacta con el LISP muchas veces debido a la precisin del SNAP
los dibujos que nosotros queremos que nuestro cdigo en LISP los dibuje en
la pantalla del AutoCAD no necesariamente resultan lo que queremos por

que el SNAP del AutoCAD fuerza a dibujar y no permite dibujar libremente es


por eso que cuando queremos dibujar con el LISP debemos agregar un
cdigo que configure al SNAP y nos permita dibujar sin forzar bueno por el
momento decid apagar el SNAP para dibujar y despus de dibujar volver a
activar el SNAP investigar ms.

Cuando utilices el comando WCMATCH no debes dejar espacios en blanco


dentro del filtro es decir por ejemplo si deseas hacer el siguiente cdigo:

En el cdigo anterior al hacer la comparacin entre el texto 1.23 y los


filtros de comparacin la , se interpretara en el LISP como el conector
lgico o es decir el anterior cdigo se puede entender como:
1.23 # = Solo tiene un digito o 1.23 # `.## = Tiene un digito
seguido por un punto y luego por dos dgitos ms o 1.23 `.## =
comienza con un punto seguidos por 2 dgitos
Vemos que al ejecutar el comando nos devolver T es decir ser verdadero
pues uno de los filtros cumple:

Ahora veamos qu pasa si ejecutamos el comando pero con espacios en


blanco:

Es incorrecto pues en el cdigo anterior se interpretara como que solo se


realizara la comparacin con el 1er filtro indicado es decir solo compara con
# y no evaluara a los dems dando como resultado:

Y para que no queden dudas cambiemos de lugar al filtro que har que el
resultado se verdadero

Como se podr entender la importancia del adecuado escrito de los


comandos pues este inocente cambio podra resultar en resultados no
esperados por el programador.