rrobert Posté(e) le 24 mars 2021 Posté(e) le 24 mars 2021 Bonjour, J'ai des vieux calques qui sont imbriqués dans des vieux blocs que j'utilise encore. J'aimerai supprimer ces calques car ils ont été remplacés par des nouveaux, mais ils sont utilisés dans des blocs créés il y a longtemps et je ne sais plus quels objets de quels blocs sont sur ces vieux calques. Existe-t-il un moyen de savoir dans quels objets/blocs un calque est utilisé? Ou un moyen de changer de calque tous les objets du dessin, y compris ceux qui sont dans des blocs. Merci pour vos réponses, Rémi Citer
philsogood Posté(e) le 24 mars 2021 Posté(e) le 24 mars 2021 hello pas d'idée pour savoir quel calque est utilisé où mais la fonction FUSCALQUES doit pouvoir te rendre des services... ++ Phil PS : les rêgles de l'art voudraient que tous les objets d'un bloc soit sur le calque 0 avec des caractéristiques égales à dubloc 1 Citer Projeteur Revit Indépendant - traitement des eaux/CVC
rrobert Posté(e) le 25 mars 2021 Auteur Posté(e) le 25 mars 2021 Je prends bonne note et essaierai dès que possible. Bien d'accord pour le 0, c'est ce que je fais pour tous mes blocs "simples". Seulement j'ai certains blocs plus complexes où j'imbrique davantage d'éléments dessus afin de gagner du temps. Ainsi un bloc pourra contenir une chaudière (calque chaudière), une attente électrique (calque elec), des départs EFS, ECS, chauffage, ainsi qu'une indication de texte (calque texte). Je n'ai donc qu'une opération à réaliser pour copier tous ces éléments sur mon plan, et lorsque je le souhaite, je gèle les calques voulus pour faire disparaitre les éléments indésirables, notamment dans les fenêtre de présentation. Du coup ça implique d'avoir un calque pour le bloc, et dans le bloc chaque objet a son propre calque. Rémi Citer
(gile) Posté(e) le 25 mars 2021 Posté(e) le 25 mars 2021 Salut, Tu peux essayer ce LISP (commande : REMPLCALQUE). ;;; GetLayer (gile) 03/11/07 ;;; Retourne le nom du calque entré ou choisi par l'utilisateur ;;; dans une liste déroulante de la boite de dialogue ou en sélectionnant ;;; un objet à l'écran. ;;; Argument : le titre (string) ou nil (défaut : "Choisir un calque") (defun getlayer (titre / lay lst tmp file what_next dcl_id nom) (while (setq lay (tblnext "LAYER" (not lay))) (setq lst (cons (cdr (assoc 2 lay)) lst)) ) (setq lst (acad_strlsort lst) tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line (strcat "getlayer:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir un calque\"") ) ";initial_focus=\"tp\"; :boxed_column{:row{ :column{:text{label=\"Sélectionner un objet\";alignment=left;}} :column{:button{label=\">>\";key=\"obj\";alignment=right;fixed_width=true;} spacer;}} :edit_box{key=\"tp\";edit_width=25;allow_accept=true;} :popup_list{key=\"lay\";edit_width=25;} spacer;}ok_cancel;}" ) file ) (close file) (setq dcl_id (load_dialog tmp)) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getlayer" dcl_id)) (exit) ) (start_list "lay") (mapcar 'add_list lst) (end_list) (or nom (setq nom (vlax-ldata-get "getLayer" "n")) (setq nom (vlax-ldata-put "getLayer" "n" "0")) ) (if (member nom lst) (set_tile "lay" (itoa (- (length lst) (length (member nom lst)))) ) (set_tile "lay" "0") ) (set_tile "tp" nom) (action_tile "obj" "(done_dialog 3)") (action_tile "tp" "(setq nom $value)") (action_tile "lay" (strcat "(if (or (= $reason 1) (= $reason 4))" "(progn" "(setq nom (nth (atoi $value) lst))" "(set_tile \"tp\" (nth (atoi $value) lst))" "(mode_tile \"tp\" 2)))" ) ) (action_tile "accept" (strcat "(if (tblsearch \"LAYER\" nom)" "(progn (done_dialog 1)" "(vlax-ldata-put \"getLayer\" \"n\" nom))" "(progn" "(alert (strcat \"Le calque \" nom \" est introuvable.\"))" "(setq nom nil) (set_tile \"tp\" (vlax-ldata-get \"getLayer\" \"n\"))" "(mode_tile \"tp\" 2)))" ) ) (setq what_next (start_dialog)) (cond ((= what_next 3) (if (setq nom (car (entsel))) (setq nom (cdr (assoc 8 (entget nom)))) (setq nom nil) ) ) ((= what_next 0) (setq nom nil) ) ) ) (unload_dialog dcl_id) (vl-file-delete tmp) nom ) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) ;; REMPLCALQUE ;; Remplace l'ancien calque par le nouveau pour tous les objets du dessin. (defun c:REMPLCALQUE (/ *error* old new) (defun *error* (msg) (and msg (/= msg "Fonction annulée") (prompt (strcat "\nErreur: " msg)) ) (vla-EndUndoMark *acdoc*) (princ) ) (if (and (setq old (getLayer "Ancien calque")) (setq new (getLayer "Nouveau calque")) (/= old new) ) (progn (vla-StartUndoMark *acdoc*) (vlax-for b *blocks* (vlax-for o b (if (= (vla-get-Layer o) old) (vla-put-layer o new) ) ) ) (vla-regen *acdoc* acActiveViewport) (*error* nil) ) ) ) Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Olivier Eckmann Posté(e) le 25 mars 2021 Posté(e) le 25 mars 2021 Bonjour, Il me semble que depuis AutoCAD 2020, la commande purger à évoluer pour afficher (onglet "non purgeable") la raison de "non purgeabilité" d'un objet (par exemple un calque) en indiquant où il est utilisé (dans un bloc par ex). Olivier 1 Citer
Luna Posté(e) le 25 mars 2021 Posté(e) le 25 mars 2021 Coucou, La commande FUSCALQUE fonctionne parfaitement bien en effet ce qui permet par exemple de passer les anciens calques sur les récents ou bien de les fusionner sur le calque "0". Il existe une méthode beaucoup plus..."bourrine" mais avec une perte de données : SUPCALQUE. A utiliser avec précaution car cette commande supprime définitivement le calque, peu importe ce qu'il y a dessus. Donc si le but c'est de supprimer un calque (et donc les objets situés dessus), c'est parfait ! Sinon, FUSCALQUE permet de "sauvegarder" les éventuels objets sur un autre calque. Mais aucunes de ces méthodes permettent d'aller à la pêche aux informations malheureusement donc si tu veux faire un traitement manuel des objets pour soit les sauvegarder dans un autre calque, soit les supprimer, il faudra créer un programme :3 3 choix possibles donc : 1°) Supprimer définitivement un calque et ses occupants (purge complète) -> SUPCALQUE 2°) Supprimer définitivement un calque en sauvegardant ses occupants sur un autre -> FUSCALQUE 3°) Repérer les occupants d'un calque pour traitement manuel -> (à créer) 4°) La réponse D ^^ Je te laisse faire ton choix :3 Bisous, Luna Citer
philsogood Posté(e) le 25 mars 2021 Posté(e) le 25 mars 2021 @Olivier Eckmann c'est vrai et cette fonctionnalité est assez géniale je trouve... idéale pour rechercher les style de texte (entre autre) qui se sont immicés dans des endroits impossibles... Citer Projeteur Revit Indépendant - traitement des eaux/CVC
rrobert Posté(e) le 25 mars 2021 Auteur Posté(e) le 25 mars 2021 37 minutes ago, Olivier Eckmann said: Bonjour, Il me semble que depuis AutoCAD 2020, la commande purger à évoluer pour afficher (onglet "non purgeable") la raison de "non purgeabilité" d'un objet (par exemple un calque) en indiquant où il est utilisé (dans un bloc par ex). Olivier Mon Dieu c'est magique !! J'étais sur LT2016 depuis longtemps, ça a vraiment du bon les nouvelles versions... J'ai retrouvé le bloc coupable en 2 secondes, mille mercis Olivier ! Merci Luna, je vais FUSCALQUES car je souhaite garder mes éléments. Mais je garde SUPCALQUE sous le coude 😉 10 minutes ago, Luna said: Coucou, La commande FUSCALQUE fonctionne parfaitement bien en effet ce qui permet par exemple de passer les anciens calques sur les récents ou bien de les fusionner sur le calque "0". Il existe une méthode beaucoup plus..."bourrine" mais avec une perte de données : SUPCALQUE. A utiliser avec précaution car cette commande supprime définitivement le calque, peu importe ce qu'il y a dessus. Donc si le but c'est de supprimer un calque (et donc les objets situés dessus), c'est parfait ! Sinon, FUSCALQUE permet de "sauvegarder" les éventuels objets sur un autre calque. Mais aucunes de ces méthodes permettent d'aller à la pêche aux informations malheureusement donc si tu veux faire un traitement manuel des objets pour soit les sauvegarder dans un autre calque, soit les supprimer, il faudra créer un programme :3 3 choix possibles donc : 1°) Supprimer définitivement un calque et ses occupants (purge complète) -> SUPCALQUE 2°) Supprimer définitivement un calque en sauvegardant ses occupants sur un autre -> FUSCALQUE 3°) Repérer les occupants d'un calque pour traitement manuel -> (à créer) 4°) La réponse D ^^ Je te laisse faire ton choix :3 Bisous, Luna Merci du Lisp GILE, je t'avoue que je vais m'en tenir à la purge pour le moment. Bonne journée à toutes et à tous, Rémi Citer
Messages recommandés