Je cherche une méthode plus élégante et performante pour gérer des bascules d’état (comme la visibilité ou le gel de calques) dans mes routines AutoLISP, sans utiliser de multiples conditions if.
Pour gérer efficacement les bascules d’état binaires (0/1 ou positif/négatif) en AutoLISP, il est possible d’utiliser des opérations mathématiques simples, ce qui rend le code plus concis et souvent plus performant que les structures conditionnelles if.
Voici les deux méthodes principales :
-
Bascule entre 0 et 1 (type Gelé/Dégelé)
Cette méthode est idéale pour les variables qui alternent entre les valeurs 0 et 1.- Principe : Soustraire la valeur actuelle de 1 pour obtenir l’état opposé.
- Formule :
(setq ma_variable (- 1 ma_variable)) - Explication :
- Si
ma_variablevaut 1 (ex: calque gelé),(- 1 1)donnera 0 (calque dégelé). - Si
ma_variablevaut 0 (ex: calque dégelé),(- 1 0)donnera 1 (calque gelé).
- Si
- Application : Parfait pour le code DXF 70 des calques, où 0 = Dégelé et 1 = Gelé.
-
Bascule entre Positif et Négatif (type Actif/Inactif)
Cette méthode est adaptée aux variables qui alternent entre une valeur positive et sa version négative.- Principe : Inverser simplement le signe de la valeur actuelle.
- Formule :
(setq ma_variable (- ma_variable)) - Explication :
- Si
ma_variableest positive (ex: 7 pour actif),(- 7)donnera -7 (inactif). - Si
ma_variableest négative (ex: -7 pour inactif),(- -7)donnera 7 (actif).
- Si
- Application : Idéal pour le code DXF 62 des calques, où une valeur positive indique un calque actif et une valeur négative un calque inactif.
Ces techniques permettent de simplifier considérablement le code AutoLISP, le rendant plus lisible et plus rapide, en évitant l’encombrement des parenthèses conditionnelles.