Aller au contenu

Pour les programmeur Préfixe nom de bloc


Neo83

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Ben oui !

 

Ligne de commande =>

 

PREFBLK

Traiter les blocs imbriqués ? [Oui/Non] : N

Entrez le prefixe: t

Sé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 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Si on répond oui à des blocs non imbriqué =>

 

PREFBLK

Traiter les blocs imbriqués ? [Oui/Non] : O

Entrez le prefixe: test

Sé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 nil

Commande:

Commande:

PREFBLK

Traiter les blocs imbriqués ? [Oui/Non] : N

Entrez le prefixe: test

Sé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 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

Traiter les blocs imbriqués ? [Oui/Non] :

Entrez le prefixe: test

Sé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 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

@+

 

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

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 objet

Epaisseur de ligne : 0.13 mm

Echelle 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

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é