Aller au contenu

Renommer un bloc


Messages recommandés

Invité Patrick
Posté(e)

A quand la possibilité de renommer une définition de bloc en renommant une de ses instances depuis la fenêtre Propriétés? Allez, Autodesk, encore un effort!

Posté(e)

Salut,

 

En attendant on peut toujours utiliser ce petit LISP qui permet la sélection de la référence avant le lancement de la commande (si PICKFIRST est à 1) et peut donc d'être glissé dans le Menu contextuel des objets de référence de bloc.

 

http://img324.imageshack.us/img324/4304/renomblockc2.png

 

Le code :

 

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

(defun c:rename_block (/ 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)
) 

 

[Edité le 7/8/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Ca serait chouêeeette !

 

Pour les utilisateurs d'AutoCAD LT, je propose un copier/coller du bloc dans un nouveau dessin, l'utilisation de la commande 'renommer' puis à nouveau un copier/coller vers le dessin d'origine.

Attention à l'échelle des objets insérés du contrôle des unités. Ca surprend parfois.

 

Nomutt,

Consultant, Responsable Projets CAD/PLM

'Add-ins pour Inventor + Trucs et Astuces.

Disponible pour un poste administrateur CAO/PLM.

Invité Patrick
Posté(e)

Rêvons un peu, clic droit + renommer sur n'importe quel objet qui a un nom, révolutionnaire, non?

Bon, je suis un peu sarcastique... j'avoue, mais la commande clic droit/renommer dans un logiciel comme AutoCAD, ça manque depuis un certain temps, disons vingt ans, alors on trouve le temps long... :casstet:

Posté(e)

Bonjour,

 

en placant dans le pop 512 du fichier mnu cette incantation on a le meme resultat du lisp de gile

 

**OBJECT_BLOCKREF

[Menu contextuel de l'objet BLOC]

ID_Explode [Déco&mposer]^C^C_explode

ID_Ddrename [&Renommer]^P(setvar "USERS1" (cdr (assoc 2 (entget (ssname (cadr (ssgetfirst)) 0)))));_-RENAME;BL;(getvar "USERS1")

 

mais il est vrai que cela renomme tout les blocs

si on veut en isoler un pour pouvoir le modifier a souait sa marche pas :P

Posté(e)

Salut Patrick

Et avec ce lisp ?

 

@+

 

(defun Clic_Droit_Renommer(Rea Pt / Bk Bks Nom Sel Txt)

 (defun MsgBox (Titre Bouttons Message / Reponse WshShell)
   (setq WshShell (vlax-create-object "WScript.Shell"))
   (setq Reponse  (vlax-invoke WshShell 'Popup Message 7 Titre (itoa Bouttons)))
   (vlax-release-object WshShell)
   Reponse
 )

 (defun InputBox (Titre Message Defaut / *acad* users1 valeur)
   (setq *acad* (vlax-get-acad-object) users1 (getvar "users1"))
   (acad-push-dbmod)
   (vla-eval *acad* (strcat "ThisDrawing.SetVariable \"USERS1\"," "InputBox (\"" Message "\", \"" Titre "\", \"" Defaut "\")"))
   (setq valeur (getvar "users1"))
   (setvar "users1" users1)
   (acad-pop-dbmod)
   valeur
 )

 (if (setq Sel (ssget (car Pt)))
   (progn
     (setq Sel (vlax-ename->vla-object (ssname Sel 0)))
     (if (eq (vla-get-ObjectName Sel) "AcDbBlockReference")
       (progn
         (if (vlax-property-available-p Sel 'EffectiveName)
           (setq nom (vla-get-EffectiveName Sel))
           (setq nom (vla-get-Name Sel))
         )
         (if (setq Txt (InputBox "Renommer Bloc" "Veuillez donner un nouveau nom au bloc" Nom))
           (if (not (eq (strcase Txt) (strcase Nom)))
             (if (not (eq Txt ""))
               (progn
                 (setq Bks (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
                 (if (vla-item Bks Txt)
                   (MsgBox "Renommer Bloc" 16 "Nom de bloc déjà existant. Rien de changé")
                   (progn
                     (setq Bk (vla-item Bks Nom))
                     (vla-put-name Bk Txt)
                   )
                 )
               )
             )
             (MsgBox "Renommer Bloc" 48 "Nom identique. Rien de changé")
           )
         )
       )
     )
   )
 )
 (princ)
)

(defun creation_reacteur_renommer (/ i j n)
 (vl-load-com)
 (if (vlr-reactors :vlr-mouse-reactor) ; si déjà un réacteur dans :vlr-mouse-reactor
   (progn
     (setq n 1)
     (while (setq i (nth n (car (vlr-reactors :vlr-mouse-reactor))))
       (if (eq (cdr (car (vlr-reactions i))) 'CLIC_DROIT_RENOMMER)
         (setq j i)
       )
       (setq n (1+ n))
     )
     (if j
       (vlr-remove j)
     )
   )
 )
 (setq mrea_ren (vlr-mouse-reactor nil '((:vlr-beginRightClick . Clic_Droit_Renommer))))
 (princ "\nClic droit pour Renommer les blocs ACTIF.")
 (princ)
)

(if (not mrea_ren)
 (creation_reacteur_renommer)
)
(princ)

 

[Edité le 7/8/2006 par Patrick_35]

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)

(setq WshShell (vlax-create-object "WScript.Shell"))

(setq Reponse (vlax-invoke WshShell 'Popup Message 7 Titre (itoa Bouttons)))

 

C'est pas bientôt fini de frimer !? :cool:

 

Tu crois que je sais pas où tu as attrapé ce bout de code :D

 

Sinon, renommer une insertion de bloc pourrait être sympa mais alors je vois bien l'éditeur se mettre en route automatiquement, histoire que les gens fassent le distingo. Et puis j'imagine une option qui permet d'en cliquer d'autres dans la foulée de l'opération, tant qu'on y est. Ca serait pratique.

 

[Edité le 7/8/2006 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)
C'est pas bientôt fini de frimer !? :cool: [/code]

Non, non :cool:

 

Tu crois que je sais pas où tu as attrapé ce bout de code :D

Je sais mais il est tellement génial que je ne vais pas m'en priver ;)

 

@+

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)

Salut Patrick_35,

 

Ton LISP est encore une belle démonstration d'utilisation des réacteurs.

 

Juste deux petites remarques, tu ne testes pas si le nouveau nom n'est pas déjà dans la collection, et pour les blocs dynamiques (anonymes) il faut récupérer le EffectiveName de la référence qui correspond au Name de la définition :

 

(if (vlax-property-available-p ref 'EffectiveName)
(setq name (vla-get-EffectiveName ref))
(setq name (vla-get-Name ref))
)

 

PS : J'ai failli te piquer ton "InputBox" pour mon LISP, je ne regrettes pas de t'en avoir laissé la primeur ;)

 

[Edité le 7/8/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

tu ne testes pas si le nouveau nom n'est pas déjà dans la collection

Pourquoi faire ? Comme c'est depuis un clic droit dans le dessin, le nom est forcement dans la collection

 

our les blocs dynamiques (anonymes) il faut récupérer le EffectiveName de la référence qui correspond au Name de la définition

Tu as raison, je n'ai pas encore le réflexe des blocs dynamiques

 

J'ai failli te piquer ton "InputBox" pour mon LISP, je ne regrettes pas de t'en avoir laissé la primeur ;)

 

Tu pouvais, je ne suis pas jaloux. Et d'aiileurs, je cherche en ce moment comment faire le même InputBox mais en utilisant le wscript.

 

@+

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)

Pourquoi faire ? Comme c'est depuis un clic droit dans le dessin, le nom est forcement dans la collection

 

Je parle du nom que tu récupères avec l'input-box, et de tester si ce nom n'est pas déjà utilisé par un autre bloc du dessin, je fais :

 

(while (not

(and (setq new (getstring "\nSpécifiez le nouveau nom : "))

(not (tblsearch "BLOCK" new))

(/= new "")

)

)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Ah oui, exacte

Je crois que j'ai écrit un peu trop vite ce lisp ;)

 

Et puisque le sujet s'y prete, à quand un lisp avec des réacteurs :D

 

@+

 

[Edité le 7/8/2006 par Patrick_35]

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

  • 2 mois après...
Posté(e)

@Patrick.

Toucher aux fonctinalités de strict changement des paramètres existants toucheraient à l'ergonomie et à la logique de l'onglet propriétés.

Par contre plus globalement on pourrait lui adjoindre des fonctionalités d'édition.

Posté(e)

Salut Bilbeau (le hobbit ?)

Je ne comprends pas le sens de ta remarque :casstet:

Si un souhait peut-être réalisé par le biais de réacteur, cela va dans le sens de l'ergonomie de l'utilisateur ?

 

@+

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

  • 1 an après...
Posté(e)

Bonjour Patrick_35 et tout le monde !

 

J'ai récupère REN V1.01 se trouve dans sujet de "Lisps de Patrick_35", je te remercie et je l'excute.

Je clique droit pour renommer un bloc, je tape un nom "test" au lieu de "A$C4B250EC4" (bloc de copier/coller)

puis ok, le message de commande: "; erreur: Erreur Automation Clé introuvable" !

 

Pourquoi et que fais je ?

 

Merci de votre aide,

PascAnna.

 

P.S. Avec Autocad 2009 / Architecture 2009

 

[Edité le 10/7/2008 par PascAnna]

Avec Autocad 2009 / Architecture 2009

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é