FormaBois Posté(e) le 14 avril 2011 Posté(e) le 14 avril 2011 Bonjour, Oups... c'est parti avant que j'ai commencé... Je voulais vérifier si l'on pouvait poster un code.J'ai cette routine de Serge Camiré, mais je n'arrive pas à l'utiliser, pourtant il me semble suivre les instructions.Parle-t-on des filtres de Groupe et des propriétés du Gestionnaire des propriétés des calques ? ;;; DelSomeFilters ;;; Efface les filtres de calques de façon sélective ;;; ;;; Compatibilité: AutoCAD 2000 et plus ;;; ;;; Instructions: ;;; 1) Charger ce fichier ;;; 2) Tapez DSF sur la ligne de commande ;;; ;;; Par Serge Camiré, CadNovation, 2003/03/16 ;;; http://www.cadnovation.com/fr ;;; (vl-load-com) (defun DelSomeFilters ( mask / lext-dict ldict lay_entity lay_filters filter_name) (vl-load-com) (setq lext-dict (entget (vlax-vla-object->ename (vla-GetExtensionDictionary (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) ))) (setq lay_entity (if (member (cons 3 "ACAD_LAYERFILTERS") lext-dict) (cdr (assoc 360 lext-dict)) nil )) (if lay_entity (setq lay_filters (entget lay_entity))) (if lay_filters (setq lay_filters (member (assoc 3 lay_filters) lay_filters))) (while lay_filters (setq filter_name (cdar lay_filters)) (if (wcmatch filter_name mask) (dictremove lay_entity filter_name) ) (setq lay_filters (cddr lay_filters)) ) (princ) ) ;;; Exemples: ;;; (DelSomeFilters "*[1-9]*") ; Tous les calques avec des nombres ;;; (DelSomeFilters "*") ; Tout ;;; (DelSomeFilters "???,~*m*,N*") ; Tous les calques ayant 3 caractères ET ceux n'ayant pas de 'm' ET ceux ne débutant pas par N ;;; (DelSomeFilters "*") (defun c:dsf () (DelSomeFilters "*") (princ)) (princ "\nTapez DSF pour effacer tous les filtres de calques") (princ) [Edité le 14/4/2011 par FormaBois] Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
bonuscad Posté(e) le 14 avril 2011 Posté(e) le 14 avril 2011 Bonsoir, J'ai eu testé cette routine de Serge, elle ne m'avait pas posé de problème. Mais tu fais peu être une erreur de jugement sur ce que fait ce lisp.Il nettoie les FILTRES de calques que tu aurais pu établir, ou qui seraient présent dans le dessin.En aucun cas il ne supprime des calques existants !... C'est peut être ta confusion?Si pas de filtre correspondant à ta requête, pas de nettoyage, ça ne fait rien du tout. [Edité le 14/4/2011 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
FormaBois Posté(e) le 14 avril 2011 Auteur Posté(e) le 14 avril 2011 Bonsoir,j'ai créé 8 filtres de groupe et 2 filtres des propriétés pour tester la routineVoici ce qu'il y a en ligne de commande : Commande: Tapez DSF pour effacer tous les filtres de calques Commande: Commande: dsf Commande: Il ne se passe rien et les 10 filtres sont toujours présent dans le gestionnaire des propriétés des calques Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
Fraid Posté(e) le 14 avril 2011 Posté(e) le 14 avril 2011 Bonjour, J'utilise cette routine (defun C:LayerFiltersDelete () (vl-Load-Com) (vl-Catch-All-Apply '(lambda () (vla-Remove (vla-GetExtensionDictionary (vla-Get-Layers (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))) "ACAD_LAYERFILTERS"))) (princ "\nTout les Filtres de calques sont effacés.") (princ) ) merci a l'auteur si il se reconnais :P https://github.com/Fraiddd
bonuscad Posté(e) le 15 avril 2011 Posté(e) le 15 avril 2011 Bon, Comme cela faisait un bout de temps que je n'avais pas utilisé cette routine (version 2002 d'autocad), j'ai voulu testé à nouveau.Et bien cela ne fonctionne plus, les filtres sont toujours présent :mad: Idem avec la version proposé par Fraid. L'explication vient sans doute de là, mais je n'ai pas creuséExtrait de l'aide(dictremove ename symbol)By default, removing an entry from a dictionary does [surligneur]not delete it from the database. This must be done with a call to entdel.[/surligneur] En même temps, je ne sais pas si c'est utile d'avoir une routine fonctionnelle. En effet dans le gestionnaire de calque, un click sur 1er filtre puis maintient de la touche SHIFT et click sur le dernier filtre (mise en évidence de la sélection), click-droit et choisir supprimer et hop tout les filtres sont effacés. La sélection peut aussi se faire avec CTRL pour enlever certain et conserver d'autres. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Fraid Posté(e) le 15 avril 2011 Posté(e) le 15 avril 2011 Je n'avais pas vu qu'elle ne fonctionnais plus :o il faut dire que je ne m'en sert pas souvant comme le dit Bonuscad c'est vite fait par le gestionnaire de calque.... https://github.com/Fraiddd
FormaBois Posté(e) le 15 avril 2011 Auteur Posté(e) le 15 avril 2011 Pendant un moment j'ai commencé à douter l'intégrité de mes facultés intellectuelles ;)Vous avez raison pour la sélection, je faisais ainsi déjà mais si j'avais pu avec un seul clic lancer la commande pour tout supprimer j'évitais quelques clics.J'étais en train de me préparer une petite barre d'outil de nettoyage, avec "jav", "duc" de Patrick35 et d'autres outils excellents comme décomposer tous les niveaux de blocs imbriqués, aussi tout mettre sur 0 à DuBloc. Pour "duc" j'aurais aimé traiter seulement le dessin courant car il passe en revu tout le dossier, est-ce possible ou bien existe-t-il un autre outil ?Patrick si tu nous lisMerci à vous 2 pour les réponses Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
bonuscad Posté(e) le 15 avril 2011 Posté(e) le 15 avril 2011 si j'avais pu avec un seul clic lancer la commande pour tout supprimer j'évitais quelques clics. Ou que tu veuilles que ça fasse partie d'une procédure de nettoyage.Le code de Serge (et je pense celui livré par Fraid) bien que ne supprimant par les filtres fonctionne, il n'y a pas de bogue.J'ai fais un pas à pas et les filtres sont bien enlevé du dictionnaire. Mais comme le dit l'aide (traduite en français) Par défaut, le fait d'enlever une entrée d'un dictionnaire ne l'efface pas de la base de données. Cela doit être fait avec un appel entdel. Ce n'était pas le cas dans les versions 2000-2002 Donc il y a peu de chose à faire pour rendre à nouveau le code fonctionnel.Pour ma part je ne vois pas quoi soumettre à (entdel), j'ai bien essayé (entdel (dictremove lay_entity filter_name)), mais à priori ce n'est pas la solution. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
FormaBois Posté(e) le 15 avril 2011 Auteur Posté(e) le 15 avril 2011 Donc il y a peu de chose à faire pour rendre à nouveau le code fonctionnel.Pour ma part je ne vois pas quoi soumettre à (entdel), j'ai bien essayé (entdel (dictremove lay_entity filter_name)), mais à priori ce n'est pas la solution. je ne vois pas non plus ;)Voici le lien vers le lisp de Serge CamiréMerci pour ta disponibilité Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
bryce Posté(e) le 15 avril 2011 Posté(e) le 15 avril 2011 Bonsoir, http://blog.jtbworld.com/2005/03/delete-autocad-layer-filters.html ;;; DLF.LSP ;;; ;;; Delete all layer filters with the DLF command ;;; ;;; By Jimmy Bergmark ;;; Copyright (C) 2004-2008 JTB World, All Rights Reserved ;;; Website: www.jtbworld.com ;;; E-mail: info@jtbworld.com ;;; 2004-05-23 - Added support to delete filters introduced in 2005 ;;; 2005-03-14 - Confirmed to work with AutoCAD 2006 ;;; 2005-04-19 - Added (vl-load-com) ;;; Written for AutoCAD 2000, 2000i, 2002, 2004, 2005, 2006, 2007, 2008, 2009 ;;; (vl-load-com) ;;; Purge/delete all layer filter or filters ;;; Example: (DeleteLayerFilters) (defun DeleteLayerFilters () (vl-Catch-All-Apply '(lambda () (vla-Remove (vla-GetExtensionDictionary (vla-Get-Layers (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))) "ACAD_LAYERFILTERS"))) ) ;;; Purge/delete all layer filter or filters compatible with 2005 or later ;;; Example: (DeleteLayerFilters2) (defun DeleteLayerFilters2 () (vl-Catch-All-Apply '(lambda () (vla-Remove (vla-GetExtensionDictionary (vla-Get-Layers (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))) "AcLyDictionary"))) ) (defun c:dlf() (DeleteLayerFilters) (DeleteLayerFilters2) (princ "\nAll layer filters deleted!") (princ) ) Testé et approuvé ! :) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
FormaBois Posté(e) le 16 avril 2011 Auteur Posté(e) le 16 avril 2011 Super efficaceMerci Bryce d'avoir découvert cet outil ;) Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
Patrick_35 Posté(e) le 16 avril 2011 Posté(e) le 16 avril 2011 Pour "duc" j'aurais aimé traiter seulement le dessin courant car il passe en revu tout le dossier, est-ce possible ou bien existe-t-il un autre outil ?Patrick si tu nous lisSalut Tu as RB @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
FormaBois Posté(e) le 16 avril 2011 Auteur Posté(e) le 16 avril 2011 Bonjour,en fait DUC mettait tous les objets à 0 et DuCalque.Tandis que RB travail sur les blocs (0 et DuBloc) si j'ai bien compris !?Dans tous les cas un grand merci pour la mise à disposition de ces outilsBon WE ;) [Edité le 16/4/2011 par FormaBois] Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant