Aller au contenu

renommer plusieurs blocs


Messages recommandés

Posté(e)

Bonjour,

 

Je cherche une astuce pour pouvoir renommer plusieurs blocs à la fois, en selectionnant des chaines de caracteres type, j'explique:

 

J'utilise la commande par le menu Format\renommer\bloc

 

Avec * j'arrive à renommer facilement les préfixe de mes blocs, mais je voudrais faire la meme chose n'importe quelle chaine de carateres.

 

Exemples:

des blocs qui s'appellent :

Vanne-DN1-FA

Vanne-DN2-FA

 

Avec

Anicen nom : Vanne*

nouveau nom Van*

ça marche tous ce qui avant l'asterisque est modifié

et devient Van-DNx-Fa

 

Moi je voudrais changer la fin càd remplacer FA par Vfa

qd je mets

ancien nom : *FA les blocs sont bien mis en surbrillance (sélectionnés) dans liste

nouveau nom : *Vfa ben il me change pas mon suffixe :(

 

Ou bien encore remplacer tous les "DN" par "diametre"

 

Est ce que quelqu'un aurait une façon faire ?

 

Merci d'avance !

 

Nb: j'ai plusieurs centaines de blocs à renommer...

 

 

Posté(e)

Hello,

 

Va voir là : Accueil du Forum > LISP et Visual LISP > Routines LISP > Lisps de Patrick_35

 

Il y a le lisp Ren qui est super !

 

A+

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)
...peut-être avec [surligneur]Lupas Rename 2000[/surligneur] à télécharger

içi....ou ailleurs... ;)

 

Merci de ton aide.

Mais ce n'est pas ce que je cherche car en fait mes blocs sont des blocs internes dans un seul fichier.

 

(Mais je le garde sous le coude il va m'être utile pour autre chose ;) )

Posté(e)
Hello,

 

Va voir là : Accueil du Forum > LISP et Visual LISP > Routines LISP > Lisps de Patrick_35

 

Il y a le lisp Ren qui est super !

 

A+

 

Salut,

 

Merci à toi (et à Patrick_35)

J'ai testé rapidement ça a l'air pas mal

sauf que pour le moment il renomme pas mes blocs...et une fois que je fais ok, il deplace le bloc sous le pointeur de la souris...

 

Je me pencherais la dessus lundi.

 

Merci !

Posté(e)

Re !

 

T'es sûr de la fonction lisp, chez moi ça marche !!

 

ren + espace

Choix des objet

Demande du nouveau nom

et on valide.

 

J'ai peut-être confondu les lisp !

 

Teste ça :

 

;;; Renomme le bloc sélectionné avant ou après le lancement de la commande

(defun c:ren (/ AcDoc ss ref name new)
(vl-load-com)
(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(if (and (= 1 (getvar "pickfirst"))
(setq ss (ssget "_I" '((0 . "INSERT"))))
(eq 1 (sslength ss))
)
(sssetfirst nil nil)
(progn
(sssetfirst nil nil)
(while (not (setq ss (ssget "_:S:E" '((0 . "INSERT")))))
)
)
)
(setq ref (vlax-ename->vla-object (ssname ss 0)))
(if (vlax-property-available-p ref 'EffectiveName)
(setq name (vla-get-EffectiveName ref))
(setq name (vla-get-Name ref))
)
(setq bloc (vla-item (vla-get-blocks AcDoc) name))
(while (not
(and (setq new (getstring "\nSpécifiez le nouveau nom : "))
(not (tblsearch "BLOCK" new))
(/= new "")
)
)
(if (tblsearch "BLOCK" new)
(princ (strcat "\Le bloc \"" new "\" existe déjà."))
)
)
(vla-put-Name bloc new)
(princ)
) 

 

C'est pas de moi, je suis une truffe en lisp...

 

A++

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)

 

Re !

 

T'es sûr de la fonction lisp, chez moi ça marche !!

 

ren + espace

Choix des objet

Demande du nouveau nom

et on valide.

 

Alors j'ai ressayer sur un autre pc et ça marche pas... Il renomme pas le bloc

J'ai bien la fenetre avec l'ancien nom du bloc à modifier, je change le nom et fais OK

Quand je regarde dans propriété, ben le bloc n'a pas changé de nom...

 

 

Teste ça :

 

C'est pas de moi, je suis une truffe en lisp...

 

A++

 

Celui là je l'avais déjà récupéré ;) mais je cherche qqchose pour traiter plusieurs blocs à la fois..

 

Merci de ton aide !

Posté(e)

Salut,

 

Ha non, ce lisp ne renomme que les blocs ayant le même nom... Sorry !

 

Amicalement.

 

Philippe.

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)
Salut

Essaye la commande _.rename

 

@+

 

J'ai essayé, c'est la commande normale ça non ?

Celle dont je parle dans mon premier post.

 

merci qd meme

Posté(e)

Ah oui, c'est exacte :red:

Ca m'apprendra à tout lire :cool:

Bon, du coup je vais me pencher sur ton problème et voir ce que je peux faire (pas avant demain soir) pour faire des chaînes de remplacements

 

@+

 

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)

Je viens de faire un test avec la commande _.rename et les * fonctionnent

Ex : *TOTO --> 45*TOTO et j'ai un 45 qui vient devant devant tout mes blocs se terminant par toto

 

@+

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)
Je viens de faire un test avec la commande _.rename et les * fonctionnent

Ex : *TOTO --> 45*TOTO et j'ai un 45 qui vient devant devant tout mes blocs se terminant par toto

 

@+

 

Oui tout à fait, mais moi c'est l'inverse que je n'arrive pas à faire : modifier la fin du nom

 

TOTO* -> TOTO*45 pour avoir 45 apres TOTO

Posté(e)

Salut,

 

Deux petits LISP, un pour les préfixes l'autre pour les suffixes.

 

(defun c:change_pref (/ old new name)
 (vl-load-com)
 (if (and
(setq old (getstring "\nEntrez le préfixe à changer: "))
(setq new (getstring "\nEntrez le nouveau préfixe: "))
     )
   (vlax-for b	(vla-get-blocks
	  (vla-get-ActiveDocument (vlax-get-acad-object))
	)
     (setq name (vla-get-Name b))
     (if (wcmatch name (strcat old "*"))
(vla-put-Name b (vl-string-subst new old name))
     )
   )
 )
 (princ)
)

(defun c:change_suff (/ old new name)
 (vl-load-com)
 (if (and
(setq old (getstring "\nEntrez le suffixe à changer: "))
(setq new (getstring "\nEntrez le nouveau suffixe: "))
     )
   (vlax-for b	(vla-get-blocks
	  (vla-get-ActiveDocument (vlax-get-acad-object))
	)
(setq name (vla-get-Name b))
     (if (wcmatch name (strcat "*" old))
(vla-put-Name
  b
  (vl-string-subst
    new
    old
    name
    (- (strlen name) (strlen old))
  )
)
     )
   )
 )
 (princ)
) 

 

En l'état la casse est respectée pour choisir les blocs qui seront renommés (si le préfixe entré est Vanne, vanne ne sera pas retenu).

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é