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 AutoLISPComando DEFUN: Nos
permite definir funciones que realizaran alguna tarea, calculo,
procedimiento, etc. Que deseemos. Sintaxis:
Donde: DEFUNEs el comando que creara nuestra funcin.
SmboloEs el nombre de la funcin.
Lista de ParmetrosEs la lista de parmetros que necesitar nuestra
funcin.
Cuerpo de la funcinEs la parte donde se definir el que har
nuestra funcin y que valores nos arrojara.
Ejemplo: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: SETQEs el comando que permite guardar un valor o expresin
en una variable.
SmboloEs el nombre de la variable.
ExpresinEs la lista, funcin, valor numrico, cadena de
caracteres, etc., es decir algn objeto que se guardara en la
variable indicada.
Ejercicios:1. Dibujar una lnea, dando valores fijos de los
puntos, es decir los siguientes puntos:Lnea 1
Lnea 2
Lnea 3
Lnea 4
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 es referido con
respecto al punto base y no con respecto al punto base absoluto
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: CIRCLE1ro 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 dgitosVemos 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.