Está en la página 1de 4

5/7/22, 10:53 Aprende a programar en AutoLisp Post #5: Escritura de funciones con variables | DevCADLisp

Aprende a programar en AutoLisp Post


#5: Escritura de funciones con variables

Ahora ya no escribiremos el código de una rutina directamente en la Línea de


comandos de AutoCAD porque es cada vez mas extenso, consigue un editor de
texto (no Word ni Worpad), por ejemplo “Crimson Editor” o Bloc de Notas
(básico) y escribe lo siguiente:

1. (defun c:cr()

2. (setq PC (getpoint "\nIndica el punto centro del círculo: "))

3. (setq DIAM (getreal "\nIngresa el radio del nuevo círculo: "))

4. (command "_circle" PC DIAM)

5. (princ)

6. )

Ahora guarda este archivo como “círculo.lsp”, luego en AutoCAD usa el comando
“appload” para ubicar este archivo, cargar este código y almacenarlo en su
memoria.

Muy bien, ahora en la línea de comandos de AutoCAD escribe lo siguiente “cr”,


que es el nombre del comando que se ha establecido en el código de la rutina.

Observarás que este nuevo comando te solicita primero los datos necesarios
antes de dibujar el círculo, analizaremos juntos el código de este comando:
https://www.devcadlisp.com/autolispdev/aprende-a-programar-en-autolisp-post-5-escritura-de-funciones-con-variables/ 1/4
5/7/22, 10:53 Aprende a programar en AutoLisp Post #5: Escritura de funciones con variables | DevCADLisp

1. (defun c:cr()

La función “defun”, permite definir una nueva función de usuario, puede definir
una función para ser llamada mediante un nombre de comando desde AutoCAD
(como este caso) sólo agregando el prefijo “c:” antes del nombre de la función o
solo como bloque de código que puede ser llamado desde otra función.

2. (setq PC (getpoint "\nIndica el punto centro del círculo: "))

En la línea código anterior, tenemos dos funciones una dentro de otra, incluso


podrían ser más, en este caso AutoLisp evalúa las funciones de adentro hacia
afuera, eso quiere decir que en este caso primero evaluará la función getpoint y
luego evaluara la función setq.

Ok, se que necesitas mas explicación y aquí va, la función getpoint está
solicitando al usuario que indique un punto, este punto indicado en pantalla
obtiene coordenadas, que pueden ser cualquiera, ahí termina el trabajo de
getpoint, ahora, para que esas coordenadas obtenidas no queden flotando, las
almacenaremos en una variable, para ello le daremos ese trabajo a la
función setq que sirve para almacenar valores a variables, en este caso las
coordenadas obtenidas se almacenan en la variable PC.

* Si observas el código, algunas líneas de texto empiezan con lo siguiente: “\n”,


esto es un caracter de escape que indica que la línea de texto se escriba en una
nueva línea, similar a dar un Enter.

3. (setq DIAM (getreal "\nIngresa el radio del nuevo círculo: "))

La explicación de esta tercera línea de código es parecida a la anterior, la


función getreal está solicitando al usuario que ingrese un valor real (con
decimales), sabemos que puede ser cualquier valor, ahí termina el trabajo
de getreal, ahora, también almacenaremos ese valor obtenido en una variable
para no perderlo, para ello nuevamente daremos ese trabajo a la función setq
que se encargará de almacenar este valor en la variable DIAM.

A esta altura, te das cuenta que ya tenemos los dos valores que necesita el
comando “circle” para dibujar un círculo, así que vamos a dibujarlo con
AutoLisp con la función command.

https://www.devcadlisp.com/autolispdev/aprende-a-programar-en-autolisp-post-5-escritura-de-funciones-con-variables/ 2/4
5/7/22, 10:53 Aprende a programar en AutoLisp Post #5: Escritura de funciones con variables | DevCADLisp

4. (command "_circle" PC DIAM)

La función command se encargará de ejecutar el comando “_circle”, como


sabemos que el comando “circle” solicita datos para crear el círculo, se los
daremos uno por uno, para la ubicación del círculo le daremos la variable PC y
para el radio la variable DIAM.

* Agregamos el “_” antes del nombre del comando para que éste sea aceptado para
cualquier idioma de AutoCAD, porque si solo invocas al comando “circle” en AutoCAD
en español sin el “-” no lo reconocerá debido a que el comando en AutoCAD en
español es “circulo”.

Eso es todo, con ese código se dibujará el círculo, pero, un momento ¿y la línea
siguiente de código?, bien, la quinta línea que es esta:

5. (princ)

Se encarga de limpiar la finalización de un comando, usualmente para evitar la


palabra “nil” que significa vacío o final.

PRÁCTICA:

Practica ahora escribiendo las siguientes rutinas en tu editor de código favorito


y luego cargas cada una de ellas en AutoCAD. Ejecuta cada una, evalúa las
solicitudes y lo que hace cada una de ellas:

1. Rutina 1:

1. (defun c:no()

2. (setq pno (getpoint "\Indica el punto del nuevo origen del UCS: "))

3. (command "_ucs" pno "")

4. (princ)

5. )

2. Rutina 2:

1. (defun c:texto()

2. (setq pin (getpoint "\Indica el punto de inserción del texto: "))

3. (setq altura (getreal "\Indica la altura del texto: "))

4. (setq texto (getstring t "\Ingresa el texto que desees: "))

5. (command "_text" pin altura "" texto "")

6. (princ)

7. )

https://www.devcadlisp.com/autolispdev/aprende-a-programar-en-autolisp-post-5-escritura-de-funciones-con-variables/ 3/4
5/7/22, 10:53 Aprende a programar en AutoLisp Post #5: Escritura de funciones con variables | DevCADLisp

¿Qué te pareció esta práctica?, ¿me podrías indicar mediante tu comentario que
hace aquí cada comando (el comando “no” y el otro comando “texto”)?

Funciones que se han visto en este tema:

1. defun
2. setq
3. getpoint
4. getreal
5. getstring
6. command
7. princ

ALCANCE DEL SIGUIENTE TEMA:

En el siguiente tema iremos profundizando el uso de las variables para


encontrarle mayor sentido a su uso, podrás observar que de aquí en adelante no
dejarás de usar las variables y operar con ellas.

https://www.devcadlisp.com/autolispdev/aprende-a-programar-en-autolisp-post-5-escritura-de-funciones-con-variables/ 4/4

También podría gustarte