Vamos avanzando, la función COND te permite establecer una serie de condiciones, especificando acciones de acuerdo con si se cumplen las condiciones, se diferencia de la función anterior «IF» porque en IF sólo es posible establecer una sola condición, mientras que con la función COND las condiciones son ilimitadas.
Normalmente se pueden establecer múltiples condiciones y acciones para cada condición, como opciones se tenga para el usuario como lo muestra el gráfico.
Para que lo puedas ver mejor, en el ejemplo de a continuación vamos a emplear la función COND para brindar una serie de opciones de las cuales el usuario debe de elegir sólo una.
La rutina de ejemplo empieza con la función INITGET, esta función permite establecer cuáles son las únicas opciones que el usuario podrá elegir o ingresar, no podrá elegir otra, a estas opciones se les antecede el bit 1 (argumento de esta función) que establece que el usuario tampoco podrá indicar un Enter como respuesta.
Veamos el desarrollo con este ejemplo:
(defun c:cn2() (INITGET 1 "Izquierda Derecha Arriba aBajo") (setq Origen (GETKWORD "Indique origen de tabla [Izquierda/Derecha/Arriba/aBajo]:")) (COND ((= Origen "Izquierda") (princ "\nCódigo origen de tabla lado izquierda.")) ((= Origen "Derecha") (princ "\nCódigo origen de tabla lado derecho.")) ((= Origen "Arriba") (princ "\nCódigo origen de tabla lado arriba.")) ((= Origen "aBajo") (princ "\nCódigo origen de tabla lado abajo.")) ) (princ) )
Escribe este código en un archivo y guárdalo como cond.lsp, ve a AutoCAD y cárgalo vía el comando “Appload”, ejecuta el comando cn2 y observa lo solicitado.
¿Qué te parece?, ¿tu rutina se parece a otras que usas verdad?, como lo habrás podido observar el comando “cn2” solicita que elijas una de cuatro opciones posibles, cada opción esta resaltada por una letra en mayúscula que indica cual es la letra para poder acceder a esa opción.
A continuación la explicación de rigor de este código línea por línea:
(INITGET 1 "Izquierda Derecha Arriba aBajo")
Como ya te expliqué líneas arriba, la función INITGET, es la que establece que opciones son posibles de elegir de las mostradas con la función getkword, a initget se le puede establecer una especie de “condición” de ingreso de datos mediante “bits”, en este caso, el bit 1 indica que el usuario no puede ingresar un Enter como respuesta.
Puedes ver aquí todos los «bits» que puedes usar en INITGET y para que sirve cada uno.
(setq Origen (GETKWORD "Indique origen de tabla [Izquierda/Derecha/Arriba/aBajo]:"))
Bien, en esta segunda línea de código podemos observar a la función GETKWORD en acción (2), ésta función es la encargada “mostrar” al usuario las opciones permitidas por initget.
Como puedes observar, las opciones ofrecidas al usuario solo son textos es decir, que podrían ser cualquier texto, por ejemplo, ¿podrías poner “Te gustan las manzanas? [Sí/No/Mucho/Poco]:” pero, aunque indicaras estas opciones, getkword no va a aceptar ninguna de ellas porque está condicionada a los textos que están establecidos con la función initget (1).
La opción elegida, ingresada por el usuario y aceptada por initget, es almacenada en la variable Origen con la ayuda de la función setq.
OK vamos bien!, seguimos evaluando el código y avanzando.
(COND
((= Origen "Izquierda") (princ "\nCódigo origen de tabla lado izquierda."))
((= Origen "Derecha") (princ "\nCódigo origen de tabla lado derecho."))
((= Origen "Arriba") (princ "\nCódigo origen de tabla lado arriba."))
((= Origen "aBajo") (princ "\nCódigo origen de tabla lado abajo."))
)
Aquí por fin ingresa a tallar la función COND (3) y tal como lo ves, usamos cond para evaluar mediante la función = (igual), cual es el valor contiene la variable Origen y si el valor es igual (=) a alguna de las opciones brindadas, entonces se ejecuta el código deseado (con COND no es necesario el uso de PROGN para escribir varias líneas de código por cada acción), en este caso mostramos un mensaje en la línea de comandos de AutoCAD, así de sencillo.
Sólo podrás ingresar «I», «i», «D», «d», «A», «a», «B», «b» o en todo caso las palabras completas en mayúsculas o minúsculas «izquierda», «derecha», «arriba», «abajo», pero si intentas ingresar cualquier otro caracter o palabra, será denegada.
¿Qué te parecieron estos ejemplos?, ¿te quedó claro el uso de la función COND?, si no fue así, me lo haces saber en los comentarios de este tema.
Funciones que se han visto en este tema:
Saludos
Por mucho tiempo creí que «Cond» era una de esas funciones que están de mas ya que existe «IF». Pero nos has demostrado que en algunos casos puede ser de mucha utilidad.
Agradecido por la explicación muy detallada. Estoy seguro que será de utilidad. Felicitaciones.