Tema 2. Primeros pasos:

Autor: Robierzo

Como ya adelantó hace unos días nuestro amigo Gabriel, empezaremos hablando de algunos caracteres especiales básicos en Autolisp, no sin antes aclarar que la mayoría de comentarios y notaciones empleadas a partir de ahora han sido tomadas de los libros cuya bibliografía paso a detallar, y que recomiendo le echéis un vistazo:
Autor: Jose Antonio Tajadura y Javier López Tit: Autolisp 12,13,14 Edit: Mc Graw Hill
Autor:Reinaldo togores y César Otero Tit: Programación en Autocad con Visual Lisp Ed.: Mc Graw Hill

1º Punto y coma: ; Sirve para añadir comentarios o aclaraciones que nos ayuden a entender mejor nuestra rutina. Todo lo que vaya detrás del punto y coma, en realidad podríamos borrarlo y el programa no sufriría alteraciones. Así que este carácter sólo lo usaremos para esto.
2º Paréntesis: ( ) Debe haber el mismo número de paréntesis de apertura que de cierre. De lo contrario se producirá un error. Los utilizaremos para preceder cualquier comando de Autolisp y para dar fin a dicho comando.
3º Comillas: " " Se utilizan para encerrar expresiones de texto que queremos que aparezcan en la pantalla, ya sea en la línea de comando o en una ventana. Todo lo que esté entre comillas será considerado como una cadena de texto, incluso los paréntesis, comas, punto y comas.... Como los paréntesis, debe haber un número par de comillas.
4º Punto: . Se usa como punto decimal.
5º Apóstrofo: ‘ Equivale al comando (QUOTE). Devuelve el literal de la expresión.
6º Contrabarra: \ Dentro de una cadena de texto podemos incluir una contrabarra seguida de uno de los siguientes caracteres:
\n: Retorno de carro, nueva línea
\r: Return
\t: tabulador
Es decir. Si escribimos: (GETPOINT pt "\nSeñala un punto") , cuando Autolisp evalúe esta expresión, antes de escribir "Señala un punto" en la línea de comando, hará un salto de carro para que no aparezcan dos o más expresiones distintas, unas a continuación de otras.
7º Cierre admiración: ! Sirve para extraer desde la línea de comandos, el valor de una variable.
Ej.: (SETQ radio 5.639)
Si tecleamos !radio en la línea de comandos nos aparecerá 5.639

ACLARACIONES
*Autolisp no distingue entre mayúsculas y minúsculas.
*Es conveniente usar el nombre de las órdenes de Autocad en inglés. Si trabajamos con Autocad español y queremos saber el nombre en inglés tecleamos en la línea de comando:
(GETCNAME "orden en catellano")
Ej.: (GETCNAME “texto”) y aparece "_text"
*Autolisp siempre trabaja en radianes
*PI es el número 3.1415926....., por lo que ninguna variable podrá llamarse PI.
*T es el símbolo de True, cierto, por lo que ninguna variable podrá llamarse T.
*nil es el símbolo de falso, por lo que ninguna variable podrá llamarse nil. Siempre aparecerá en minúsculas, nunca NIL.


(DEFUN <simb> <arg>) DEFINIR FUNCIONES
Las distintas funciones que forman una rutina se definen mediante el comando
(DEFUN <simb> <arg>)
Dentro de una rutina podrá haber decenas de funciones. Lo que suele hacerse es crear una función principal, desde la cual se irán llamando al resto de funciones secundarias. Es como si tuviésemos varias rutinas dentro de otras.
<simb> es el nombre de nuestra función
<arg> es el nombre de las variables que vamos a tener dentro de esta función
Importante: Las variables pueden ser locales o globales. Esto quiere decir que:
Si son globales, podremos seguir utilizándolas fuera de esta función.
Si son locales, sólo tendrán valor dentro de esta función.
Tanto unas como otras van entre paréntesis. Las locales van precedidas de una barra /
Si ponemos un paréntesis sin nada (), daremos por supuesto que todas son globales.
Hay que tener en cuenta que en rutinas muy largas, donde existen muchas variables, y donde utilizamos otras rutinas, cuantas más variables globales tengamos, más lentos pueden ser los cálculos.
Una ver gargada una rutina, para ejecutarla en otras ocasiones dentro de la misma sesión de Autocad sin tener que volver a cargarla, debemos añadir c: delante del nombre de la función, para que, tecleando dicho nombre en la línea de comando ya arranque de nuevo.

