Aller au contenu

Messages recommandés

Posté(e)

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"

Posté(e)

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

Posté(e)

Bonsoir,

j'ai créé 8 filtres de groupe et 2 filtres des propriétés pour tester la routine

Voici 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"

Posté(e)

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

Posté(e)

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

Posté(e)

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 lis

Merci à 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"

Posté(e)

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

Posté(e)
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"

Posté(e)

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é ! :)

Posté(e)
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 lis

Salut

 

Tu as RB

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité