2.3.4.5. Función LOGIOR

Más arriba planteábamos que para activar un BIT determinandomediante la suma del valor decimal que devuelve nuestra función (bitposición) era necesario verificar que ese BIT no estuviera ya activo.Esto lo podemos lograr con la función LOGIOR. También para LOGIORrecurriremos a Jon Fleming en su aporte a la mencionadadiscusión en autodesk.autocad.customization:

(LOGIOR ...) trabaja exactamente de la misma manera,excepto de que escribimos un 1 en la posición donde uno de losvalores o ambos valores de los argumentos que se le pasan tienen un 1,y ponemos un 0 donde ambos argumentos deben tener un 0. Estoes útil para combinar números. ¿Quiere asegurarse de que lareferencia a objeto INTERSECCIÓN está activa sin afectar a otrosmodos de referencia que se hubieren establecido previamente?

(setvar "OSMODE" (logior 32 (getvar "OSMODE")))

Por supuesto, tanto (logand ...) como (logior ...) puedenaceptar más de dos argumentos. En este caso:

  1. Se aplica la función a los dos primeros argumentos, obteniendo un resultado provisional.
  2. Se aplica la función al resultado provisional y al tercer argumento, obteniendo un nuevo resultado provisional.
  3. Se repite el proceso de aplicar la función al resultado provisionalactual y al siguiente argumento hasta agotar los argumentos pasados a lafunción.

ALGUNOS EJEMPLOS:

De Tony Tanzillo <tony.tanzillo@worldnet.att.net>tomamos los siguientes ejemplos del uso de estas funciones:

Determinar si un bloque es una Referencia Externa (RefX):

Esta función toma la lista de asociación devuelta por(tblsearch/siguiente), y devuelve T si el bloque es una referenciaexterna:

(defun isXref (data)
(eq 4 (logand 4 (cdr (assoc 70 data))))
)

Comprobar el valor de la variable CMDACTIVE:

No debemos utilizar la función = para comprobar el valor deCMDACTIVE, ya que su valor puede variar (y de hecho asumir valores nodocumentados y totalmente inesperados). En lugar de

 (= 1 (getvar "cmdactive")), 

se debe utilizar:

(eq 1 (logand 1 (getvar "cmdactive")))

Desactivar REFENT:

Para dejar sin efecto mediante LISP las referencias a objeto decarácter permanente (establecidas mediante REFENT) sin cambiar losvalores preestablecidos (lo que equivaldría a pulsar la tecla F3), sepuede activar el noveno bit (valor decimal de 16384):

(setvar "OSMODE" (logior (getvar "osmode") 16384))

o utilizando la función BIT antes definida:

(setvar "OSMODE" (logior (getvar "osmode")(bit 9)))

Otros ejemplos los podemos obtener de los mismos programas LISP queacompañan a AutoCAD. Para el uso de LOGIOR puede consultarseDDOSNAP.LSP de la versión 13,AI_UTILS.LSP,DDCHPROP.LSP,DDMODIFY.LSP yDDSELECT.LSP, de las versiones 13 y 14y EXCHPROP.LSP yMPEDIT.LSP, estos últimos dela versión 14.


* 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