2.3.4.4. Función LOGAND

Para LOGAND transcribimos la explicación de Jon Fleming en el mismo hilo de discusión donde fuéexpuesta la explicación anterior de Reini Urban:

(logand 13 22) es el AND lógico de [8 + 4 + 1] con [16 + 4 + 2] o, escribiendo losnúmeros en binario, de 00001101 con 00010110.

Escribiendo los números uno sobre el otro, podemos entonces escribirla respuesta en binario de inmediato, escribiendo un 1 bajo dosnúmeros uno y un 0 en cualquier otro lugar:

 
13 = 00001101
22 = 00010110
13 y 22 = 00000100

es decir, 4 en notación decimal. Por lo tanto, (logand 13 22) devuelve 4. El AND lógico se suele utilizar como filtro.Uno de los números que definimos contendrá un 1 en surepresentación binaria dondequiera que deseamos que un posible 1 en un número desconocido pase por el filtro. Esto se debe a que unentero es un lugar muy eficiente para guardar varios valores lógicosverdadero/falso relacionados como unos y ceros en posiciones definidas en larepresentación binaria de un entero.

Un ejemplo perfecto lo constituye la variable de sistema OSMODE.¿Queremos saber si la referencia a objeto INTERSECCIÓN se encuentraactiva? Nuestra referencia de comandos nos dice que la presencia de 32en el valor de OSMODE indica la referencia INTERSECCIÓN. Comosólo nos interesa la referencia INTERSECCIÓN, escribimos larepresentación binaria de OSMODE con "x" en las posiciones queno interesa comprobar: El valor de OSMODE podría ser:

   xxxxxx1xxxxx 
o: xxxxxx0xxxxx

Así que si pasamos a (logand ...) cualquiera de esos valorescon 0000 0010 0000 que es 32 en base 10, obtenemos,ya sea 32 (si está activa la referencia INTERSECCIÓN) o 0 (cero) si no lo está. En otras palabras:

(if (logand 32 (getvar "OSMODE"))
(prompt "\nLa referencia INTERSECCIÓN está ACTIVA")
(prompt "\nLa referencia INTERSECCIÓN NO está ACTIVA")
)

Utilizando las funciones LSH, ~ y LOGAND pudiéramos desarrollarfunciones para la conversión de decimales en binarios y viceversa,útiles al menos para comprender mejor la operación de estasfunciones binarias. Este será el tema de la próximasección.

Los ejemplos de LOGAND en los programas LISP que vienen con AutoCADsí son numerosos. Podemos enumerar para la versión 14:BMAKE.LSP,DDATTDEF.LSP,DDGRIPS.LSP,ATTREDEF.LSP,DDCHPROP.LSP,DDCOLOR.LSP,DDINSERT.LSP,DDMODIFY.LSP,DDPTYPE.LSP,DDSELECT.LSP,DDUNITS.LSP,DDVIEW.LSP, 3D.LSP, EDGE.LSP, MVSETUP.LSP,BLK_LST.LSP,COUNT.LSP, LMAN.LSP,TREXBLK.LSP,CLIPIT.LSP,EXCHPROP.LSP,EXTRIM.LSP,XPLODE.LSP,CURSDLG.LSP,SQLEDDLG.LSP.
Mucchos de estos programas ya aparecían en la versión 13. Paraindicar alguno de aquella versión que ha desaparecido desde entoncespodemos mencionar DDOSNAP.LSP.Enumerando sólo algunos de la versión 12 tendríamos:CHELEV.LSP,MAKE2D.LSP,MAKE3D.LSP,PTEXT.LSP, CL.LSP y PROJECT.LSP, y de la versión 10TABLES.LSP, lo que nos puede dar una ideade lo útil que resulta esta función.


* De: Jon Fleming <jonf@fleming-group.com>
Newsgroup: autodesk.autocad.customization
Asunto: Logand, logior, lsh, etc...
Fecha: Jueves, 26 Feb 1998 20:35:37 EST
Organización: The Fleming Group
Traducción del inglés: Reinaldo Togores