Programas en AutoLISP

10
Aprendiendo a programas en AutoLISP. ¿Cómo es la sintaxis de programación en el AutoLISP? En el AutoLISP se trabaja con listas, es decir una lista es un objeto encerrado siempre entre paréntesis 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, número, etc. Siempre deben estar encerrados entre paréntesis los cuales formaran listas. ¿Cómo funciona o Cómo evalúa un programa en AutoLISP? En el AutoLISP siempre se evalúa todo lo que está dentro de un paréntesis: (Lo que evaluará) Y si se tiene varios paréntesis siempre habrá un paréntesis principal que contenga a todos los demás paréntesis: Comandos Básicos 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 función. Símbolo Es el nombre de la función. Lista de Parámetr Es la lista de parámetros que necesitará nuestra función.

description

debido a que en este campo hay poco material en este pequeño manual se trata de aportar con un granito mas

Transcript of Programas en AutoLISP

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.