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.
|