AUTOCAD PROGRAMACIÓN UTO OLISP PROGRAMANDO EN AUT RUTINA DE FLECHA CON COORDENADAS (PARTE FINAL) En el presente artículo finalizaremos la rutina para crear una flecha con la coordenada del punto inicial como texto al final de esta. En este artículo seguiremos analizando algunas funciones que previament previamente e hemos analizado, como SETQ, la cual nos sirve para definir variables. También También analizaremos las siguientes funciones: •
•
•
•
Convertir un número real en una cadena de textos. Concatenar cadenas de caracteres Dibujar vectores en la pantalla Ejecutar comandos de AutoCAD desde la programaci programación ón en AutoLISP
Continuemos con la definición de la rutina. Veamos el código parcial que generamos en el artículo anterior: (defun C:COORD () (setvar “cmdecho” 0) (setq PUNTOCOORD (getpoint “\nSelecione Punto: “)) (setq COORDX (car PUNTOCOORD)) (setq COORDY (cadr PUNTOCOORD)) )
Si nos acompañas por primera vez, puedes realizar el ejercicio partiendo del código anterior. Puedes encontrar el tutorial de dicho código en los artículos anteriores, bajo la sección Recursos de la Comunidad Latinoamericana de Usuarios de Autodesk en Español Es pañol. Continuación del código de la Rutina
Anteriormente habíamos definido algunas variables que nos permiten almacenar los valores X y Y de la coorAnteriormente denada de un punto seleccionado. Estos valores se almacenan en las variables COORDX y y COORDY . Sin embargo, es necesario que sigamos definiendo algunas variables que nos permitirán complementar complementar la rutina. La primera de estas almacenará el texto completo de la coordenada que se colocará junto a la flecha que crearemos. Para ello usaremos el siguiente código: (setq COORDENADA (strcat (rtos COORDX 2 3)”,”(rtos COORDY 2 3)))
Aquí tenemos una serie de funciones anidadas. Explicaremos las funciones desde adentro hacia afuera.
AUTOCAD PROGRAMACIÓN La función RTOS nos permite convertir un número real en una cadena de caracteres o string. En este caso tenemos la variable COORDX que contiene un número real que representa a la coordenada en X del punto seleccionado anteriormente. A fin de poder utilizar este número como texto, es necesario convertirlo de número real a string. El número que sigue a la variable representa el tipo de valor que usaremos en la conversión, en este caso el número 2 representa un valor decimal. El último número representa la precisión de la conversión. En este caso el número 3 indica que usaremos únicamente tres dígitos después del punto decimal. La siguiente función es STRCAT . Esta función concatena distintas valores en una única cadena de texto. En este caso estamos concatenando el valor de la coordenada X, estamos colocando de forma manual una coma (Al poner cualquier caracter o leyenda encerrada en comillas, el sistema lo interpreta de forma literal) y por último, colocamos el valor de la coordenada Y. El resultado es algo como lo siguiente: (Los números son únicamente representativos)
12.345,67.890
Por último, estamos almacenando este resultado en la variable COORDENADA mediante la función SETQ que hemos analizado anteriormente. Posteriormente usaremos esta variable para colocar el texto en la flecha. Capturar los puntos adicionales de la flecha El siguiente paso consiste en capturar los puntos adicionales que necesitamos para dar forma a la flecha que deseamos formar. Estos los capturaremos del mismo modo como definimos el punto inicial, como se puede ver a continuación. (defun C:COORD () (setvar “cmdecho” 0) (setq PUNTOCOORD (getpoint “\nSeleccione Punto: “)) (setq COORDX (car PUNTOCOORD)) (setq COORDY (cadr PUNTOCOORD)) (setq COORDENADA (strcat (rtos COORDX 2 3)”, “(rtos COORDY 2 3))) (setq PUNTO2 (getpoint “\nSeleccione Punto: “)) (grdraw PUNTOCOORD PUNTO2 1 1) (setq PUNTO3 (getpoint “\nSeleccione Punto: “)) (grdraw PUNTO2 PUNTO3 1 1)
Mediante la función GETPOINT que analizamos en el artículo anterior capturamos en variables ( PUNTO2 y PUNTO3) los dos puntos restantes que darán forma a nuestra flecha o leader . Sin embargo, en este caso además estaremos dibujando un vector entre los puntos especificados, de forma que veamos en la pantalla una vista previa del resultado final.
AUTOCAD PROGRAMACIÓN Esto lo hacemos mediante la función GRDRAW. Esta dibuja vectores virtuales en la pantalla entre dos puntos especificados. Esto nos permiten dar seguimiento a un trazo que estamos haciendo mediante puntos. Si bien, esta función no es indispensable para nuestra rutina, sí nos aporta una vista previa de lo que estamos haciendo en el gráfico. Para usar esta función debemos de especificar el punto de origen del vector, seguido del punto final. El número siguiente representa el color del vector (en este caso 1, Rojo) y el último número representa el tipo de presentación visual que tendrá el vector en la pantalla (en este caso 1, Dashed) La función se repite con el PUNTO3. Primero especificamos la variable que almacenará el punto seleccionado y posteriormente creamos el vector desde el PUNTO2 hasta el PUNTO3.
Ejecutar un comando de AutoCAD mediante AutoLISP
Ha llegado el momento de utilizar todas las variables que hemos definido mediante comandos nativos de AutoCAD que llamaremos a través de las programación. Esto es bastante sencillo y se realiza del mismo modo como lo haríamos desde AutoCAD. Veamos el código a continuación: (defun C:COORD () (setvar “cmdecho” 0) (setq PUNTOCOORD (getpoint “\nSeleccione Punto: “)) (setq COORDX (car PUNTOCOORD)) (setq COORDY (cadr PUNTOCOORD)) (setq COORDENADA (strcat (rtos COORDX 2 3)”, “(rtos COORDY 2 3))) (setq PUNTO2 (getpoint “\nSeleccione Punto: “)) (grdraw PUNTOCOORD PUNTO2 1 1) (setq PUNTO3 (getpoint “\nSeleccione Punto: “)) (grdraw PUNTO2 PUNTO3 1 1) (command “leader” PUNTOCOORD PUNTO2 PUNTO3 “” COORDENADA “” ) (command “redraw”)
Para llamar un comando de AutoCAD desde AutoLISP debemos de usar la función COMMAND y escribir el comando deseado entre comillas. En este caso estamos usando dos comandos: LEADER y REDRAW El comando LEADER nos permite crear una flecha en el dibujo al proporcionar tres puntos en la pantalla. Además, coloca un texto en el punto final de la flecha. Nosotros queremos que se cree la flecha mediante los puntos que previamente definimos y que el texto especificado sea la coordenada del primer punto, que equivaldría a la cabeza de la flecha.
AUTOCAD PROGRAMACIÓN En este caso, justo después de especificar que usaremos el comando LEADER colocamos las variables que contienen los puntos que previamente definimos, en el orden adecuado, es decir, primero PUNTOCOORD, luego PUNTO2 y por último PUNTO3. Ahora podemos notar en el código que hemos especificado dos comillas seguidas después de la última variable. Esto, bajo la función COMMAND equivale a presionar la tecla ENTER. Al enviar esta instrucción, le indicamos al sistema que no especifique un width o espesor al texto que estamos a punto de definir. (En otros artículos podremos ver cómo complementar aun mas esta rutina) Una vez que le hemos indicado al comando LEADER con qué puntos construirá la flecha, habrá que especificar el texto que deseamos colocar en la cola de la misma. Para ello estamos usando la variable COORDENADA, la cual previamente definimos y contiene el texto concatenado de la coordenada del punto especificado. Por último, cerramos con otro ENTER para indicar al comando que hemos terminado. El otro comando que estamos usando es REDRAW, el cual es mucho mas sencillo, ya que no requiere ninguna opción de parte del usuario. Este comando lo usamos únicamente para refrescar la pantalla gráfica y eliminar los vectores que creamos en esta. Como para estas alturas ya estará dibujada nuestra flecha, no serán necesarios estos vectores. Resultado Final
Por último, no nos olvidemos de cerrar el paréntesis final que finaliza la función DEFUN, que fué con la que iniciamos la programación. Habrá que guardar el archivo y cargarlo desde AutoCAD para probarlo. Al teclear en la línea de comandos el comando COORD que hemos definido, el sistema nos pedirá que especifiquemos los tres puntos que conforman nuestra flecha, y al especificar el tercero veremos cómo se crea de forma automática una flecha con las coordenadas del primer punto.
Esto permitirá el especificar las coordenadas de distintos puntos con suma rapidez y con total precisión, ahorrando el trabajo manual de tener que escribir cada coordenada a mano, con los errores que eso conlleva.
AUTOCAD PROGRAMACIÓN Nuestra rutina está terminada y es funcional. Sin embargo, hay muchas mejoras que podemos hacer, como especificar el nivel de precisión de las coordenadas, el tamaño del texto, el color de la flecha, entre otros. Esto lo iremos viendo en el futuro de forma gradual. Por el momento, te invito a que utilices las funciones que analizamos a lo largo de este tutorial en tus propias rutinas. No pierdes nada arriesgándote y experimentando, probando distintos valores y creando tus propios comandos en AutoCAD. Con toda confianza pueden enviar sus dudas o comentarios a
[email protected] __ Natán Villarreal Colaborador de la Comunidad Latinoamericana de Usuarios de Autodesk en Español.
Resumen
Nombre del comando: COORD Codigo de la rutina:
(defun C:COORD () (setvar “cmdecho” 0) (setq PUNTOCOORD (getpoint “\nSeleccione Punto: “)) (setq COORDX (car PUNTOCOORD)) (setq COORDY (cadr PUNTOCOORD)) (setq COORDENADA (strcat (rtos COORDX 2 3)”, “(rtos COORDY 2 3))) (setq PUNTO2 (getpoint “\nSeleccione Punto: “)) (grdraw PUNTOCOORD PUNTO2 1 1) (setq PUNTO3 (getpoint “\nSeleccione Punto: “)) (grdraw PUNTO2 PUNTO3 1 1) (command “leader” PUNTOCOORD PUNTO2 PUNTO3 “” COORDENADA “” ) (command “redraw”) (princ) )
Funciones de AutoLISP usadas:
DEFUN, SETVAR, SETQ, GETPOINT, CAR, CADR, STRCAT, RTOS, GRDRAW, COMMAND, PRINC