Comment décharger rapidement une ou plusieurs références externes (Xrefs) ou images dans AutoCAD par simple sélection graphique, sans passer par le gestionnaire de Xrefs et en évitant les ralentissements sur les fichiers volumineux ?
La gestion des références externes (Xrefs) et des images peut devenir fastidieuse, surtout avec des fichiers volumineux où le gestionnaire classique peut entraîner des ralentissements. Cette solution propose des routines LISP pour décharger ou détacher ces éléments par simple sélection, améliorant ainsi l’efficacité de votre workflow.
Prérequis : Chargement des routines LISP
Pour utiliser les commandes personnalisées ci-dessous, vous devez charger les fichiers LISP (.LSP) dans AutoCAD. La méthode recommandée est de les ajouter à la suite de démarrage pour qu’ils soient disponibles à chaque lancement d’AutoCAD.
- Enregistrer le code : Copiez le code LISP fourni dans un éditeur de texte (comme le Bloc-notes) et enregistrez-le avec l’extension
.lsp(par exemple,unload_xref.lspetunload_image.lsp). - Charger le LISP :
- Tapez
APPLOADdans la ligne de commande et appuyez sur Entrée. - Dans la boîte de dialogue « Charger/Décharger des applications », cliquez sur « Contenu… » sous « Suite de démarrage ».
- Cliquez sur « Ajouter… », naviguez jusqu’à votre fichier
.lspet sélectionnez-le. - Cliquez sur « Fermer » puis sur « Fermer » à nouveau.
- Tapez
Solution 1 : Décharger une Xref par sélection unitaire et répétée (Recommandé)
Cette méthode permet de décharger une Xref à la fois, en restant dans la commande pour en décharger plusieurs successivement. Elle est particulièrement efficace pour les Xrefs volumineuses car elle peut être optimisée pour éviter le surlignage.
-
Code LISP (
unload_xref.lsp) :(defun c:unload_xref ( / js name_xref) (princ "\nSélectionner l'XRef à décharger. ") (while (null (setq js (ssget "_+.:E:S" '((0 . "INSERT"))))) (princ "\nObjets non valable!") ) (cond ((eq (boole 1 (cdr (assoc 70 (tblsearch "BLOCK" (setq name_xref (cdr (assoc 2 (entget (ssname js 0)))))))) 4) 4) (command "_.-xref" "_Unload" name_xref) ) (T (princ "\nN'est pas une référence externe. ")) ) (prin1) ) -
Créer une macro de commande :
- Ouvrez l’éditeur CUI (Commande
CUI). - Dans la section « Liste des commandes », créez une nouvelle commande.
- Nommez-la par exemple « Décharger Xref par clic ».
- Dans la section « Macro », entrez la chaîne suivante :
^C^C_multiple;unload_xref - Faites glisser cette nouvelle commande vers une barre d’outils, un ruban ou un menu contextuel de votre choix.
- Ouvrez l’éditeur CUI (Commande
-
Utilisation : Cliquez sur le bouton de la macro. La commande vous demandera de sélectionner une Xref. Après chaque sélection, l’Xref sera déchargée et la commande restera active pour vous permettre de sélectionner une autre Xref. Appuyez sur
Échappour quitter la commande. -
Optimisation (pour Xrefs volumineuses) : Pour éviter le surlignage qui peut ralentir AutoCAD lors de la sélection d’une Xref très grande, vous pouvez modifier le LISP comme suit :
(defun c:unload_xref ( / js name_xref) (setvar "HIGHLIGHT" 0) ; Désactive le surlignage (princ "\nSélectionner l'XRef à décharger. ") (while (null (setq js (ssget "_+.:E:S" '((0 . "INSERT"))))) (princ "\nObjets non valable!") ) (cond ((eq (boole 1 (cdr (assoc 70 (tblsearch "BLOCK" (setq name_xref (cdr (assoc 2 (entget (ssname js 0)))))))) 4) 4) (command "_.-xref" "_Unload" name_xref) ) (T (princ "\nN'est pas une référence externe. ")) ) (setvar "HIGHLIGHT" 1) ; Réactive le surlignage (prin1) )Note : Cette optimisation est à intégrer dans le LISP
unload_xref.lspavant de le charger.
Solution 2 : Décharger plusieurs Xrefs par sélection groupée (Alternative)
Cette version du LISP permet de sélectionner plusieurs Xrefs en une seule fois (par fenêtre de sélection par exemple) et de les décharger toutes après validation.
- Code LISP (
unload_xref_multiple.lsp) :(defun c:unload_xref_multiple ( / js n name_xref) (princ "\nSélectionner les XRefs à décharger. ") (while (null (setq js (ssget "_+.:E" '((0 . "INSERT"))))) (princ "\nObjets non valable!") ) (repeat (setq n (sslength js)) (cond ((eq (boole 1 (cdr (assoc 70 (tblsearch "BLOCK" (setq name_xref (cdr (assoc 2 (entget (ssname js (setq n (1- n)))))))))) 4) 4) (command "_.-xref" "_Unload" name_xref) ) (T (princ "\nN'est pas une référence externe. ")) ) ) (prin1) ) - Utilisation : Après avoir chargé ce LISP, tapez
UNLOAD_XREF_MULTIPLEdans la ligne de commande. Vous pourrez alors sélectionner une ou plusieurs Xrefs. Appuyez sur Entrée pour valider votre sélection et décharger toutes les Xrefs choisies.
Solution 3 : Détacher des images par sélection unitaire et répétée
Similaire à la méthode pour les Xrefs, cette routine permet de détacher des images insérées dans votre dessin.
- Code LISP (
unload_image.lsp) :(defun c:unload_image ( / *error* str2lst sep pos str aa bb cc lst nom) (princ "\nSélectionner l'Image à détacher. ") ;;; Gestion d'erreur (defun *error* (msg) (if (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (princ) ) ;;; Transformation d'une chaine avec séparateur en liste de chaînes (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;;; (while (setq aa (entget (car (entsel)))) (setq bb (entget (cdr (assoc 340 aa)))) (setq cc (cdr (assoc 1 bb))) (setq lst (last (str2lst cc "\\"))) (setq nom (car (str2lst lst "."))) (command "_.-image" "D" nom) ) (prin1) ) - Créer une macro de commande (similaire à la Solution 1) :
- Ouvrez l’éditeur CUI (Commande
CUI). - Créez une nouvelle commande, nommez-la par exemple « Détacher Image par clic ».
- Dans la section « Macro », entrez la chaîne suivante :
^C^C_multiple;unload_image - Faites glisser cette commande vers une interface utilisateur.
- Ouvrez l’éditeur CUI (Commande
- Utilisation : Cliquez sur le bouton de la macro. La commande vous demandera de sélectionner une image. Après chaque sélection, l’image sera détachée et la commande restera active. Appuyez sur
Échappour quitter.
Ces routines LISP offrent une flexibilité et une rapidité accrues pour la gestion de vos références externes et images, en contournant les limitations des méthodes standard d’AutoCAD.