Aller au contenu

Numérotation séquentielle d\'un bloc


Chloé_
 Partager

Messages recommandés

Bonjour à tous,

 

J'ai un bloc copié plusieurs fois dans mon dessin et je dois numéroter de façon séquentielle chaque bloc.

 

Il me faudrait l'équivalent de la fonction TCOUNT mais qui agirait sur du texte à l'intérieur d'un bloc.

 

Pour l'instant je sors le texte du bloc mais ça m'arrange pas...

 

Est-ce qu'il y aurait un génie de l'Autocad pour me trouver un solution? Je suis sure qu'il existe un petit LISP de derrière les fagots!

 

Bonne journée!

 

Chloé

Lien vers le commentaire
Partager sur d’autres sites

coucou

 

bien sûr qu'on peut renommer un attribut avec le lisp

et ce avec une incrémentation,

 

mais on aurait besoin d'en savoir un peu plus sur ce bloc ...

 

par exemple, il a combien d'atributs ?

s'il en a plusieurs, lequel doit-on renommer ?

est-ce une incrémentation ou autre chose ?

 

amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

Ahhhh! Je suis ravie de trouver une oreille attentive!

 

Je travail sur un parking et c'est des places que je dois numéroter :

Donc pour l'instant c'est un bloc très simple avec un seul attribut : "numero"

Il me faut une incrémentation de base avec un pas de 1.

 

Par contre ce qui serait fou, ce serait de pouvoir faire une numérotation qui s'applique sur des blocs différents!

EX : j'ai 9 blocs standard et 1 bloc mobilité réduite. Chaque bloc a un attribut "numero" et du coup quand j'utilise le LISP les blocs sont numéroté les uns à la suite des autres mêmes si c'est pas le même bloc à chaque fois.

 

Merci pour ton aide!

Lien vers le commentaire
Partager sur d’autres sites

coucou

 

un truc fait à l'arrache !!

 

tu cliques ton bloc

si l'attribut est bien en première position ça devrait fonctionner

tu choisis le num de départ en changeant la de num au départ dens la lips

tu testes et tu me tiens au parfum...

 (setq num 0)
(while
(setq ent (car(entsel)))
(setq blk (entget ent))
 (setq ent2 (entnext ent))
 (setq z (entget ent2))
 (setq z1 (assoc 1  z))
 (setq z2 (+ num 1))
 (setq z2 (itoa z2))
 (setq z3 (subst (cons 1 z2) z1 z))
 (entmod z3)
 (entupd ent)
 (setq num (+ 1 num))
)  

 

 

amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

Surement que les lisps d'incrémentation de (gile) vont faire ton bonheur,,...

 

Suivant le besoin =>

 

commandes : inctxt (insertions multiples d'un texte) ; incatt (insertions multiples d'un bloc avec attribut) ; incsuf (incrémentation du suffixe des textes sélectionnés) ; incsel (incrémentation d'une valeur dans les textes sélectionnés) ; incadd (ajout d'une chaîne avec incrément) ; incr (choisir une de ces commandes)

Civil 3D 2023 - COVADIS_18.0a

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

Lien vers le commentaire
Partager sur d’autres sites

Merci lili 2006!

 

Sur la commande de Didier : Ca fonctionne très bien par contre je suis obligée de sélectionner les blocs un à un. Et je suis en train de numéroter un parking de 2000 places... VDM

 

Est ce que tu aurais qqch de similaire pour sélectionner mes blocs d'un coup?

 

En attendant j'essaye demain le LISP de Gile!

 

Merci pour votre aide! Je vous tient au courant!

Très bonne soirée!

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

st ce que tu aurais qqch de similaire pour sélectionner mes blocs d'un coup?

 

Peut-être avec un champ "ExpressionDiesel" ?

 

Pas eu l'occasion de me pencher là dessus, d'autres peut-être ?

 

De toute façon, pour cette affaire, je ne vois guère d'autres solutions que la sélection une par une. Comment le lisp, aussi puissant soit-il, puisse savoir à ta place comment numéroter quoi,...???!!!!

 

Pour tes prochains projets, sache que "INCATT" permet une incrémentation à l'insertion du boc concerné.

Civil 3D 2023 - COVADIS_18.0a

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

Lien vers le commentaire
Partager sur d’autres sites

coucou

 

bien sûr qu'on peut faire mieux,

je t'ai prévenue que c'était fait à la va-vite,

sans contrôle de validité en plus

 

maintenant pour sélectionner 2000 blocs pas de souci,

on sait faire même bien plus

 

en revanche, DANS QUEL ORDRE NUMEROTER ?

 

dans l'ordre de création dans le dessin ?

suivant un ordre de sélection ?

 

pas simple de faire les choses a posteriori.

le mieux étant d' anticiper.

 

amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonjour!

 

@ Didier : J'aurais besoin de numéroter dans l'ordre de sélection (comme avec TCOUNT) et si possible d'avoir un préfixe (je compte mes places de parking par section).

La prochaine fois j'anticiperais, mais l'autre problème est que la configuration du parking (et donc la numérotation des places) changent tout le temps! Du coup il me faudrait un outil qui me permettent de recommencer le comptage à tout moment!

 

@ Lili : J'ai essayé les lisp de Giles et ça ne fait pas ce dont j'ai besoin (ou alors j'ai pas tout compris ce qui n'est pas exclu!)

 

Amicalement,

Chloé

Lien vers le commentaire
Partager sur d’autres sites

coucou

 

voici pour le prefixe

pour ce qui est de l'ordre de sélection

j'ai pas trop le temps car sélectonner un par un

ou trier dans une capture c'est pas vraiment pareil.

 

 (setq prefix "préfixe");changer entre les guillemets
(setq num 0);choisir le num de départ (-1)
(while
(setq ent (car(entsel)))
(setq blk (entget ent))
 (setq ent2 (entnext ent))
 (setq z (entget ent2))
 (setq z1 (assoc 1  z))
 (setq z2 (+ num 1))
 (setq z2 (itoa z2))
;si prefixe
 (setq z2 (strcat prefix z2))
 (setq z3 (subst (cons 1 z2) z1 z))
 (entmod z3)
 (entupd ent)
 (setq num (+ 1 num))
)  

 

amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

Lili : J'ai essayé les lisp de Giles et ça ne fait pas ce dont j'ai besoin (ou alors j'ai pas tout compris ce qui n'est pas exclu!)

 

ça fait exactement tout ce que tu demandes,...

 

A retester je pense,...

 

Il y a en effet LATT de Patrick_35 mais me semble moins facile à "maitriser" de premier abord, non ?

Civil 3D 2023 - COVADIS_18.0a

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

Lien vers le commentaire
Partager sur d’autres sites

Vos solutions marchent très bien! MERCI d'avoir pris le temps de vous pencher sur la question!

 

: ) : )

 

Le seul problème est le mode de sélection : je suis quand même obligé de sélectionner mes 2000 places de parking une à une.

 

En faisant d'autres recherches j'ai trouvé le lsp suivant :

 

http://www.cadforum.cz/cadforum_en/download.asp?fileID=913

 

Il me permet de numéroter mes attributs de blocs avec une fenêtre de sélection, mais il numérote dans l'ordre de création des blocs. Ors, vu que je modifie mon parking tout le temps, l'ordre de création est aléatoire...

 

Est ce que vous pensez qu'il y aurait un moyen d'ajouter une fonction trajet à ce LSP pour la numérotation? Ce serait à la fois rapide et précis. Le rêve!

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

@ Patrick_35 : LATT a l'air vraiment bien, mais j'ai un peu du mal à l'utiliser... J'arrive à incrémenter des lettres mais pas des chiffres et je n'ai pas vu de champs pour mettre un préfixe...

Il y a une manip que visiblement je ne fais pas bien!

 

En tout cas merci parce que ça peut effectivement me servir! Cette mise à jour de la chaine d'attributs est impressionnante!

Lien vers le commentaire
Partager sur d’autres sites

@ Patrick_35 : LATT a l'air vraiment bien, mais j'ai un peu du mal à l'utiliser... J'arrive à incrémenter des lettres mais pas des chiffres et je n'ai pas vu de champs pour mettre un préfixe...

Il y a une manip que visiblement je ne fais pas bien!

 

En tout cas merci parce que ça peut effectivement me servir! Cette mise à jour de la chaine d'attributs est impressionnante!

Le préfixe peut-être dans le texte.

Tu peux avoir par exemple PK001, ce qui donnera ensuite PK002, PK003, etc...

Tu as plusieurs lisps dans le même fichier. Tout est indiqué lors du chargement du lisp.

 

ps : le lisp doit être toujours chargé, même sans le lancer pour avoir les réacteurs.

nb : Si tu fais une copie d'un attribut lié, la copie sera automatiquement incrémenté de +1 par rapport au dernier. De même que si tu effaces un attribut, la chaine de liaisons des attributs se remet en ordre.

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

@Patrick_35 : Merci! J'ai fini par réussir à utiliser ton lsp et il est vraiment bien! (j'ai fini par comprendre le coup des prefixes etc..)

Par contre est ce que le même existe avec une sélection par trajet?... Mais OK, si je commence à en demander un peu trop je comprendrais!

 

Merci à tous pour votre aide!

 

 

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

@Patrick_35 : J'ai un petit problème d'usage avec ton lsp LATT.

