Neo83 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Bonjour à toutes et à tous,En 2006 Serge1591 a posé une question sur l'incrémentation des nom de blocs. Le résultat est que l'on obtient un préfixe donné par l'utilisateur et un numéro d'ordre donné par la machine pour nom du bloc. Ex FRE_001, FRE_002... J'ai besoin de mettre un préfixe devant les noms de blocs existants dans un dessin. Donc garder le nom du bloc EX: luminaire 2x18W et d'en faire SA_luminaire 2x18W pour nom de bloc final. Si je peux sélectionner les blocs dont je veux changer le nom ce serait Grand Lux. Quelqu'un peut-il m'aider? Merci pour vos réponses. Sans nous, les machines ne sont rien
lili2006 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Bonjour à toutes et tous, Avec INCR de (gile), Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Neo83 Posté(e) le 4 novembre 2009 Auteur Posté(e) le 4 novembre 2009 Bonjour lili2006,Je vous remrcie pour ce lien. Mais il me semble que ces LISP traitent les attributs de blocs.Ce que je cherche c'est de changer le nom du bloc. Dans mon affaire existent des bloc qui ont un nom. Je voudrais garder ce nom de bloc et ejouter devant un préfixe SA_.Pour exemple si j'ai un bloc qui se nomme porte, je voudrai le renommer SA_porte.J'ai une mutitude de bloc sur 7 fichiers. D'où mon besoin d'un traitement automatique.Merci à vous. Sans nous, les machines ne sont rien
lili2006 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Re, Oui, désolé, ;) Il y à bien celui-ci => (Je ne connais plus l'auteur,...) (defun c:cnbloc (/ bloc anciennom nouveaunom js x nom_ent ent name) (while (or (not (setq bloc (car (entsel "\nSélectionner un bloc :")))) (/= (cdr (assoc 0 (entget bloc))) "INSERT") ) ) (setq anciennom (cdr (assoc 2 (entget bloc)))) (princ "\nVoici le nom actuel:") (print anciennom) (setq nouveaunom (getstring "\nIndiquez le nouveau nom :")) ;VERIFICATION DU NOUVEAU NOM (setq js (ssget "X" '((0 . "INSERT")))) (sslength js) (setq x 0) (while (/= x (sslength js)) (setq nom_ent (ssname js x)) (setq ent (entget nom_ent)) (setq name (cdr (assoc '2 ent))) (if (= name nouveaunom) (progn (while (= name nouveaunom) (alert "Ce nom de bloc existe déjà") (setq nouveaunom (getstring "\nIndiquez le nouveau nom :")) ) ) ) (setq x (+ x 1)) ) (command "-renommer" "bl" anciennom nouveaunom "") ) Il te suffit de rajouter le préfixe qui t'intéresse suivi de son nom actuel,.. Tu aurais du poster dans le forum lisp,.. Mais en attendant que d'autres plus expérimentés répondent, tu dois pouvoir faire ce que tu souhaites avec celui-ci,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Salut, Je viens de faire un truc du genre qui fonctionne aussi avec les blocs imbriqués. (defun c:prefblk (/ getNestedNames remove_duplicates ss n ent name lst) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) (defun getNestedNames (name / n l) (vlax-for o (vla-Item *blocks* name) (if (= (vla-get-ObjectName o) "AcDbBlockReference") (setq n (if (vlax-property-available-p o 'EffectiveName) (vla-get-EffectiveName o) (vla-get-name o) ) l (append (list n) (getNestedNames n) l) ) ) ) l ) (defun remove_duplicates (lst) (if lst (cons (car lst) (remove_duplicates (vl-remove (car lst) lst))) ) ) (initget "Oui Non") (or (= (setq nest (getkword "\nTraiter les blocs imbriqués ? [Oui/Non] : ")) "Non" ) (setq nest "Oui") ) (if (setq pref (getstring "\nEntrez le prefixe: ")) (progn (vla-StartUndoMark *acdoc*) (princ "\Sélectionnez le bloc à renommer (ou Entrée pour tous)") (if (ssget '((0 . "INSERT"))) (progn (vlax-for b (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (setq name (if (vlax-property-available-p b 'EffectiveName) (vla-get-EffectiveName b) (vla-get-name b) ) ) (if (not (vl-position name lst)) (setq lst (if (= nest "Oui") (append (list name) (getNestedNames name) lst) (cons name lst) ) ) ) ) (vla-delete ss) (foreach n (remove_duplicates lst) (vla-put-Name (vla-item *blocks* n) (strcat pref n)) ) ) (vlax-for b *blocks* (if (and (= (vla-get-IsLayout b) :vlax-false) (= (vla-get-IsXref b) :vlax-false) (not (wcmatch (setq name (vla-get-Name b)) "*|*")) ) (vla-put-Name b (strcat pref name)) ) ) ) (vla-EndUndoMark *acdoc*) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Re, Salut Gilles, Ne fonctionne pas chez moi ?!! Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 :casstet: C'est quoi qui ne fonctionne pas ?Le préfixe n'est pas ajouté aux noms des blocs traités ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Re, Ben oui ! Ligne de commande => PREFBLKTraiter les blocs imbriqués ? [Oui/Non] : NEntrez le prefixe: tSélectionnez le bloc à renommer (ou Entrée pour tous)Choix des objets: Spécifiez le coin opposé: 2 trouvé(s)Choix des objets:; erreur: type d'argument incorrect: VLA-OBJECT nil J'ai peut-être mal copié le code,.. Je reteste, EDIT : Idem en recopiant le code,.. désolé, je n'avais pas pensé à regarder ma ligne de commande tout à l'heure,... ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Bien vu Lilian.C'était un "effet de bord" dû à une variable globale qui traînait.C'est réparé. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Re, Super de pouvoir sélectionner toute une collection d'un trait,:D "effet de bord" Heu, c'est à dire , Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 En informatique, une fonction est dite à effet de bord si elle modifie un état autre que sa valeur de retour. La routine faisait appel à une variable globale qui n'existait que chez moi... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Re, Si on répond oui à des blocs non imbriqué => PREFBLKTraiter les blocs imbriqués ? [Oui/Non] : OEntrez le prefixe: testSélectionnez le bloc à renommer (ou Entrée pour tous)Choix des objets: Spécifiez le coin opposé: 3 trouvé(s)Choix des objets:; erreur: type d'argument incorrect: VLA-OBJECT nilCommande:Commande:PREFBLKTraiter les blocs imbriqués ? [Oui/Non] : NEntrez le prefixe: testSélectionnez le bloc à renommer (ou Entrée pour tous)Choix des objets: Spécifiez le coin opposé: 3 trouvé(s) Sur des blocs déjà en place,les "préfixes" s'ajoutent,... Mais, c'est peut-être normal,. ;) c'est juste pour faire avancer le shimililimiliblick,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Il y en avait une deuxième...C'est réparé. Sur des blocs déjà en place,les "préfixes" s'ajoutent,... Mais, c'est peut-être normal,. Oui, le préfixe est ajouté au nom courant du bloc. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Re, Oui, le préfixe est ajouté au nom courant du bloc. Ben, oui, j'suis c - n moi,... Il y en avait une deuxième... C'est à dire, pour les blocs imbriqués ? , (Si c'est le cas, toujours ce message d'erreur chez moi => Commande: prefblkTraiter les blocs imbriqués ? [Oui/Non] :Entrez le prefixe: testSélectionnez le bloc à renommer (ou Entrée pour tous)Choix des objets: Spécifiez le coin opposé: 4 trouvé(s)Choix des objets:; erreur: type d'argument incorrect: VLA-OBJECT nil ) En informatique, une fonction est dite à effet de bord si elle modifie un état autre que sa valeur de retour. Merci pour l'info, Semble ne pas fonctionner sur les blocs dyns, c'est peut-être normal,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Il y avait une autre variable non attribuée dans la routine (getNestedNames) qui cherche les noms des blocs imbriqués. J'ai retesté dans un fichier vierge, ça fonctionne chez moi... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Re, Ok ! Chez moi aussi ! A part les blocs dyns,.. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Neo83 Posté(e) le 5 novembre 2009 Auteur Posté(e) le 5 novembre 2009 lili2006, gile...Vous êtes diaboliques!Merci à vous. [surligneur] Trop forts[/surligneur].Quelle surprise du matin! Don't worry, be happy... [surligneur] [/surligneur] Sans nous, les machines ne sont rien
(gile) Posté(e) le 5 novembre 2009 Posté(e) le 5 novembre 2009 J'ai modifié le code pour qu'il fonctionne aussi avec les blocs dynamiques (nom de la définition) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 5 novembre 2009 Posté(e) le 5 novembre 2009 Bonsoir à toutes et tous, Trop fort gilles !!! :D :P lili2006, gile...Vous êtes diaboliques! Heu, je me contente modestement de tester le génie de (Gile) Je sui bien incapable à ce jour de réaliser la moindre de ses routines,... Mais je te rejoint quand tu écris => Don't worry, be happy... :P :D Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Georges2 Posté(e) le 5 novembre 2009 Posté(e) le 5 novembre 2009 Salut Neo83 Voici la méthode que j'emploi pour ajouter un préfixe à tous les noms de blocs et cela sans passer par une routine LSP ou autres. Tu click sur le menu " Format " Tu choisi l'option " Renommer .... " Il y a une fenêtre de dialogue qui s'ouvrent Dans la Dlist " objet nommé " tu click sur " blocs " Les noms de tous les blocs de ton dessin vont s'afficher dans la Dlist de droite Dans l'édit nommé " ancien nom" tu écris * du pavé numérique Dans l'édit nommé " nouveau nom " tu écris ton préfixe " SA_" suivi de * sans espaces Tu click sur le bouton nouveau nom et tous tes blocs sont alors renommés. JE TE FERAIS REMARQUER QUE çA MARCHE AVEC TOUES LES AUTRES OPTIONS DE LA PREMIERE DLIST à savoir Calques Fenêtres SCU etc. Georges@+
Georges2 Posté(e) le 5 novembre 2009 Posté(e) le 5 novembre 2009 Salut Neo83 Bien entendu tu sélectionner les noms de blocs que tu désires. Quand les noms ne se suivent pas dans la liste, il suffit tout simplement d'appuyer sur la touche Ctrl (contrôle) et de clicker sur les noms des blocs à renommer Georges2@+
lili2006 Posté(e) le 5 novembre 2009 Posté(e) le 5 novembre 2009 Bonsoir à toutes et tous, Bien vu Georges2 ! Marche aussi sur les blocs dyns,... ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Neo83 Posté(e) le 6 novembre 2009 Auteur Posté(e) le 6 novembre 2009 Bonjour à tous,Merci Georges2. Manip simple et efficace. Merci pour ces renseignements. Et merci à tous de prendre sur votre temps pour répondre aux messages. Sans nous, les machines ne sont rien
Neo83 Posté(e) le 17 novembre 2009 Auteur Posté(e) le 17 novembre 2009 Bonjour à tous, (gile), me revoilà... Lorsqu'un bloc a aussi un nom anonyme de la forme suivante: REFERENCE DE BLOC Calque: "08-CFO-APP-CMD" Espace: Espace objetEpaisseur de ligne : 0.13 mmEchelle de type de ligne = 0.100 Maintien = 1138f Nom du bloc: "I-sal" Nom anonyme: "*U186" [surligneur] [/surligneur] en point, X= -30.529 Y= -8.389 Z= 0.000... Le programme PREFBLOC renvoi l'erreur suivante: Commande: PREFBLOC Traiter les blocs imbriqués ? [Oui/Non] : Entrez le prefixe: SA_Sélectionnez le bloc à renommer (ou Entrée pour tous)Choix des objets: 1 trouvé(s) Choix des objets:; erreur: Erreur Automation Entrée incorrecte Avez une solution à ce problème? Merci pour vos réponses. Sans nous, les machines ne sont rien
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