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:

  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.

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

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

  1. (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:

  1. (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. )

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