En este tema aprenderás de una manera práctica que funciones de AutoLisp debes de usar para seleccionar una entidad y efectuar acciones con ella.
Se conoce como «entidades gráficas» a aquellos objetos de dibujo que puedes «ver» en tu programa de CAD, como, por ejemplo: líneas, arcos, círculos, textos, etc. Estas entidades difieren de las entidades no gráficas, estas entidades no gráficas son, por ejemplo: las capas, los estilos de líneas, estilos de texto, estilos de dimensión, etc.
Comencemos con la primera función con un ejemplo:
Escribe el siguiente código en un archivo de texto y guárdalo como «seleccion.lsp«:
(defun c:s1() (setvar "cmdecho" 0) (setq ent (entlast)) (command "change" ent "" "p" "c" "6" "") (setvar "cmdecho" 1) (princ) )
Luego carga este archivo con el comando appload y antes de ejecutar este nuevo comando (s1) dibuja un círculo, inmediatamente ejecuta el nuevo comando escribiendo «s1» en la línea de comandos y presionando la tecla Enter. Pudiste observar lo que sucedió, el círculo que dibujaste cambio de color a magenta.
Claro, vamos a explicar de manera detallada que hace esta rutina simple.
¿Qué hace esta rutina de ejemplo?
Esta rutina cambia el color a azul a la última entidad dibujada, en este caso fue un círculo, pero podría ser cualquier entidad.
Explicación línea a línea:
(setvar "cmdecho" 0)
Usamos la función SETVAR para establecer un valor a una variable propia de AutoCAD mediante AutoLisp.
AutoCAD tiene muchas variables que almacenan su forma de trabajar, estas variables son propias del programa, no son creadas por nosotros, en este ejemplo «cmdecho» es una variable que almacena un valor de si se muestran (1) o no (0) las solicitudes y entradas (ecos de los comandos) que se reproducen durante la ejecución de un comando de AutoCAD dentro de una rutina.
En este caso, al definirle un valor de 0 a la variable «cmdecho» estamos evitando que se vean las solicitudes del comando, es decir que el usuario que ejecuta esta rutina no se percata si estamos usando un comando de AutoCAD en nuestra rutina.
¿Mucha teoría?, cuando se amerita es necesaria un poco de teoría, pero de todas maneras se puede encontrar mas información al respecto en la web.
Continuamos con la segunda línea de código:
(setq ent (entlast))
La función ENTLAST, en esta línea de código, tiene por finalidad seleccionar la ultima entidad creada, esta entidad seleccionada es almacenada en la variable ent para su posterior uso. Como puedes observar, en ningún momento hemos solicitado al usuario que seleccione el círculo que ha creado, entlast lo hace automáticamente.
(command "change" ent "" "p" "c" "6" "")
Aquí nuevamente empleamos la función command para invocar al comando «change» (con comillas como el ejemplo) de AutoCAD, este comando necesita que se seleccione la entidad(es) a modificar, así que le indicamos que seleccione la entidad que está almacenada dentro de la variable ent, como no deseamos seleccionar mas entidades, digitamos las dos comillas («») para indicar que ya hemos finalizado la selección.
Seguimos brindando mas datos a las solicitudes del comando «change» y digitamos «p» entre comillas, para indicar que deseamos ingresar a la opción «Properties» del comando, luego ingresamos «c» para indicar que deseamos elegir la opción «Color» e indicamos el color magenta ingresando el numero «6» y para finalizar el comando y la función command con el cambio de color, digitamos las doble comillas («») o Enter.
(setvar "cmdecho" 1)
Nuevamente usamos la aquí la función setvar para devolverle el valor a la variable «cmdecho» a 1.
(princ)
Por ultimo «limpiamos» la ejecución de la rutina con un princ.
¿Que te pareció este pequeño comando?, ¿interesante verdad?, ahora vamos a mejorar la rutina anterior para que solicite al usuario que seleccione un objeto para realizar también diferentes acciones con el, en este ejemplo cambiarle el color.
Escribe lo siguiente en el archivo seleccion.lsp y luego cárgalo en AutoCAD.
(defun c:s2() (setvar "cmdecho" 0) (setq ent (ENTSEL "\nSeleccione una entidad para cambiar el color: ")) (command "change" ent "" "p" "c" "6" "") (setvar "cmdecho" 1) (princ) )
A continuación examinamos el código:
Aquí solo vamos a detallar esta línea de código, porque como puedes ver, es la única que cambia con respecto al ejemplo anterior.
En este caso la entidad que vamos a modificar no va a ser la ultima creada, si no cualquiera que esté dibujada y le vamos a otorgar esa elección al usuario que use la rutina, para ello usamos la función ENTSEL.
Esta función permite seleccionar una entidad y devuelve como datos; el nombre de la entidad seleccionada y además también la coordenada del punto de designación sobre la entidad. Adicionalmente se puede agregar un mensaje que permita al usuario de la rutina saber que debe de seleccionar una entidad y para que lo va a hacer.
La definición del objeto seleccionado se almacena en la variable ent para modificar su color posteriormente.
Funciones que se han visto en este tema: