Establecer una cota (elevación z) en un eje de una sección transversal de terreno 2D (coordenada Y):

Abre un archivo nuevo en AutoCAD y dibuja una cruz (en cualquier lugar y de cualquier dimensión), luego escribe las siguientes líneas de código una por una en la “Línea de Comandos de AutoCAD” (excepto los comentarios), al final lo que hará la rutina será que la intersección de la cruz deberá de tener un valor en la coordenada Y de 25.6 (m) en el plano 2D, si este valor representara una cota (altura de terreno) sería una elevación.

1: Escribe las siguientes líneas de código, una por una en la línea de comandos de AutoCAD:

;Indica un punto en la intersección de la cruz e ingresa luego el número 25.6.
(setq pos (getpoint "\nIndique el punto a establecer la cota: "))
(setq cota (getreal "\nIngrese el valor del punto de cota a establecer : "))
 
;Efectuamos operaciones, construimos una lista y almacenamos el resultado.
(setq PuntoEstablecer (list 0 (- 0 cota)))
 
; Ejecutamos el comando UCS 2 veces con los valores obtenidos y calculados.
(command "_ucs" "_m" pos)
(command "_ucs" "_m" PuntoEstablecer)
;Mostramos un mensaje para informar de que todo salió bien
(princ (strcat "\nCota establecida en el punto indicado: " (rtos cota 2 3)))

2: Explicación de este ejercicio:

¿Te pareció un poco largo el código?, puede ser, pero este código ya se va pareciendo mucho más a las rutinas que elaborarás a partir de ahora, tranquilo lo analizaremos juntos.

¿Qué hace esta rutina?

Esta rutina sirve para establecer una determinada cota (coordenada “Y” del plano) en un punto indicado, muy útil por ejemplo si deseas verificar las cotas (elevaciones en un plano) de una sección transversal de un terreno (2D), de alguna estructura, corte de una vivienda, etc.

Explicación línea a línea:

(setq pos (getpoint "\nIndique el punto a establecer la cota: "))
(setq cota (getreal "\nIngrese el valor del punto de cota a establecer : "))

¿Recuerdas la rutina anterior anterior a esta que practicamos?, estas 2 líneas de código nuevamente hacen exactamente lo mismo, la primera (1) solicita mediante la función getpoint que el usuario indique un punto (para obtener una coordenada) y la segunda línea de código (2) mediante getreal que se ingrese un valor con decimales (si se desea, si no tambien se puede ingresar un valor entero), el punto (coordenada) indicado por el usuario se almacena en la variable pos y el valor ingresado en la variable cota.

Continuamos con la explicación de la tercera (3) línea de código:

(setq PuntoEstablecer (list 0 (- 0 cota)))

En esta tercera línea de código vamos a construir una coordenada (sólo X e Y) y lo haremos con la función list, que como ya sabemos nos permite construir listas, esta vez la necesitamos para construir una nueva coordenada.

Lo que deseamos aquí es construir un punto en el cual la coordenada “X” tenga como valor 0 (para que sea un eje), pero que la coordenada “Y” tenga como coordenada el valor que el usuario a ingresado (cota). Por ejemplo, si el usuario ingresó el 5 como valor de cota a establecer en el eje, el punto que indicó tiene que tener ese valor en la coordenada “Y” al verificarlo con el comando “ID“.

Hemos construido la coordenada inicial con list y la hemos establecido en la variable PuntoEstablecer con la función setq.

Ahora continuamos con el análisis de las siguientes líneas de código:

(command "_ucs" "_m" pos)

Aquí usamos la función command para invocar la ejecución del comando “UCS” para mover el origen de coordenadas (del 0,0,0 por defecto) al punto indicado por el usuario (intersección de la cruz), ese punto ahora tendrá la coordenada 0,0,0 (origen de coordenadas).

(command "_ucs" "_m" PuntoEstablecer)

Nuevamente usamos la función command para invocar al comando UCS para que mueva el origen de coordenadas, esta vez le indicaremos que el origen de coordenadas (0,0,0) se encuentre en la siguiente ubicación:

En la coordenada X en la misma posición (0) e Y se encuentre por debajo del valor ingresado por el usuario, eso se logra restando ese valor al 0 (- 0 25.6) para obtener un valor negativo, el par odenado resultante sería antonces así:

(0, -25.6)

Este proceso se graficaría de la siguiente manera, si por ejemplo se ingresó el valor de 20.6 indicado al inicio de este ejercicio:

Ahora continuamos con la sexta (6) línea de código:

(princ (strcat "\nCota establecida en el punto indicado: " (rtos cota 2 3)))

En esta última línea, como todo salió bien, mostramos un mensaje en la “Línea de comandos de AutoCAD” con la función PRINC. La función princ solo necesita un argumento, que es el mensaje, por ejemplo: (princ “Hola”).

En el caso de la línea (6), el mensaje que muestra princ es una combinación de texto y el valor de una variable que puede ser cualquier valor y por lo tanto necesitamos concatenar esos dos datos, el texto y la variable.

Para lograr esto usaremos la función STRCAT que nos permite concatenar cadenas de texto o variables que contengan un valor del tipo texto (string), el detalle es que la variable cota no es una cadena de texto, es una variable que almacena un valor real (numérico),en este caso entonces primero necesitarás convertir este valor real en un valor de texto (string) y para ayudarte, lo harás con la función RTOS.

La función rtos necesita 3 argumentos, primero necesita el valor real (o entero) a convertir (en este caso es la variable cota), el segundo argumento es indicarle el tipo de unidades de resultado, aquí el numero 2 indica que se tratará de unidades “decimales” y el tercer argumento es indicar cuantos decimales tendrá el valor convertido a texto, en este caso se ha indicado que tendrá 3 decimales.

El valor convertido en uno de tipo texto se “une” al texto “\nCota establecida en el punto indicado: “ con ayuda de strcat y pasa a ser una sola cadena de texto que es mostrada con la función princ.

Funciones que se han visto en este tema:

  1. setq
  2. getpoint
  3. getreal
  4. car
  5. cadr
  6. list
  7. +
  8. /
  9. command
  10. princ
  11. strcat
  12. rtos

Hasta aquí hemos finalizado con la práctica de este segundo ejercicio, ¿cómo vas?, ¿listo para lo siguiente?