Aller au contenu

tableau de bloc ( encore )


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

hello

 

 

oups j'ai du mal m'expliquer

 

il faut bien sur qu'il selectionne tous les blocs meme les parametriques

mais 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 remplacer

ceci

 (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

Posté(e)

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

Posté(e)

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

Posté(e)

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

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é