dilack Posté(e) le 6 juillet 2008 Posté(e) le 6 juillet 2008 salut à tous,Patrick ou les pros du lisp si vous passez par là je cherche à modifier le lisp "iat" de patrick pour effectuer une sélection par fenetre pour gagner du temps. ;;;=================================================================;;;;;; IAT.LSP V1.10;;;;;; Incrémenter sur des attributs;;;;;; Copyright © Patrick_35;;;;;;================================================================= (defun c:iat(/ Boucle Ent Js inc n_ini nb nb_dec old_error erriat incsuff Trouve select) (defun erriat(msg) (if (/= msg "Function cancelled") (if (= msg "quit / exit abort") (princ) (princ (strcat "\nErreur : " msg)) ) (princ) ) (setq Boucle 0) (while (ssname Js Boucle) (redraw (ssname Js Boucle) 4) (setq Boucle (1+ Boucle)) ) (setq *error* old_error) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (princ) ) ;-------------------------------------------------------------------------; Incrementer la valeur de +1;------------------------------------------------------------------------- ;; INCSUFF - Gilles Chanteau - 15/01/08;; Incrémente le suffixe d'une chaîne de caractères de la valeur spécifiée.;; Est pris en compte comme suffixe, l'ensemble des caractères [0-9] depuis;; la fin de la chaîne ainsi que les caractères [A-Z] et [a-z] si alpha est non nil;;;; Arguments;; str : une chaîne avec un suffixe valide;; inc : un entier positif;; alpha : si non nil, les caractères [a-z] [A-Z] sont intégrés au suffixe;;;; Retour;; la chaîne avec son suffixe incrémenté (ou nil si aucun suffixe valide);;;; Exemples :;; (incsuff "N°002" 12 T) = "N°014";; (incsuff "test_ZZ9" 1 T) = "test_AAA0";; (incsuff "test_ZZ9" 1 nil) = "test_ZZ10";; (incsuff "12-" 1 nil) = nil (defun incsuff (str inc alpha / lst crt pas ind dep quo ret) (setq lst (reverse (vl-string->list str))) (while (and (setq crt (car lst)) (cond ((< 47 crt 58) (setq pas 10 ind 48 ) ) ((and alpha (< 64 crt 91)) (setq pas 26 ind 65 ) ) ((and alpha (< 96 crt 123)) (setq pas 26 ind 97 ) ) ((< 0 quo) (setq crt (if (= 10 pas) ind (1- ind) ) lst (cons (car lst) lst) ) ) ) ) (setq dep (- crt ind) quo (/ (+ dep inc) pas) ret (cons (+ ind (rem (+ dep inc) pas)) ret) ) (if (zerop quo) (setq ret (append (reverse (cdr lst)) ret) lst nil ) (if (cdr lst) (setq lst (cdr lst) inc quo ) (setq lst (list ind) inc (if (= 10 pas) quo (1- quo) ) ) ) ) ) (if ret (vl-list->string ret) ) ) (defun Trouve(Tbl Ent / Boucle Rech) (setq Boucle 0 Rech nil) (while (ssname Tbl Boucle) (if (eq (ssname Tbl Boucle) Ent) (setq Rech T Boucle (1+ (sslength Tbl))) ) (setq Boucle (1+ Boucle)) ) Rech ) (defun select (Js / Ajout Boucle Ent Texte) (setq Ent "" Ajout T) (while Ent (initget "Ajouter Retirer Supprimer") (if Ajout (setq Texte (strcat "\nSélectionner les attributs (" (itoa (sslength Js)) " sélectionné(s)) : ")) (setq Texte (strcat "\nRetirer les attributs (" (itoa (sslength Js)) " sélectionné(s)) : ")) ) (if (setq Ent (nentsel Texte)) (cond ((= Ent "") (setq Ent nil) ) ((= Ent "Ajouter") (setq Ajout T) ) ((or (= Ent "Retirer")(= Ent "Supprimer")) (setq Ajout nil) ) ((= (cdr (assoc 0 (entget (car ent)))) "ATTRIB") (if Ajout (if (not (Trouve Js (car Ent))) (progn (setq Js (ssadd (car Ent) Js)) (redraw (car Ent) 3) ) ) (if (Trouve Js (car Ent)) (progn (setq Js (ssdel (car Ent) Js)) (redraw (car Ent) 4) ) ) ) ) ) ) ) Js ) (vl-load-com) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (setq Old_Error *error* *error* erriat) (setq Js (select (ssadd))) (if (setq n_ini (getstring T "\nIncrementer en débutant à [chiffre/lettre/alphanumérique] : ")) (progn (setq Boucle 0) (while (ssname Js Boucle) (setq Ent (entget (ssname Js Boucle))) (setq Ent (subst (cons 1 n_ini) (assoc 1 Ent) Ent)) (entmod Ent) (redraw (cdr (assoc -1 Ent)) 4) (entupd (cdr (assoc -1 Ent))) (setq n_ini (incsuff n_ini 1 T)) (setq Boucle (1+ Boucle)) ) ) ) (setq *error* Old_Error) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (princ)) (setq nom_lisp "IAT")(if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter."))) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter.")))(setq nom_lisp nil)(princ) merci d'avance pour m'avoir dépanner [Edité le 6/7/2008 par dilack]
JUJUZAZA Posté(e) le 6 juillet 2008 Posté(e) le 6 juillet 2008 Bonjour à vous (CADxp) Exacte , l'incrémentation ne fonctionne que lorsqu'on copie un bloc d'attribut , l'option avec une sélection par fenêtre des blocs m'intéresserai aussi . ** aussi (Patrick_35) avoir une incrémentation avec l'option choix " nombre de départ à incrémenter" et de combien ( 1 , 2 , 3 .... etc) voir les exemples: (exemple 1 : mon 1er nombre est : " 1 " ; mon incrémentation est de: " 2 " ) donnant ce résultat d'incrémentation : 1 , 3 , 5 , 7 , 9 , 11 , 13 , 15 ... etc ou ( exemple 2 : mon 1er nombre est : " 0 " ; mon incrémentation est de: " 3 " ) donnant ce résultat d'incrémentation : 0 , 3 , 6 , 9 , 12 , 15 , ... etc Ainsi de suite ... ( plusieurs combinaisons possible ) Merci d'avance [Edité le 6/7/2008 par JUJUZAZA]
(gile) Posté(e) le 6 juillet 2008 Posté(e) le 6 juillet 2008 Salut, Je me permet de répondre à la place Patrick_35.Les attributs sont des sous-entités qui ne sont sélectionnables qu'un par un avec la fonction nentsel (ou nentselp). Un jeu de sélection par fenêtre, avec ssget ne permet que de sélectionner des blocs et supposerait de ne filtrer que le bloc contenant l'attribut à incrémenter et dans chaque référence retrouver l'attribut à incrémenter (il peut y en avoir plusieurs)Tout ceci alourdirait considérablement la routine (et les entrés utilisateur) Plus important encore, une incrémentation suppose un ordre et si ce n'est pas l'utilisateur qui le choisis en sélectionnant les attributs un par un, c'est le LISP qui le fera suivant des critères (ordre de création des blocs par exemple) qui ne conviendront pas forcément.Automatiser, c'est bien, mais il faut parfois garder le contrôle... Par contre la valeur de l'incrément pourrait être spécifiée par l'utilisateur (option), je laisse le soin à Patrick de modifier son code. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 7 juillet 2008 Posté(e) le 7 juillet 2008 BonjourPar contre la valeur de l'incrément pourrait être spécifiée par l'utilisateur (option), je laisse le soin à Patrick de modifier son code.Tu pourrais aussi le faire ;)Bon, c'est modifié en version 1.11 @+ 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 7 juillet 2008 Posté(e) le 7 juillet 2008 Bonjour à toutes et tous, Ouh là Patrick_35,j'comprend rien à l'utilisation, désolé, ;) Quand je choisi l'option "alphanumérique", par exemple, l'attribut prend ce nom (à droite sur l'image ci-dessous) et je sors de la fonction ??!! Autre exemple (en bas de l'image) avec l'option "chiffre" http://images4.hiboox.com/images/2808/3489eaf535aec0a52d58fe1de9501056.jpg Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Patrick_35 Posté(e) le 7 juillet 2008 Posté(e) le 7 juillet 2008 Re Je n'avais pas vu que l'on pouvait avoir une liste déroulante avec le clic droit.Il suffit de mettre un texte. C'était pour dire que toutes les combinaisons sont possibles.Donc, taper directement un texte ou un chiffre à la question suffit @+ 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 7 juillet 2008 Posté(e) le 7 juillet 2008 Re, Vu Patrick_35 ! Merci encore. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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