Aller au contenu

[Résolu] Remplacement massif de bloc A$C....


Messages recommandés

Posté(e)

Bonjour à tous,

 

mon problème est le suivant:

 

je viens de récupérer une grosse cinquantaine de fichiers ( ARCHI dry.gif ) 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

Posté(e)

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 Engineer

I7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.

Posté(e)

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

Posté(e)

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...

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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....

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é