Je souhaite comprendre comment manipuler efficacement des groupes d’objets dans AutoCAD en utilisant AutoLISP. Quelles sont les fonctions clés pour créer, gérer et parcourir des jeux de sélection ?
Pour manipuler des groupes d’objets en AutoLISP, il est essentiel de maîtriser les Jeux de Sélection (Selection Sets), qui permettent de regrouper des entités pour les traiter efficacement. Voici les fonctions clés et leur utilisation :
-
Créer un Jeu de Sélection avec
(ssget):- Sélection Manuelle (« Libre-Service ») : Utilisez
(ssget)sans argument pour laisser l’utilisateur sélectionner des objets directement à l’écran. - Sélection Filtrée (« Le Videur de Boîte ») : Utilisez
(ssget "Filtre")avec une liste de filtres pour restreindre la sélection de l’utilisateur à des types d’objets spécifiques (ex:(ssget "X" '((0 . "CIRCLE")))pour les cercles). - Sélection Automatique (« Aspirateur Total ») : Utilisez
(ssget "X")pour sélectionner automatiquement tous les objets du dessin qui correspondent à des critères de filtre spécifiés, sans intervention de l’utilisateur.
- Sélection Manuelle (« Libre-Service ») : Utilisez
-
Connaître la taille du Jeu de Sélection avec
(sslength):- Utilisez
(sslength ss)oùssest votre jeu de sélection, pour obtenir le nombre total d’objets qu’il contient.
- Utilisez
-
Accéder aux objets individuels avec
(ssname):- Utilisez
(ssname ss index)pour récupérer le nom d’entité (entité name) de l’objet situé à l’index spécifié dans le jeu de sélection. L’index commence à 0.
- Utilisez
-
Gérer le contenu du Jeu de Sélection avec
(ssadd)et(ssdel):- Ajouter un objet : Utilisez
(ssadd ent ss)pour ajouter une entité (ent) à un jeu de sélection existant (ss). Sissestnil,(ssadd ent)crée un nouveau jeu de sélection contenantent. - Supprimer un objet : Utilisez
(ssdel ent ss)pour retirer une entité (ent) d’un jeu de sélection (ss) sans la supprimer du dessin.
- Ajouter un objet : Utilisez
Boucle Classique pour Traiter les Objets :
Le motif le plus courant est de parcourir chaque objet d’un jeu de sélection. Voici un exemple de structure :
(setq ss (ssget "X" '((0 . "LINE")))) ; Exemple: sélectionne toutes les lignes
(if ss
(progn
(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq edata (entget ent)) ; Obtenir les données de l'entité
; ... Traitement de l'entité ...
(setq i (1+ i))
)
)
)
Cette approche vous permet de traiter chaque entité individuellement au sein du groupe.