Chloé_ Posté(e) le 18 octobre 2010 Posté(e) le 18 octobre 2010 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é
Chloé_ Posté(e) le 18 octobre 2010 Auteur Posté(e) le 18 octobre 2010 Désolée, mon ordi a buggé et posté le sujet de forum deux fois. L'adresse où poster vos réponses : http://www.cadxp.com/sujetXForum-29996.htm Désolée....
didier Posté(e) le 18 octobre 2010 Posté(e) le 18 octobre 2010 coucou bien sûr qu'on peut renommer un attribut avec le lispet 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 Éternel débutant… Mon site perso : Programmer dans AutoCAD
Chloé_ Posté(e) le 18 octobre 2010 Auteur Posté(e) le 18 octobre 2010 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!
didier Posté(e) le 18 octobre 2010 Posté(e) le 18 octobre 2010 coucou un truc fait à l'arrache !! tu cliques ton blocsi l'attribut est bien en première position ça devrait fonctionnertu choisis le num de départ en changeant la de num au départ dens la lipstu 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 Éternel débutant… Mon site perso : Programmer dans AutoCAD
lili2006 Posté(e) le 18 octobre 2010 Posté(e) le 18 octobre 2010 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 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
Chloé_ Posté(e) le 18 octobre 2010 Auteur Posté(e) le 18 octobre 2010 @ Didier : question bête mais une fois que j'ai chargé ton LISP je tape quelle fonction pour le faire tourner?... (C'est le degré 0 de la question de newbie..)
lili2006 Posté(e) le 18 octobre 2010 Posté(e) le 18 octobre 2010 Re, (Didier, je me permet,) Tu copie-colle le code ci-dessus sur ta ligne de commande, puis tu sélectionnes l'attribut du bloc que tu veux incrémenter,...Attention, si tu refait la manip, l'incrémentation repart de 1,... Civil 3D 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
Chloé_ Posté(e) le 18 octobre 2010 Auteur Posté(e) le 18 octobre 2010 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!
lili2006 Posté(e) le 18 octobre 2010 Posté(e) le 18 octobre 2010 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 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
didier Posté(e) le 19 octobre 2010 Posté(e) le 19 octobre 2010 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 Éternel débutant… Mon site perso : Programmer dans AutoCAD
Chloé_ Posté(e) le 19 octobre 2010 Auteur Posté(e) le 19 octobre 2010 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é
didier Posté(e) le 19 octobre 2010 Posté(e) le 19 octobre 2010 coucou voici pour le prefixepour ce qui est de l'ordre de sélectionj'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 Éternel débutant… Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 19 octobre 2010 Posté(e) le 19 octobre 2010 Salut Tu as LATT @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lili2006 Posté(e) le 19 octobre 2010 Posté(e) le 19 octobre 2010 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 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 19 octobre 2010 Posté(e) le 19 octobre 2010 Salut, la commande INCSEL de Increment.lsp http://img.ahst.fr/data/images/incseltht.gif Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Chloé_ Posté(e) le 20 octobre 2010 Auteur Posté(e) le 20 octobre 2010 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!
Chloé_ Posté(e) le 20 octobre 2010 Auteur Posté(e) le 20 octobre 2010 @ 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!
Patrick_35 Posté(e) le 20 octobre 2010 Posté(e) le 20 octobre 2010 @ 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Chloé_ Posté(e) le 20 octobre 2010 Auteur Posté(e) le 20 octobre 2010 @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!
Chloé_ Posté(e) le 3 novembre 2010 Auteur Posté(e) le 3 novembre 2010 @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é
KSJ77 Posté(e) le 9 février 2015 Posté(e) le 9 février 2015 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
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