Topheur Posté(e) le 24 février 2019 Posté(e) le 24 février 2019 Bonjour les forumeurs et les forumeuses :P , J'utilise le lisp suivant afin de me créer un filtre de propriete : (defun c:FILTRE_FX_PLAF (/ dict xdic) ;(setq nom_filtre (getstring "\nEntrer le nom des éléments à filtrer :")) (setq xdic (vlax-vla-object->ename (vla-getextensiondictionary (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))))) (if (setq dict (dictsearch xdic "ACAD_LAYERFILTERS")) (setq dict (cdr (assoc -1 dict))) (setq dict (dictadd xdic "ACAD_LAYERFILTERS" (entmakex '((0 . "dictionary") (100 . "AcDbDictionary") (280 . 0) (281 . 1) ) ) ) ) ) (dictadd dict "DenisH" (entmakex '((0 . "xrecord") (100 . "AcDbXrecord") (280 . 1) (1 . "FX_PLAFOND") (1 . "*PLAF*") (1 . "*") (1 . "*") (70 . 0) (1 . "*") (1 . "*") (-3 ( "ACAD" (1000 . "( NAME== \"*PLAF*\" )"))) ) ) ) (princ) ) Mais j'aimerais pouvoir en créer plusieurs en une seul fois. Merci de votre aide.
didier Posté(e) le 24 février 2019 Posté(e) le 24 février 2019 Coucou C'est un filtre de sélection par calque ?Pourquoi passer par un lisp pour faire ça ?Tu t'en sers dans un programme ou c'est pour la ligne de commande ? si c'est dans un programme je comprendsC'est tellement simple de faire la même chose en ligne de commande que je ne comprends pas ta question et encore moins l'utilisation d'un "programme"!La roue a déjà été inventée, il faut utiliser le natif avant de programmer Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Topheur Posté(e) le 24 février 2019 Auteur Posté(e) le 24 février 2019 Bonjour, En fait, quand j'ouvre mes plans clients, je peux avoir plusieurs calques de type Faux Plafond, mais également poutres ainsi que les calques de l'entreprise qui m'emploie qui commence tous par CSN_xxx Du coup, j'ai un lisp qui me permet de filtrer les calques FX PLAFOND, un pour les poutres et un pour les calques de l'entreprise. Du coup je lance 1 première ligne de commande FILTRE_FX_PLAFPuis FILTRE_POUTREEt pour finir FILTRE_ENT Le but final c'est qu'avec une commande lisp (ex FILTRES_PERSO) je puisse générer les 3 d'un coup. Ensuite, il me reste à les transformer en filtre de propriété en faisant clic droit dessus et convertir en filtre de groupe (je ne sais pas le faire en lisp) Merci de ton aide
didier Posté(e) le 24 février 2019 Posté(e) le 24 février 2019 Coucou Si tu utilises les caractères génériques en ligne de commande pour la gestion des calques je pense que tu peux t'en sortir aisément sans lisp. Éternel débutant... Mon site perso : Programmer dans AutoCAD
GEGEMATIC Posté(e) le 25 février 2019 Posté(e) le 25 février 2019 salut,il faut sortir les nom "en dur" pour le mettre en argument.dans ce cas, ce n'est pas si simple, car on est en plein dans le mélange des listes normales et "paire pointées"la je crée la routine avec les arguments; (defun creeFiltreProprCalque (nomFiltre propFiltre / dict xdic) ;(setq nom_filtre (getstring "\nEntrer le nom des éléments à filtrer :")) (setq xdic (vlax-vla-object->ename (vla-getextensiondictionary (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))))) (if (setq dict (dictsearch xdic "ACAD_LAYERFILTERS")) (setq dict (cdr (assoc -1 dict))) (setq dict (dictadd xdic "ACAD_LAYERFILTERS" (entmakex '((0 . "dictionary") (100 . "AcDbDictionary") (280 . 0) (281 . 1) ) ) ) ) ) (dictadd dict "DenisH" (entmakex (list '(0 . "xrecord") '(100 . "AcDbXrecord") '(280 . 1) (cons 1 nomFiltre) (cons 1 propFiltre) '(1 . "*") '(1 . "*") '(70 . 0) '(1 . "*") '(1 . "*") ;;(-3 ( "ACAD" (1000 . "( NAME== \"*PLAF*\" )"))) (list -3 (list "ACAD" (cons 1000 (strcat "( NAME== \\" propFiltre "\\" )))) ) ) ) (princ) ) la je crée la fonction qui en fait plusieurs (a adapter) (defun c:MesFiltre () (creeFiltreProprCalque "plafond" "*PLAF*") (creeFiltreProprCalque "mur" "*MUR*") ) ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Topheur Posté(e) le 25 février 2019 Auteur Posté(e) le 25 février 2019 Bonsoir, ça ne marche pas :( ça me crée un seul filtre (le premier dans defun c:MesFiltre) J'ai modifier dans la "routine";;(-3 ( "ACAD" (1000 . "( NAME== \"*PLAF*\" )")))par;;(-3 ( "ACAD" (1000 . "( NAME== \"*propFiltre*\" )")))pour récupérer le nom du filtre Je ne suis pas très fort en lisp, peut être une fausse manip de ma aprt. Une idée ? Merci de votre aide.
GEGEMATIC Posté(e) le 27 février 2019 Posté(e) le 27 février 2019 Salut,Bonsoir,ça ne marche pas :( Une idée ?en fait, j'avais lu en diagonale, et pas du tout analysé le lisp de Denis ...je pensais que tu avais adapté 3 fois ce lisp, que j'ai vu cette ligne, (dictadd dict "DenisH"j'ai pensé que les filtre pouvaient être regroupé sur DenisH, mais il n'en est rien. Donc ce coup ci j'ai testé ça marche chez moi...(defun creeFiltreProprCalque ( nomFiltre propFiltre / dict xdic) ;(setq nom_filtre (getstring "\nEntrer le nom des éléments à filtrer :")) (setq xdic (vlax-vla-object->ename (vla-getextensiondictionary (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))))) (if (setq dict (dictsearch xdic "ACAD_LAYERFILTERS")) (setq dict (cdr (assoc -1 dict))) (setq dict (dictadd xdic "ACAD_LAYERFILTERS" (entmakex '((0 . "dictionary") (100 . "AcDbDictionary") (280 . 0) (281 . 1) ) ) ) ) ) (dictadd dict nomFiltre (entmakex (list '(0 . "xrecord") '(100 . "AcDbXrecord") '(280 . 1) (cons 1 nomFiltre) (cons 1 propFiltre) ;; 1 . "FX_PLAFOND") ;;(1 . "*PLAF*") '(1 . "*") '(1 . "*") '(70 . 0) '(1 . "*") '(1 . "*") ;;(-3 ( "ACAD" (1000 . "( NAME== \"*PLAF*\" )"))) (list -3 (list "ACAD" (cons 1000 (strcat "( NAME== \"" propFiltre "\"" )))) ) ) ) (princ) ) (defun c:MesFiltre () (creeFiltreProprCalque "plafond" "*PLAF*") (creeFiltreProprCalque "mur" "*MUR*") ) ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Topheur Posté(e) le 27 février 2019 Auteur Posté(e) le 27 février 2019 Salut, en fait, j'avais lu en diagonale, et pas du tout analysé le lisp de Denis ...je pensais que tu avais adapté 3 fois ce lisp, que j'ai vu cette ligne, (dictadd dict "DenisH"j'ai pensé que les filtre pouvaient être regroupé sur DenisH, mais il n'en est rien. Donc ce coup ci j'ai testé ça marche chez moi...(defun creeFiltreProprCalque ( nomFiltre propFiltre / dict xdic) ;(setq nom_filtre (getstring "\nEntrer le nom des éléments à filtrer :")) (setq xdic (vlax-vla-object->ename (vla-getextensiondictionary (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))))) (if (setq dict (dictsearch xdic "ACAD_LAYERFILTERS")) (setq dict (cdr (assoc -1 dict))) (setq dict (dictadd xdic "ACAD_LAYERFILTERS" (entmakex '((0 . "dictionary") (100 . "AcDbDictionary") (280 . 0) (281 . 1) ) ) ) ) ) (dictadd dict nomFiltre (entmakex (list '(0 . "xrecord") '(100 . "AcDbXrecord") '(280 . 1) (cons 1 nomFiltre) (cons 1 propFiltre) ;; 1 . "FX_PLAFOND") ;;(1 . "*PLAF*") '(1 . "*") '(1 . "*") '(70 . 0) '(1 . "*") '(1 . "*") ;;(-3 ( "ACAD" (1000 . "( NAME== \"*PLAF*\" )"))) (list -3 (list "ACAD" (cons 1000 (strcat "( NAME== \"" propFiltre "\"" )))) ) ) ) (princ) ) (defun c:MesFiltre () (creeFiltreProprCalque "plafond" "*PLAF*") (creeFiltreProprCalque "mur" "*MUR*") ) C'est parfais, c'est exactement se que je cherche !!! Allez j'abuse encore un peu, peut on convertir ces même filtres en filtres de groupe ? :P
GEGEMATIC Posté(e) le 28 février 2019 Posté(e) le 28 février 2019 Salut,Allez j'abuse encore un peu, peut on convertir ces même filtres en filtres de groupe ? :Pje n'utilise pas/peu les filtres de groupes, donc je ne connais rien à leur programmation.En tout cas je ne vois pas l’intérêt de transformer un filtre de propriété en filtre de groupes par la programmation ?car si on a besoin de le faire, c'est pour ajouter manuellement des calque qui sont en dehors des propriétés,et dans ce cas, l'interface permet de créer le filtre de groupe, puis d'ajouter des objets.ci dessou un vielle discussion sur le sujet:Sujet anciena+gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Topheur Posté(e) le 2 mars 2019 Auteur Posté(e) le 2 mars 2019 Salut, je n'utilise pas/peu les filtres de groupes, donc je ne connais rien à leur programmation.En tout cas je ne vois pas l’intérêt de transformer un filtre de propriété en filtre de groupes par la programmation ?car si on a besoin de le faire, c'est pour ajouter manuellement des calque qui sont en dehors des propriétés,et dans ce cas, l'interface permet de créer le filtre de groupe, puis d'ajouter des objets.ci dessou un vielle discussion sur le sujet:Sujet anciena+gégé Tous d'abord (re) merci pour le lisp qui fonctionne parfaitement. je ne vois pas l’intérêt de transformer un filtre de propriété en filtre de groupes par la programmation ?car si on a besoin de le faire, c'est pour ajouter manuellement des calque qui sont en dehors des propriétés, Eh bien non, le lisp précédent ajoute tous les calques nécessaires pour mon filtre de groupe.Je crée des filtres de groupes pour n'afficher que les calques dont j'ai besoins en fonction des cas.Mais se n'est pas grave, le lisp précédent me fais gagner un temps fou. Merci à toi de ton aide.
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