Il marche très bien, mais au bout d'un moment (plusieurs ouvertures et fermetures du fichier) la chaine d'attributs se perd et les attributs redeviennent "normaux". Est ce que tu as une idée d'où ça pourrait venir?

J'ai ce problème même quand j'utilise la fonction qui enregistre la chaine d'attributs. Le fichier n'est ouvert que sur un ordinateur qui a le lsp installé. J'imagine qu'il y a une manip que je ne fais pas ou que je fais mal mais je ne sais absolument pas laquelle!

 

Bonne journée!

Chloé

Lien vers le commentaire
Partager sur d’autres sites

  • 4 ans après...

Salut,

Je déterre ce post car j'ai trouvé un lisp pour la numérotation de bloc avec une direction donnée auquel j'ai ajouté la possibilité de rajouter un suffixe ou préfixe.

Voilà le code, si jamais ça peut aidé :)

(defun c:numps(/ stStr stNum nLen cAtr dLst blName
      fLst blLst blSet aName sLst lZer aStr
      pt1 pt2 xSrt ySrt atype ns ss en ed an ad av nv)
 (vl-load-com)
 (if
   (and
     (setq stStr(getstring "\nSpécifier le numéro de départ: "))
     (setq stNum(atoi stStr))
     (setq nLen(strlen stStr))
     ); end and
   (progn
     (if
(and
   (setq cAtr(nentsel "\nSélectionner Attribut > "))
   (= "ATTRIB"(cdr(assoc 0(setq dLst(entget(car cAtr))))))
  ); end and
(if
  (and
    (setq pt1(getpoint "\nSélectionner la direction de numérotation "))
    (setq pt2(getpoint pt1 "\nSélectionner la direction de numérotation "))
    ); end and
(progn
  (if(<=(car pt1)(car pt2))(setq xSrt '<)(setq xSrt '>))
  (if(<=(cadr pt1)(cadr pt2))(setq ySrt '<)(setq ySrt '>))
  (setq blName
    (vla-get-Name
       (vla-ObjectIDToObject
	  (vla-get-ActiveDocument
	     (vlax-get-acad-object))
	        (vla-get-OwnerID
	           (vlax-ename->vla-object(car cAtr)))))
	fLst(list '(0 . "INSERT")(cons 2 blName))
	aName(cdr(assoc 2 dLst))
	); end setq
  (princ "\n<<< Selection des blocs à numéroter >>> ")
  (if
    (setq blSet(ssget fLst))
    (progn
     (setq sLst
                   (mapcar 'vlax-ename->vla-object
	      (mapcar 'car
	       (vl-sort
	        (vl-sort
	          (mapcar '(lambda(x)(list x
		   (trans(cdr(assoc 10(entget x)))0 1)))
	            (vl-remove-if 'listp 
                             (mapcar 'cadr(ssnamex blSet))))
	                '(lambda(a B)((eval xSrt)(caadr a)(caadr B))))
		          '(lambda(a B)((eval ySrt)(cadadr a)(cadadr B)))))))
     (foreach i sLst
       (setq lZer "")
       (repeat(- nLen(strlen(itoa stNum)))
	 (setq lZer(strcat lZer "0"))
	 ); end repeat
       (setq atLst
	      (vlax-safearray->list
		 (vlax-variant-value
		   (vla-GetAttributes i))))
       (foreach a atLst
	 (if
	   (= aName(vla-get-TagString a))
	      (vla-put-TextString a
		(strcat lZer(itoa stNum)))
	   ); end if
	 ); end foreach
	 (setq stNum(1+ stNum))
       ); end foreach
      ); end progn
    (princ "\nSélection nulle! Quit. ")
    ); end if
    ); end progn
   (princ "\nDirection non spécifiée! Quit. ")
  ); end if
(princ "\nCe n'est pas un attribut! Quit. ")
); end if
     ); end progn
   (princ "\nNuméro de départ invalide! Quit. ")
   ); end if
 (prin1)
 (initget 1 "Suffix Prefix")
 (setq atype (getkword "\nAjout Suffix ou Prefix (S/P):   "))

 (initget 1)
 (setq ns (getstring t "\ntexte à ajouter:  "))

      (while (setq en (ssname blSet 0))
             (setq ed (entget en)
                   an (entnext en)
                   ad (entget an))
             (while (/= "SEQEND" (cdr (assoc 0 ad)))
                    (setq av (cdr (assoc 1 ad))
                          nv (if (= atype "Prefix")
                                 (strcat ns av)
                                 (strcat av ns)))
                    (entmod (subst (cons 1 nv) (assoc 1 ad) ad))
                    (setq an (entnext an)
                          ad (entget an)))
             (entupd en)
             (ssdel en blSet)); end while
 (princ)
 ); end of c:numps

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
 Partager

×
×
  • 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é