fauxsuisse Posté(e) le 9 octobre 2012 Posté(e) le 9 octobre 2012 Bonjour tout le monde. Existe il un moyen de remplacer tout une série de plusieurs blocs par d'autre bloc en utilisant par exemple excel.J'ai un plan avec tout une série de blocs différent que je dois remplacer par d'autres blocs, il y a bien des lisp ou les express tools pour remplacer une série de blocs du même nom par un autre bloc mais si je dois faire l'action pour chaque type de bloc ça va être très long.L'idéal serait d'utiliser le même principe que pour les exportations d'attributs, d'avoir une colonne qui reprend les blocs insérés dans le dessin et remplacer par ceux d'une deuxième colonnes.
bryce Posté(e) le 9 octobre 2012 Posté(e) le 9 octobre 2012 Bonjour, Tu peux essayer avec le Lisp ci-dessous, que j'avais écrit en réponse à une autre demande sur le forum.Ça me semble correspondre à ce que tu as besoin de faire.Il nécessite un fichier txt contenant sur chaque ligne le nom d'un bloc à remplacer et le nom du bloc de remplacement, séparés par un point-virgule.ancienbloc;nouveaubloc old;new aaa;bbb ccc;dddTu pourras créer ce fichier depuis Excel assez facilement je pense.Évidemment, les nouveaux blocs devront soit exister dans le dessin, soit se trouver dans un chemin de recherche d'AutoCAD. (defun c:SWAPBLOCKS ( / acdoc ms *error* plist sep f l flst i ob nb ss vlnb ) ; Caractère de séparation entre l'ancien bloc et le nouveau dans le fichier texte: (setq sep ";") ; Liste des propriétés de l'ancien bloc à appliquer au bloc de remplacement ; (l'échelle en X, Y et Z et l'angle de rotation sont récupérés d'office): (setq plist '("Layer" "TrueColor" "Linetype" "LinetypeScale" "LineWeight")) (vl-load-com) (setq acdoc (vla-get-activedocument (vlax-get-acad-object)) ms (vla-get-modelspace acdoc)) (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (if ss (setq ss nil)) (vla-endundomark acdoc) (princ) ) (vla-startundomark acdoc) (setq flst '() f (getfiled "" "" "txt;csv;prn" 4)) (if (and f (setq f (open f "r"))) (progn (while (setq l (read-line f)) (setq flst (cons l flst)) ) (close f) (setq flst (reverse flst)) ) ) (foreach l flst (setq i (vl-string-search sep l) ob (substr l 1 i) nb (substr l (+ i 2))) (princ (strcat "\n\nRemplacement de " ob " par " nb ":")) (setq ss (ssget "_X" (list (cons 0 "INSERT")(cons 2 ob)(cons 410 "Model") ))) (if ss (if (or (tblsearch "BLOCK" nb) (setq nb (findfile (strcat nb ".dwg")))) (progn (setq i 0) (repeat (sslength ss) (setq ob (vlax-ename->vla-object (ssname ss i))) (setq vlnb (vla-insertblock ms (vla-get-InsertionPoint ob) nb (vla-get-XScaleFactor ob) (vla-get-YScaleFactor ob) (vla-get-ZScaleFactor ob) (vla-get-Rotation ob))) (foreach p plist (eval (read (strcat "(vla-put-" p " vlnb (vla-get-" p " ob))"))) ) (vla-delete ob) (setq i (+ 1 i)) );repeat (setq ss nil) (princ (strcat "\n" (itoa i) " blocs remplacés.")) );progn (princ (strcat "\nBloc " nb " non trouvé, remplacement non effectué.")) );if (princ (strcat "\nAucun bloc " ob " à remplacer.")) );if ss );foreach (*error* nil) ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
philsogood Posté(e) le 9 octobre 2012 Posté(e) le 9 octobre 2012 hello fauxsuisseje ne suis aps en expert en scirpt mais je pense que ça doit pouvoir se faire assez facilement avec le fonction CONCATENER d'Exceltu pourras t'aider de ciprt de bryce : http://cadxp.com/index.php?/topic/33665-remplacement-de-bloc/page__view__findpost__p__181617Phil Projeteur Revit Indépendant - traitement des eaux/CVC
fauxsuisse Posté(e) le 9 octobre 2012 Auteur Posté(e) le 9 octobre 2012 Merci les gars je vais tester tout ça, et je pense que je vais gagner pas mal de temps grâce à votre aide, merci encore.
fauxsuisse Posté(e) le 9 octobre 2012 Auteur Posté(e) le 9 octobre 2012 J'ai voulu essayer ton lisp mais lors du chargement il m'affiche l'erreur suivante:erreur: type d'argument incorect: numberp: nil
fauxsuisse Posté(e) le 9 octobre 2012 Auteur Posté(e) le 9 octobre 2012 Oups c'était une erreur de ma part j'ai dû mal copier le lisp. Tout fonctionne parfaitement et c'est exactement ce d'ont j'avais besoin. Bryce t'est un chef et je te remercie beaucoup
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