Si (tblsearch) était le bibliothécaire qui cherche un livre précis, (tblnext) est le DJ de la soirée.
Il ne cherche pas un titre précis, il joue simplement la liste de lecture, morceau après morceau, jusqu’à la fin.
1. Le Concept : « Au Suivant ! »
(tblnext) signifie littéralement « Table Next » (Table Suivante).
Son boulot est simple : il plonge dans une armoire (Calques, Blocs, Styles…) et vous ramène les objets un par un.
-
Premier appel : « Tiens, voici le 1er calque. »
-
Deuxième appel : « Tiens, voici le 2ème calque. »
-
…
-
Quand il n’y a plus rien : Il répond
nil(C’est fini !).
2. La Syntaxe (et le bouton « Rembobiner »)
C’est la subtilité à retenir pour ne pas se faire piéger.
(tblnext "NOM_TABLE" [Rembobiner])
-
Argument 1 : L’armoire (« LAYER », « BLOCK », « STYLE »…).
-
Argument 2 : C’est un interrupteur.
-
Si vous mettez
T(True/Vrai) : On rembobine au début. On repart du tout premier objet. -
Si vous ne mettez rien (ou
nil) : On continue et on prend le suivant.
3. L’Exemple : Le « Dérouleur » de Calques
On va créer une petite commande qui va lister tous les noms des calques de votre dessin dans la ligne de commande.
Pour faire ça, on utilise une boucle while (Tant que…).
Traduction : « Tant que tu trouves un calque, affiche son nom, puis passe au suivant. »
Copiez ce code et lancez LISTECALQUES :
(defun c:LISTECALQUES (/ item)
(prompt "\n--- DÉBUT DE LA LISTE ---")
;; ÉTAPE 1 : On initialise.
;; On demande le TOUT PREMIER calque en mettant 'T' pour rembobiner.
(setq item (tblnext "LAYER" T))
;; ÉTAPE 2 : La boucle "Tant que..."
;; Tant que 'item' n'est pas vide (nil)...
(while item
;; On récupère le nom. Le nom est toujours rangé sous le code 2.
;; (assoc 2 item) donne (2 . "Mur"), et cdr garde juste "Mur".
(princ (strcat "\nJ'ai trouvé : " (cdr (assoc 2 item))))
;; ÉTAPE 3 : Le passage de témoin.
;; On demande le SUIVANT (Notez qu'il n'y a plus le 'T' ici !)
(setq item (tblnext "LAYER"))
)
(prompt "\n--- C'EST FINI ! ---")
(princ)
)
4. Résumé pour briller à la machine à café
-
Utilisez
(tblnext "LAYER" T)pour démarrer la lecture au début. -
Utilisez
(tblnext "LAYER")(sans le T) à l’intérieur d’une boucle pour avancer pas à pas. -
Quand la fonction renvoie
nil, c’est que vous avez tout lu !
C’est l’outil de base pour créer des listes déroulantes ou traiter des lots d’objets.
- Utile
- Peut mieux faire
- Inutile
Tous les tutos AutoLISP
