PHILPHIL Posté(e) le 8 avril 2010 Posté(e) le 8 avril 2010 hello le fameux "tabloblo" de TRAMBER modifié marchait bien pour les bloc normaux maintenant que j'ai des blocs parametriques ca marche un peu moins bien je desires filtrer par un bout de "nom" les blocs ( parnombloc1) il me selectionne bien les blocs sauf qu'il en sélectionne meme un peu trop il prend tous es blocs paramétrique maintenant " *U* " je voudrais refiltrer la liste "LIREF" avec "exclusive" pour ne garder que les blocs dont le nom contient parnombloc1 mais la je suis trop nul ca ne marche pas un peu d'aide ? merci a+ phil ;; TABLOBLO (Tramber) ;; Crée un tableau qui liste les blocs insérés (sélectionnés ou toute la collection) (defun c:tbc5 (/ blocks libloc ss col liref ptins tablevl cont row blk com1 com2) (vl-load-com) (setq cav (getvar "clayer")) (if (= (tblsearch "layer" "LES TABLEAUX") nil) (command "-calque" "n" "LES TABLEAUX" "co" "180" "LES TABLEAUX" "") ) (or *acdoc* (setq *acdoc* (vla-get-activedocument (vlax-get-acad-object))) ) (setq blocks (vla-get-blocks *acdoc*)) (setq liref nil) (setq parnombloc1 (getcfg "APPDATA/PARNOMBLOC1")) (setq nomtableau1 (getcfg "APPDATA/NOMTABLEAU1")) (setq nomtableau2 (getcfg "APPDATA/NOMTABLEAU2")) (setq com1 (getstring t (strcat "\nVEUILLEZ ENTRER UNE PARTIE DU NOM DES BLOCS A LISTER <" parnombloc1 "> : " ) ) ) (if (/= com1 "") (setq parnombloc1 com1) ) (setq com1 (getstring t (strcat "\nVEUILLEZ ENTRER LE DEBUT DU TITRE DU TABLEAU <" nomtableau1 "> : " ) ) ) (if (/= com1 "") (setq nomtableau1 com1) ) (setq com2 (getstring t (strcat "\nVEUILLEZ ENTRER LA FIN TITRE DU TABLEAU <" nomtableau2 "> : " ) ) ) (if (/= com2 "") (setq nomtableau2 com2) ) (setcfg "APPDATA/PARNOMBLOC1" parnombloc1) (setcfg "APPDATA/NOMTABLEAU1" nomtableau1) (setcfg "APPDATA/NOMTABLEAU2" nomtableau2) (setq test (strcat "*" parnombloc1 "*")) (prompt (strcat "\nle bout du nom de bloc est : " test)) (prompt "\nSélectionnez les blocs à lister ou <Toute la collection>" ) (or (setq ss (ssget (list '(0 . "INSERT") (cons 2 (strcat "*" parnombloc1 "*,`*U*")) ) ) ) (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 (strcat "*" parnombloc1 "*,`*U*")) ) ) col t ) ) (if ss (progn (vlax-for x (setq ss (vla-get-activeselectionset *acdoc*)) (or (vlax-property-available-p x 'path) (setq liref (cons (if (and (vlax-property-available-p x 'effectivename)) (vla-get-effectivename x) (vla-get-name x) ) liref ) ) ) ) (vla-delete ss) ) ) (if col (vlax-for i (vla-get-blocks *acdoc*) (if (= parnombloc1 "*") (progn (if (and (not (wcmatch (setq name (vla-get-name i)) "`**,*|*")) (= :vlax-false (vla-get-isxref i)) ) (setq libloc (cons (vla-get-name i) libloc)) ) ) (progn (if (and (wcmatch (setq name (vla-get-name i)) (strcat "*" parnombloc1 "*") ) (= :vlax-false (vla-get-isxref i)) ) (setq libloc (cons (vla-get-name i) libloc)) ) ) ) ) (setq libloc (remove_doubles liref)) ) (setq libloc (vl-sort (vl-remove-if-not '(lambda (x) (wcmatch x (strcat "*" parnombloc1 "*"))) libloc ) '< ) ) (initget 1) (command "-calque" "ac" "LES TABLEAUX" "ch" "LES TABLEAUX" "") (setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0)) (setq test2 (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) ) (setq tablevl (vla-addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax-3d-point ptins) (+ 3 (length libloc)) 3 120 ; Hauteur cellule 250 ; Largeur cellule ) ) (vla-put-vertcellmargin tablevl 4.0) ; Marge verticale (vla-put-titlesuppressed tablevl :vlax-false) (vla-put-headersuppressed tablevl :vlax-false) (vla-put-stylename tablevl "TABLEAU BLOCS") ;STYLE DE TABLEAU PREDEFINI (vla-settext tablevl 0 0 (strcat nomtableau1 nomtableau2)) ; Titre (vla-settext tablevl 1 0 "Nom") ; Titre colonne 1 (vla-settext tablevl 1 1 "Nombre") ; Titre colonne 2 (vla-settext tablevl 1 2 "Symbole") ; Titre colonne 3 (vla-settext tablevl (+ 2 (length libloc)) 0 "TOTAL") ; TOTAL DERNIERE LIGNE (vla-settext tablevl (+ 2 (length libloc)) 1 (strcat "=Sum(B3:B" (rtos (+ 2 (length libloc)) 2 0) ")") ) ; TOTAL DERNIERE LIGNE (vla-setcellalignment tablevl (+ 2 (length libloc)) 0 5) (vla-setcellalignment tablevl (+ 2 (length libloc)) 1 5) (setq cont -1 row 1 ) (setq nbobj (+ 1 (length libloc))) (repeat (- (vla-get-rows tablevl) 2) (setq blk (nth (setq cont (1+ cont)) libloc)) ;; Nom du bloc (colonne A) (vla-settext tablevl (setq row (1+ row)) 0 blk) ;; Nombre de blocs (colonne B) (vla-settext tablevl row 1 (length (vl-remove-if-not '(lambda (n) (= n blk)) liref)) ) ;; Symbole (colonne C) (vla-setblocktablerecordid tablevl row 2 (vla-get-objectid (vla-item blocks blk)) :vlax-true ) (vla-setcellalignment tablevl row 0 5) (vla-setcellalignment tablevl row 1 5) (vla-setcellalignment tablevl row 2 5) (prompt (strcat "\rENTITE(S) TRAITEE(S) : " (rtos row 2 0) " SUR : " (rtos nbobj 2 0) ) ) ) (setvar "clayer" cav) (princ) ) <font class=edite>[Edité le 8/4/2010 par PHILPHIL]</font> FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 8 avril 2010 Posté(e) le 8 avril 2010 Salut, il prend tous es blocs paramétrique maintenant " *U* " normal, ils sont contenus dans le filtre de sélection : (cons 2 (strcat "*" parnombloc1 "*[surligneur],`*U*"[/surligneur])) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PHILPHIL Posté(e) le 8 avril 2010 Auteur Posté(e) le 8 avril 2010 hello oups j'ai du mal m'expliquer il faut bien sur qu'il selectionne tous les blocs meme les parametriquesmais ne fasse la liste dans le tableau que des blocs dont le nom comporte un bout de nom "parambloc1" si je ne selectionne par "*U*" au debut il en manque dans la tableau je peux tres bien avoir un bloc normal nommé "porte"et des blocs paramétrique nommer "porte fenetre" et vouloir la liste / tableau de tous les blocs nommer "*porte*" ceci etant un exemple bien sur l'ideal serait de remplacerceci (cons 2 (strcat "*" parnombloc1 "*,`*U*")) par un truc allant chercher / filtrant directement le "effectivename" = "*"parnombloc"*" a+phil soit j'enleve le "*U*" FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 8 avril 2010 Posté(e) le 8 avril 2010 salut, on ne peut pas filtrer directement su le EffectiveName mais il est facile de supprimer de la liste libloc tous les noms de blocs qui ne correspondent pas à tes critères : (setq libloc (vl-sort (vl-remove-if-not '(lambda (x) (wcmatch x (strcat "*" parnombloc1 "*"))) ) ' ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PHILPHIL Posté(e) le 8 avril 2010 Auteur Posté(e) le 8 avril 2010 HELLO GILE ok je vais regarder ca merci tu avais fait une fonction appeler "exclusive" elle ne faisait pas la meme chose ?j'ai essayer de la mettre dans le code sur le message N°1 haaa petite mise a jour il manque un libloc (setq libloc (vl-sort (vl-remove-if-not '(lambda (x) (wcmatch x (strcat "*" parnombloc1 "*"))) libloc ) '< )) le code au dessus est mis a jour a+ phil [Edité le 8/4/2010 par PHILPHIL] FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 8 avril 2010 Posté(e) le 8 avril 2010 la fonction exclusive compare deux liste (l1 et l2) et retourne la liste des éléments de l1 qui ne sont pas dans l2. (exclusive '(1 2 3 4 5) '(4 5 6 7)) retourne (1 2 3) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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