tazofparis Posté(e) le 29 juin 2012 Posté(e) le 29 juin 2012 Bonjour à tous, mon problème est le suivant: je viens de récupérer une grosse cinquantaine de fichiers ( ARCHI ) dans lesquels j'ai beaucoup de blocs A$C... (ceux qui sont créer par autocad avec un CTRL+MAJ+C ET CTRL+MAJ+V), un pour chaque porte et pour chaque fenêtre.L'idée serait de renommer tous les blocs sélectionnés en TOTO avec une incrémentation automatique du nom genre TOTO1 TOTO2 TOTO3 (tout en pouvant choisir le n° de départ car il va falloir faire plusieurs sélections dans un même fichier) et en rajoutant les attributs défini dans un bloc "modèle". Le renseignement de ces attributs se faisant plus tard. En espérant avoir été clair. Amicalement Pierre
Fundream Posté(e) le 29 juin 2012 Posté(e) le 29 juin 2012 Je ne peut pas solutionner ton problème mais je compatis grandement. Les plans d'archi c'est une plaie... Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
tazofparis Posté(e) le 29 juin 2012 Auteur Posté(e) le 29 juin 2012 Je ne peut pas solutionner ton problème mais je compatis grandement. les plans d'archi c'est une plaie... Merci , c'est déjà ça de ne pas se sentir seul .... :(rires forts):
x_all Posté(e) le 29 juin 2012 Posté(e) le 29 juin 2012 et ceux qui plantent 50 fois le même arbres avec des blocs arb1, arb2, arb3..... grrrrr désolé... je fait pas avancer le smilblic non plus.... quelques trucs sur autocad
tazofparis Posté(e) le 29 juin 2012 Auteur Posté(e) le 29 juin 2012 et ceux qui plantent 50 fois le même arbres avec des blocs arb1, arb2, arb3..... grrrrr désolé... je fait pas avancer le smilblic non plus.... pour le coup pour toi il faut que tu utilises le Rbloc-v2.22 de Patrick35 ... marche nickel pour ce genre de choses...
rebcao Posté(e) le 29 juin 2012 Posté(e) le 29 juin 2012 Bonjour, Voici un petit fichier EXCEL où tu entres ta liste de bloc dans le 1ère colonne et tu indiques le Nouveau nom dans la 2e colonne... Tu profites de toutes les facilités d'EXCEL pour faire ta salade... Tu cliques sur l'image et il crée un fichier SCRIPT (Renommer_BLOCS.SCR) dans le dossier C:\TEMP qui doit exister ! On peut optimiser tout ça avec 1 ou 2 MACROS... Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
tazofparis Posté(e) le 29 juin 2012 Auteur Posté(e) le 29 juin 2012 Bonjour, Voici un petit fichier EXCEL où tu entres ta liste de bloc dans le 1ère colonne et tu indiques le Nouveau nom dans la 2e colonne... Tu profites de toutes les facilités d'EXCEL pour faire ta salade... Tu cliques sur l'image et il crée un fichier SCRIPT (Renommer_BLOCS.SCR) dans le dossier C:\TEMP qui doit exister ! On peut optimiser tout ça avec 1 ou 2 MACROS... Christian Merci de ta réponse, mais, j'aimerai que tout cela se passe sous autocad à partir de la sélection en cours, par ailleurs les attributs ne sont pas rajoutés. Dans l'idée j'ai 30 portes de 90 ouvrant gauche, 20 ouvrant droit de 85, des fenêtres et autre objets tous avec des noms à la con type A$c... je les sélectionne, puis le lisp renomme en P90G1 P90G2 P90G3.... et rajoute des attribut au bloc qui pourrait être hauteur, largeur, résistance au feu ...., tout cela fonction d'un bloc vide contenant uniquement les attributs. Pour en revenir à ta macro, faut il l'utiliser avec scriptor? de Patrick35 je crois. Par ailleurs on doit faire les export au fure et mesure... mais bon en l'abscence d'autre solution .... En tout cas merci de ton aide. Pierre
tazofparis Posté(e) le 2 juillet 2012 Auteur Posté(e) le 2 juillet 2012 Bon je relance, pour compléter la solution partielle proposée par rebcao, il faudrait pouvoir copier et créer des attributs d'un bloc source sur une sélection de blocs.... A vot'bon coeur m'sieur dames .... ;) Pierre
tazofparis Posté(e) le 3 juillet 2012 Auteur Posté(e) le 3 juillet 2012 Bonjour, en parcourant un autre forum je suis tombé sur un post de Patrick35 avec un lisp CTA (en PJ).Ce lisp fait bien la copie d'attribut, mais il demande plusieurs choses: 1 de choisir un attribut de référence 2 de choisir son étiquette 3 de choisir son invite pourrait on modifier le lisp pour que tout les attributs du blocs de référence soient copiés et que les étiquettes et les invites soient les mêmes que celle du bloc de référence? en gros il ne pose plus de question ... ;) Merci !cpa.zip
Patrick_35 Posté(e) le 3 juillet 2012 Posté(e) le 3 juillet 2012 Salut Un truc vite fait (defun c:nbl(/ doc ent sel incsuff) ;; INCSUFF (version 1.2) -Gilles Chanteau- 15/01/08 ;; Incrémente le suffixe d'une chaîne de caractères de la valeur spécifiée. ;; Est pris en compte comme suffixe, l'ensemble des caractères [0-9] et/ou [A-Z] ;; et/ou [a-z] depuis la fin du texte, en fonction de la valeur de alpha ;; ;; Arguments ;; str : une chaîne avec un suffixe valide ;; inc : un entier positif ;; alpha : un entier, somme des codes binaires suivant ;; 1 pour les caractères [0-9] ;; 2 pour les caractères [A-Z] ;; 4 pour les caractères [a-z] ;; ;; Retour ;; la chaîne avec son suffixe incrémenté (ou nil si aucun suffixe valide) ;; ;; Exemples : ;; (incsuff "N°002" 12 1) = "N°014" ;; (incsuff "Dessin9" 1 1) = "Dessin10" ;; (incsuff "test_ZZ9" 1 3) = "test_AAA0" ;; (incsuff "test_ZZ9" 1 1) = "test_ZZ10" ;; (incsuff "12-" 1 1) = nil ;; ;; Modification (13/02/08) : codes binaires pour l'argument alpha (defun incsuff (str inc alpha / lst crt pas ind dep quo ret) (setq lst (reverse (vl-string->list str))) (while (and (setq crt (car lst)) (cond ((and (< 47 crt 58) (= 1 (logand 1 alpha))) (setq pas 10 ind 48 ) ) ((and (< 64 crt 91) (= 2 (logand 2 alpha))) (setq pas 26 ind 65 ) ) ((and (< 96 crt 123) (= 4 (logand 4 alpha))) (setq pas 26 ind 97 ) ) ((< 0 quo) (setq crt (if (= 10 pas) ind (1- ind) ) lst (cons (car lst) lst) ) ) ) ) (setq dep (- crt ind) quo (/ (+ dep inc) pas) ret (cons (+ ind (rem (+ dep inc) pas)) ret) ) (if (zerop quo) (setq ret (append (reverse (cdr lst)) ret) lst nil ) (if (cdr lst) (setq lst (cdr lst) inc quo ) (setq lst (list ind) inc (if (= 10 pas) quo (1- quo) ) ) ) ) ) (if ret (vl-list->string ret) ) ) (vl-load-com) (and (setq txt (getstring T "\nEntrez la valeur de départ : ")) (ssget (list (cons 0 "insert" ))) (progn (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (while (tblsearch "block" txt) (setq txt (incsuff txt 1 7)) ) (vla-converttostaticblock ent txt) ) (vla-delete sel) (vla-endundomark doc) ) ) (princ) ) ps : pour le nom du bloc, "Test_009" donnera ensuite "Test_010". "Test9" donnera ensuite "Tesu0" @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
tazofparis Posté(e) le 3 juillet 2012 Auteur Posté(e) le 3 juillet 2012 S-U-P-E-R !!! ça marche au poil le renommage des blocs est un succès total. <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> Penses tu pouvoir faire quelque chose pour la modif de ton lisp CTA? D'avance merci. Pierre <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> autant pour moi c'est le lisp CPA....
Patrick_35 Posté(e) le 3 juillet 2012 Posté(e) le 3 juillet 2012 D'après ce que je vois, le lisp cpa copie l'étiquette (et non la valeur) d'un bloc vers d'autres blocs.Je ne comprends pas bien la question.Une recopie d'attributs ? Alors, utilise CAT @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
tazofparis Posté(e) le 3 juillet 2012 Auteur Posté(e) le 3 juillet 2012 Patrick, effectivement le lisp CPA copie un des attributs d'un bloc en demandant de choisir le nom de l'étiquette et le texte de l'invite et ce pour un seul attribut à la fois. mon besoin est de faire une "copie brutale" de tous les attributs d'un bloc "origine" sur X blocs en conservant les étiquettes et les invites telles que définies dans le bloc "origine". Pierre
Patrick_35 Posté(e) le 3 juillet 2012 Posté(e) le 3 juillet 2012 Version avec le choix du bloc de base(defun c:dca(/ bl def doc ent lst new pro tab sel nom_bl) (defun nom_bl(bl) (if (vlax-property-available-p bl 'effectivename) (vla-get-effectivename bl) (vla-get-name bl) ) ) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (princ "\nSélectionnez le bloc de base : ") (and (setq bl (ssget ":E:S" (list (cons 0 "insert") (cons 66 1)))) (princ "\nSélectionnez les blocs auxquels ajouter les attributs : ") (ssget (list (cons 0 "insert"))) (progn (setq bl (vlax-ename->vla-object (ssname bl 0)) bl (vla-item (vla-get-blocks doc) (nom_bl bl)) ) (vlax-for ent bl (and (eq (vla-get-objectname ent) "AcDbAttributeDefinition") (setq lst (cons ent lst)) ) ) (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (or (member (nom_bl ent) tab) (progn (setq bl (vla-item (vla-get-blocks doc) (nom_bl ent))) (foreach def (reverse lst) (setq new (vla-addattribute bl (vla-get-height def) (vla-get-mode def) (vla-get-promptstring def) (vla-get-insertionpoint def) (vla-get-tagstring def) (vla-get-textstring def) ) ) (foreach pro '( 'alignment 'backward 'color 'constant 'fieldlength 'invisible 'layer 'linetype 'linetypescale 'lineweight 'lockposition 'material 'mtextattribute 'mtextattributecontent 'normal 'obliqueangle 'preset 'rotation 'scalefactor 'stylename 'textalignmentpoint 'thickness 'upsidedown 'verify 'visible) (and (vlax-property-available-p new (eval pro)) (vl-catch-all-apply 'vlax-put (list new (eval pro) (vlax-get def (eval pro)))) ) ) ) (setq tab (cons (nom_bl ent) tab)) (vl-cmdf "_.attsync" "_name" (nom_bl bl)) ) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) Version avec le nom du bloc de base renseigné dans le lisp (évite une sélection)(defun c:dca(/ bl def doc ent lst new pro tab sel nom_bl) (defun nom_bl(bl) (if (vlax-property-available-p bl 'effectivename) (vla-get-effectivename bl) (vla-get-name bl) ) ) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (princ "\nSélectionnez le bloc de base : ") (and (setq bl "LE_NOM_DU_BLOC_DE_BASE") (princ "\nSélectionnez les blocs auxquels ajouter les attributs : ") (ssget (list (cons 0 "insert"))) (progn (setq bl (vla-item (vla-get-blocks doc) bl) ) (vlax-for ent bl (and (eq (vla-get-objectname ent) "AcDbAttributeDefinition") (setq lst (cons ent lst)) ) ) (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (or (member (nom_bl ent) tab) (progn (setq bl (vla-item (vla-get-blocks doc) (nom_bl ent))) (foreach def (reverse lst) (setq new (vla-addattribute bl (vla-get-height def) (vla-get-mode def) (vla-get-promptstring def) (vla-get-insertionpoint def) (vla-get-tagstring def) (vla-get-textstring def) ) ) (foreach pro '( 'alignment 'backward 'color 'constant 'fieldlength 'invisible 'layer 'linetype 'linetypescale 'lineweight 'lockposition 'material 'mtextattribute 'mtextattributecontent 'normal 'obliqueangle 'preset 'rotation 'scalefactor 'stylename 'textalignmentpoint 'thickness 'upsidedown 'verify 'visible) (and (vlax-property-available-p new (eval pro)) (vl-catch-all-apply 'vlax-put (list new (eval pro) (vlax-get def (eval pro)))) ) ) ) (setq tab (cons (nom_bl ent) tab)) (vl-cmdf "_.attsync" "_name" (nom_bl bl)) ) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
tazofparis Posté(e) le 3 juillet 2012 Auteur Posté(e) le 3 juillet 2012 Patrick, un grand merci pour tes réponse et ta disponibilité. Ces deux lisp (NBL et DCA) répondent parfaitement au besoin. Amicalement Pierre
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