Programas en AutoLISP

Aprendiendo a programas en AutoLISP. ¿Cómo es la sintaxis de programación en el AutoLISP? En el AutoLISP se trabaja con

Views 155 Downloads 72 File size 524KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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 os Cuerpo de la función

Es la lista de parámetros que necesitará nuestra función.



Ejemplo:

Es la parte donde se definirá el que hará nuestra función y que valores nos arrojara.

Realicemos un programa que sume dos números dados:

Entonces el programa anterior define la función suma que sumará dos números a y b devolviéndonos como resultado la suma de estos dos números. Veamos cómo funciona dicha función: Llamando a la función desde la línea 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 función 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 conversión de ángulos en el cuerpo de la función que definimos, así nos arrojara resultados coherentes. Vemos: Llamando a la función desde la línea 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 facilitándonos así la realización de ciertas tareas. Comando SETQ: permite almacenar en una variable algún valor indicado o desarrollado por una función o una expresión, es decir permite almacenar algo dentro de una variable que nosotros indicaremos. Sintaxis:

Donde: 

SETQ



Símbolo



Expresió n

Ejercicios:

Es el comando que permite guardar un valor o expresión en una variable. Es el nombre de la variable. Es la lista, función, valor numérico, cadena de caracteres, etc., es decir algún objeto que se guardara en la variable indicada.

1. Dibujar una línea, dando valores fijos de los puntos, es decir los siguientes puntos: Línea 1

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

Línea 2

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

Línea 3

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

Línea 4

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

Desarrollo: El código necesario para poder dibujar las líneas 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 están en coordenadas absolutas, pero si quisiéramos que los puntos estén referidos con coordenadas relativas con respecto a un punto base nos convendría trabajar de la segunda manera es decir los parámetros 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 línea, pidiendo los puntos mediante GETPOINT Primera opción: (command “line” (getpoint “Primer punto”) (getpoint “segundo punto”) “”) Segunda Opción: (command “line” (setq Pb (getpoint “Primer punto”)) Pb (getpoint Pb “segundo punto”) “”)

3. Dibujar una línea, esperando valores que ingrese el usuario Primera opción: (command "line" (setq Pb (getpoint "primer punto:")) Pb pause "") Segunda opción: (command "line" pause pause "") 4. Dibujar un triángulo cualquiera: Primera Opción (con valores fijos y coordenadas relativas): (command "line" "1,1" "@5,10" "@4,-5" "c") Segunda Opción (con getpoint): (command “line” (setq Pb (getpoint “primer punto:”)) Pb (setq Pb (getpoint Pb “segundo punto: ”)) Pb (getpoint Pb “tercer punto:”) “c”) Tercera opción (con pause): (command “line” pause pause pause “c”) 5. Dibujar un cuadrilátero cualquiera: Primera opción (con valores fijos y coordenadas relativas): (coomand “line” “1,1” “@5,10” “@5,0” “@3,-10” “c”) Segunda opción (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 opción (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 finalización 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 más 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 código: ((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 expresión que queríamos 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 código 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 código Lisp por lo que ya no ejecutara la siguiente expresión pues esta expresión se vuelve un parámetro del comando y evidentemente no reconocerá este parámetro arrojándonos el mensaje ; error: no function definition: nil por lo que se pierde la expresión y volverá a solicitar que se ingrese un parámetro correcto para el comando ejecutado. Explicado esto a la hora de programar un código 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 función que nos permite identificar puntos claves pero cuando interactúa con el LISP muchas veces debido a la precisión del SNAP los dibujos que nosotros queremos que nuestro código 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 código que configure al SNAP y nos permita dibujar sin forzar bueno por el momento decidí apagar el SNAP para dibujar y después de dibujar volver a activar el SNAP investigar más.

Cuando utilices el comando WCMATCH no debes dejar espacios en blanco dentro del filtro es decir por ejemplo si deseas hacer el siguiente código:

En el código anterior al hacer la comparación entre el texto “1.23” y los filtros de comparación la “,” se interpretara en el LISP como el conector lógico “o” es decir el anterior código se puede entender como: “1.23” “# = Solo tiene un digito” o “1.23” “# `.## = Tiene un digito seguido por un punto y luego por dos dígitos más” o “1.23” “`.## = comienza con un punto seguidos por 2 dígitos” 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 código anterior se interpretara como que solo se realizara la comparación con el 1er filtro indicado es decir solo compara con “#” y no evaluara a los demás 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 podría resultar en resultados no esperados por el programador.