(SETQ <simb1> <expr1> <simb2> <expr2>.....) ATRIBUIR VALORES

Pues eso, sirve para atribuir valores a una variable.

Ej: (SETQ radio 5 x 155.36 y 785.961 nombre "Soy un monstruo")
Si tecleamos esto en la línea de comandos y luego vamos tecleando sucesivamente:
!radio aparece 5
!x aparece 155.36
!y aparece 785.961
!nombre aparece "Soy un monstruo"

(PROMPT <mensaje>) ESCRIBE MENSAJE
Escribe un mensaje en la línea de comandos

(TERPRI) SALTA A UNA NUEVA LINEA

(GETPOINT <punto> <mensaje>) INTRODUCE UN PUNTOBien mediante señalamiento en pantalla, o bien mediante teclado.
Ej.:
(SETQ pt (GETPOINT "\nIntroduce un punto:"))
Después de introducir un punto, sus coordenadas se almacenan en la variable pt.

(COMMAND <arg>) EJECUTA UNA ORDEN DE AUTOCAD
Decir antes de nada que es recomendable utilizar el nombre de la orden en inglés, precedido de un guión bajo. Así, independientemente de la versión de Autocad y del idioma, salvo en casos excepcionales, nuestra rutina funcionará siempre.
Ej.:
(COMMAND "_line" pt '(150 120) "")
En este caso dibuja una línea desde el punto pt, cuyas coordenadas ya habrán sido determinadas antes, hasta el punto de coordenadas x=150 e y=120.
El nombre de la orden debe ir siempre entre comillas, así como cualquier opción propia de la orden, como por ejemplo el "enter" final.


Ejemplo general:
Copiar esta rutina en el editor de Visual Lisp.

Código:
;;;;;;;;;;;;Rutina para dibujar tres líneas desde un punto.
(DEFUN c:dib_lineas ( / pt1 pt2 pt3 pt4)
;(DEFUN c:dib_lineas ()
    (PROMPT "\nEste programa dibuja tres línas desde un punto")
    (SETQ pt1 (GETPOINT "\nPrimer punto: "))
    (SETQ pt2 (GETPOINT "\nSegundo punto: "))
    (COMMAND "_line" pt1 pt2 "")
    (SETQ pt3 (GETPOINT "\nTercer punto: "))
    (COMMAND "_line" pt1 pt3 "")
    (SETQ pt4 (GETPOINT "\nCuarto punto: "))
    (COMMAND "_line" pt1 pt4 "")
)

Como observaréis, hemos creado una función llamada dib_lineas, a la que hemos añadido el prefijo c: para poder ejecutarla cuando queramos desde la línea de comandos, una vez la hayamos cargado, como ya se explicó en el TEMA 1.
Esta función contiene 4 variables que le hemos dado carácter local, con lo que, una vez termine, se perderán los valores de sus variables. Sin embargo, si cambias el punto y coma de la segunda línea ;(DEFUN c:dib_lineas () y lo pasáis a la primera línea (DEFUN c:dib_lineas ( / pt1 pt2 pt3 pt4), la rutina queda exactamente igual, pero ahora las variables son globales y podemos utilizarlas en otro momento o conocer su valor tecleando en la línea de comando: !pt1, !pt2.....
Haced la prueba de las dos maneras.
También observaréis que hemos utilizado \n para salto de línea. Podéis eliminarlo y ver lo que pasa.
Un detalle importante. A mi me gusta poner el abre paréntesis y el cierra paréntesis en la misma línea. Pero si se hace muy largo, como es el caso del cierra paréntesis de una función, me gusta ponerlo en la línea vertical del que abre.

Y con esto doy por terminada esta lección. Como siempre, si alguien desea añadir o rectificar algo, pues ya sabe.


Powered by The 3DG CO.

sugerencias+quienes somos+contacta con nosotros