G_P_TP Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Bonjour. j'ai un plan avec beaucoup de textes contenant des nombres, des altitudes ex 459.22, que je dois modifier en ajoutant 0.04. Je cherche un moyen d'automatiser le processus qui n'est pas très passionnant à faire à la 'main' et surtout source d'erreur. Ces nombres sont toujours formatés de la même manière : 3 chiffres, un point, deux chiffres.Ces nombres se trouvent dans des lignes de repères multiple, en fin de ligne. seul cas particulier des lignes qui se finissent par un nombre et une * mais au besoin je peux supprimer ces *. Toute routine faisant le job sur des texte multiple ou pas m'intéresse aussi. ci-joint un extrait du plan à traiter. Citer AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit
G_P_TP Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 je suis pas sûr que le fichier ai été joint. je retente.alti.zip Citer AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit
DenisHen Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Bonjour. Je vois que tu as Covadis. Tu devrais pouvoir t'en sortir avec : Covadis 2D\Points topographiques\Modification des altitudes... En bas à droite de la fenêtre, il y a la constante à ajouter aux altitudes. A condition bien sûr que ce sont bien des points topo... PS : je viens d'ouvrir le fichier Alti.dwg... Ce se sont pas des points topo et je ne vois pas comment automatiser cette opération. Denis... Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
G_P_TP Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 merci d'avoir répondu. a+ Citer AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit
Patrick_35 Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Salut Je vais peut-être répondre à cotéAvec la fonction Rechercher/Remplacer ? @+ Citer Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
G_P_TP Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 Salut Je vais peut-être répondre à cotéAvec la fonction Rechercher/Remplacer ? @+ euh merci pour la réponse mais je vois pas trop... Citer AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit
DenisHen Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Je ne pense pas que ce soit possible avec un rechercher/remplacer. Ce sont plusieurs altitudes dans différents textes multi-lignes... Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Je ne pense pas que ce soit possible avec un rechercher/remplacer. Ce sont plusieurs altitudes dans différents textes multi-lignes...Si c'est juste une altitude à changer, rechercher/remplacer fera l'affaire.Si il faut ajouter 0.04 sur plusieurs altitudes, il faut passer par un lisp. @+ Citer Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lecrabe Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Hello OUI c'est une ligne de repere multiple (MLeader Style = perso) avec un magnifique Multi-Texte sur 2-5 lignes ! Donc il faudrait un Lisp/VLisp qui demanderait - La valeur numerique (A ajouter) - Quelle fin de ligne traitee : 1ere/2eme/etc ou Toutes Bye, lecrabe PS: malgre plus de 2000 routines, je n'ai pas en stock ! Citer Autodesk Expert Elite Team
DenisHen Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Oui, mais les lignes ne sont pas toutes "identiques", elles ne sont pas toutes au même endroit, et il y a d'autres cotes qu'il ne faut pas changer, exemple : les diamètres... Sans compter qu'il y a des altitudes avec des astérix, exemple : "T=459.21*" Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
G_P_TP Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 Oui, mais les lignes ne sont pas toutes "identiques", elles ne sont pas toutes au même endroit, et il y a d'autres cotes qu'il ne faut pas changer, exemple : les diamètres... Sans compter qu'il y a des altitudes avec des astérix, exemple : "T=459.21*" En fait, si je supprime les * (ce qui est possible), les textes à mettre à jour sont toujours en fin de ligne et formatés de la même manière : xxx.xx Citer AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit
DenisHen Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Sans les * de fin de ligne, je pense que c'est faisable, mais pas par moi, je débute en Lisp et c'est trop complexe pour moi... Désolé... Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
G_P_TP Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 Sans les * de fin de ligne, je pense que c'est faisable, mais pas par moi, je débute en Lisp et c'est trop complexe pour moi... Désolé... merci déjà d'avoir réfléchi à mon problème. Citer AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit
bonuscad Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Bonjour, Essayes ceci (vérifier que le résultat est bien attendu) (defun string-subst (nam_obj new_string old_string / value_string nbs tmp_nbs) (setq value_string (vlax-get nam_obj 'TextString) nbs 0) (while nbs (if (setq nbs (vl-string-search old_string value_string (setq tmp_nbs nbs))) (setq value_string (vl-string-subst new_string old_string value_string tmp_nbs) nbs (1+ nbs) ) ) ) (vlax-put nam_obj 'TextString value_string) ) (defun vl-position-multi (el l / n l_id l_n) (setq n 0 l_id (mapcar '(lambda (x) (equal x el)) l) ) (repeat (length l_id) (if (car l_id) (setq l_n (cons n l_n))) (setq n (1+ n) l_id (cdr l_id)) ) (reverse l_n) ) (defun c:test ( / doc sel val_text l_val l_new-val indx) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) l_val nil l_new-val nil) (ssget "_X" (list '(0 . "MULTILEADER") (cons 410 (getvar "ctab")))) (vlax-for el (setq sel (vla-get-activeselectionset doc)) (cond ((setq val_text (vla-get-TextString el)) (cond ((eq (type (read val_text)) 'REAL) (setq l_val (cons val_text l_val) l_new-val (list (rtos (+ 0.04 (read val_text)) 2 2)) ) ) (T (setq indx (vl-position-multi 61 (vl-string->list val_text))) (foreach n indx (setq l_val (cons (substr val_text (+ 2 n) 6) l_val) l_new-val (cons (rtos (+ 0.04 (read (substr val_text (+ 2 n) 6))) 2 2) l_new-val) ) ) ) ) ) ) (if (and l_val l_new-val) (repeat (setq nb (length l_val)) (string-subst el (car l_new-val) (car l_val)) (setq l_new-val (cdr l_new-val) l_val (cdr l_val)) ) ) ) (prin1) ) Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
G_P_TP Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 Eh Bien ! à priori ça marche pas mal. Un grand merci. Citer AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit
Patrick_35 Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Salut C'est mon tour(defun c:ajt(/ doc ele lst tag val split) (defun split(txt tag / loc lst pos str val) (setq str 1 loc 0 ) (while (setq pos (vl-string-search "." txt loc)) (if (and (> pos (1- (vl-string-search "." tag))) (wcmatch (setq val (substr txt (- pos (- (strlen tag) (vl-string-search "." tag) 1)) (strlen tag))) tag)) (setq deb (substr txt str (- pos str (- (strlen tag) (vl-string-search "." tag) 1))) str (+ pos (- (strlen tag) (vl-string-search "." tag)) 1) lst (cons (read val) (cons deb lst)) ) ) (setq loc (1+ pos)) ) (reverse (cons (substr txt str) lst)) ) (setq doc (vla-get-activedocument (vlax-get-acad-object)) tag "###.##" ; Modèle de recherche --> 3 valeurs numérique + "." + 2 valeurs numérique ) (vla-startundomark doc) (initget 3) (and (setq val (getreal "\nValeur à ajouter : ")) (ssget) (vlax-for ele (setq sel (vla-get-activeselectionset doc)) (and (vlax-property-available-p ele 'textstring) (setq lst (mapcar '(lambda(x)(if (eq (type x) 'STR) x (rtos (+ x val)))) (split (vla-get-textstring ele) tag))) (vla-put-textstring ele (apply 'strcat lst)) ) ) (vla-delete sel) ) (vla-endundomark doc) ) @+ ps : attention à la précision des unités (ddunits) Citer Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
G_P_TP Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 vraiment super. Cela fonctionne sur les lignes de repères multiples et les textes (simple ou multiple) quelque soit la position du chiffre dans le texte. merci beaucoup. :) :) :) Citer AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit
didier Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Coucou Allez c'est jour de fête !!!! j'explique ma vision des choses :je recherche le signe "="je note sa positionj'extrais la valeur numérique sachant qu'elle fait 6 caractères (c'est un pré-requis)j'y ajoute quatre centimètreset je réinjecte le tout dans la string de l'objetdeux cas de figures :il n'y a que 6 caractères dans la chaîne et je travaille dessus en directil a plus de 6 caractères et je boucle avec le signe "=" en ligne de mire (defun c:da:plus4 ( / jeu_sel n vl_obj valeur pos tempo) (vl-load-com) (setq jeu_sel (ssget (list (cons 0 "MULTILEADER")))) (setq n 0) (repeat (sslength jeu_sel) (setq vl_obj (vlax-ename->vla-object (ssname jeu_sel n))) (setq valeur (vla-get-textstring vl_obj)) (if (> (strlen valeur) 6) (progn (setq pos 0) (while (< pos (strlen valeur)) (if (= "=" (substr valeur (setq pos (1+ pos)) 1)) (progn (setq tempo (substr valeur (+ 1 pos) 6)) (setq valeur (vl-string-subst (rtos (+ 0.04 (atof tempo)) 2 2) tempo valeur ) ;_ fin de vl-string-subst ) ;_ fin de setq ) ;_ fin de progn ) ;_ fin de if ) ;_ fin de while ) ;_ fin de progn ) ;_ fin de if (if (= (strlen valeur) 6) (progn (setq valeur (vl-string-subst (rtos (+ 0.04 (atof valeur)) 2 2) valeur valeur ) ;_ fin de vl-string-subst ) ;_ fin de setq ) ;_ fin de progn ) ;_ fin de if (vla-put-textstring vl_obj valeur) ) ;_ fin de repeat ) Amicalement Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
G_P_TP Posté(e) le 18 août 2016 Auteur Posté(e) le 18 août 2016 encore une solution ! bravo et merci pour le temps passé.les commentaires c'est super. Si je peux je vais étudier le code. j'aimerais bien faire mes lisp. en plus c'est un language que j'ai étudié par le passé... mais il y a fort fort longtemps (+de 20ans! quand même!) et j'en ai que de vague souvenirs... a++ Citer AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit
Patrick_35 Posté(e) le 18 août 2016 Posté(e) le 18 août 2016 Salut J'ai amélioré la routine pour fonctionner sur n'importe quel réel.(defun c:ajt(/ dmz doc ele lst split) (defun split(txt / deb fin loc lst pos str) (setq str 1 loc 0) (while (setq pos (vl-string-search "." txt loc)) (setq deb (1+ pos) fin deb) (while (and (> deb 1) (eq (type (read (substr txt (1- deb) 1))) 'INT)) (setq deb (1- deb))) (while (eq (type (read (substr txt (1+ fin) 1))) 'INT) (setq fin (1+ fin))) (or (eq deb fin) (setq lst (cons (read (strcat "0" (substr txt deb (1+ (- fin deb))))) (cons (substr txt str (- deb str)) lst ) ) str (1+ fin) ) ) (setq loc (1+ pos)) ) (reverse (cons (substr txt str) lst)) ) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (initget 3) (and (setq val (getreal "\nValeur à ajouter : ")) (ssget) (setq dmz (getvar "dimzin")) (setvar "dimzin" 0) (vlax-for ele (setq sel (vla-get-activeselectionset doc)) (and (vlax-property-available-p ele 'textstring) (setq lst (mapcar '(lambda(x)(if (eq (type x) 'STR) x (rtos (+ x val)))) (split (vla-get-textstring ele)))) (vla-put-textstring ele (apply 'strcat lst)) ) ) (vla-delete sel) (setvar "dimzin" dmz) ) (vla-endundomark doc) (princ) ) @+ Citer Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés