Ces deux fonctions sont les piliers de la manipulation binaire (bit à bit). Elles sont indispensables pour gérer les variables système à options multiples (comme OSMODE) ou les codes DXF (comme le code 70).
Voici comment les comprendre et les utiliser concrètement.
1. LOGIOR (L’Additionneur / L’Imposeur)
Logique : « Si un bit est à 1 dans l’un OU l’autre nombre, le résultat est 1. »
Usage : Sert à AJOUTER une option ou FORCER un état, sans se soucier de ce qui est déjà activé.
Exemple concret : Ajouter l’accrochage « Extrémité » (Bit 1)
Imaginez que OSMODE soit réglé sur « Centre » (4). Vous voulez ajouter « Extrémité » (1) sans désactiver le Centre.
-
Si vous faites
(setvar "OSMODE" 1), vous perdez le Centre. -
Si vous faites
(+ 4 1), ça marche, mais si « Extrémité » était déjà actif, vous obtenez 5 (4+1), ce qui est faux.
Avec logior, on fusionne les bits :
;; Force l'accrochage Extrémité (1) quel que soit le réglage actuel
(setvar "OSMODE" (logior (getvar "OSMODE") 1))
;; Force Extrémité (1) ET Intersection (32) en même temps
(setvar "OSMODE" (logior (getvar "OSMODE") 33))
2. LOGAND (Le Filtre / Le Vérificateur)
Logique : « Si un bit est à 1 dans l’un ET l’autre nombre, le résultat est 1 (sinon 0). »
Usage : Sert à VÉRIFIER si une option est active, ou à ISOLER une propriété.
Exemple concret : Vérifier si « Extrémité » est actif
Peu importe la valeur totale de OSMODE (ça peut être 4135), on veut juste savoir si le bit 1 est allumé.
;; Si le résultat du filtrage par 1 est égal à 1...
(if (= (logand (getvar "OSMODE") 1) 1)
(princ "\nL'accrochage Extrémité est ACTIF.")
(princ "\nL'accrochage Extrémité est INACTIF.")
)
3. L’Astuce Expert : SUPPRIMER une option (Le masque inversé)
Comment enlever l’accrochage « Proche » (512) sans toucher au reste ?
On ne peut pas faire une soustraction simple (si l’option n’est pas active, on soustrait dans le vide).
Il faut combiner logand avec l’opérateur ~ (Bitwise NOT / Complément).
(~ 512) crée un masque où tout est à 1 sauf le 512.
;; Enlever "Proche" (512) proprement
(setvar "OSMODE" (logand (getvar "OSMODE") (~ 512)))
Traduction : « Garde tout ce qui est actif (OSMODE) À CONDITION QUE ce soit aussi dans le masque ‹ Tout sauf 512 ›. »
Résumé pour le développeur
-
Activer un drapeau :
(logior ValeurActuelle Drapeau) -
Vérifier un drapeau :
(= (logand ValeurActuelle Drapeau) Drapeau) -
Désactiver un drapeau :
(logand ValeurActuelle (~ Drapeau))