Aller au contenu

Remplacement blocs avec excel


fauxsuisse

Messages recommandés

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.

Lien vers le commentaire
Partager sur d’autres sites

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;ddd

Tu 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)
)

Lien vers le commentaire
Partager sur d’autres sites

hello fauxsuisse

je ne suis aps en expert en scirpt mais je pense que ça doit pouvoir se faire assez facilement avec le fonction CONCATENER d'Excel

tu pourras t'aider de ciprt de bryce : http://cadxp.com/index.php?/topic/33665-remplacement-de-bloc/page__view__findpost__p__181617

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

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é