oran Posté(e) le 17 janvier 2020 Posté(e) le 17 janvier 2020 Bonjour et meilleurs voeux à toute la communauté CadXP, Sur la plupart des plans on peut trouver la dénomination de chaque locaux (en textmult) accompagnée de détails, je m'explique:Ligne 01: Nom du localLigne 02: Nature du solLigne 03: Nature des murs...etc (qq fois jusqu'à 5/6 lignes)Ces textes cachent une bonne partie de nos équipements électriques, mon souhait serait donc de pouvoir supprimer toutes ces lignes (sauf la première bien sûr).Il y bien la solution "d'exploser" les textes et de supprimer les lignes inutiles mais quand il y a plus de 100 locaux......!!!!Existe-t-il donc un lisp ou une solution rapide pour ce genre de manipulation ? Vous en remerciant par avance. Citer
GEGEMATIC Posté(e) le 17 janvier 2020 Posté(e) le 17 janvier 2020 Salut,par pointage en les sélectionnant un par un: ;;************************************************************************** ;§/str/Garde la seule 1ère ligne d'un mtext/none (defun c:gardeuneligne ( / otxm txt pos newtext) (vl-Load-Com) (setq otxm (vlax-ename->vla-object (car (entsel "\nMtext ?")))) (setq txt (vla-get-textstring otxm)) (setq pos (vl-string-search "\\P" txt)) (setq newtxt (substr txt 1 pos)) (vla-put-textstring otxm newtxt) ) après il peut y avoir etllement de formatage dans un metxt, que je te garantis rien ...a+gégé Citer ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
bonuscad Posté(e) le 17 janvier 2020 Posté(e) le 17 janvier 2020 Salut, Comme gegematic, mais en sélection multiple (a copier-coller directement en ligne de commande) ((lambda ( / js n ent dxf_ent val_txt) (cond ((setq js (ssget '((0 . "MTEXT")))) (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) dxf_ent (entget ent) val_txt (cdr (assoc 1 dxf_ent)) ) (entmod (subst (cons 1 (substr val_txt 1 (vl-string-search "\\P" val_txt))) (assoc 1 dxf_ent) dxf_ent)) ) ) ) (prin1) )) Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
rebcao Posté(e) le 17 janvier 2020 Posté(e) le 17 janvier 2020 Bonjour, Une simple remarque, pour ce genre d'info, l'idéal serait bien sur de passer par un Bloc avec autant d'attributs que de lignes souhaitées, en plaçant chaque attributs sur un calque différent ! Christian Citer Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
oran Posté(e) le 17 janvier 2020 Auteur Posté(e) le 17 janvier 2020 GRANDIOSE...!!!Merci à GéGé et Bonuscad, c'est parfait, il faudrait juste un mixte des 2 maintenant si j'ose me permettre.Remarque très pertinente Reb mais malheureusement c'est rarement le cas ;) Sylvain Citer
oran Posté(e) le 23 janvier 2020 Auteur Posté(e) le 23 janvier 2020 Bonjour, Je reviens sur le sujet, auriez-vous une solution pour ne supprimer que la dernière ligne de ces mêmes textmult? Merci d'avance, Sylvain Citer
GEGEMATIC Posté(e) le 23 janvier 2020 Posté(e) le 23 janvier 2020 Salut,ma vieille fonction pw_lst_de_ch ne gérait pas le \\P !pas remarqué ça depuis 1993 ! ;;************************************************************************** ;§/str/Garde la seule dernière ligne d'un mtext/none (defun c:gardeDerligne ( / otxm txt pos newtext) (vl-Load-Com) (setq otxm (vlax-ename->vla-object (car (entsel "\nMtext ?")))) (setq txt (vla-get-textstring otxm)) (setq pos (vl-string-search "\\P" txt)) ;;(setq newtxt (substr txt 1 pos)) (setq newtxt (car (reverse (pw_lst_de_ch txt "\\P")))) (vla-put-textstring otxm newtxt) ) ;****************************************************************************** ;§/str/delivre une liste de chaines a partir d'une chaine contenant un separateur/ch separ ;;(pw_lst_de_ch "bien plus simple" " ")->("bien" "plus" "simple") ;;(pw_lst_de_ch "PUISARD\\Pprévu pour\\PLIGNE 3\\PHS" "\\P")-("PUISARD" "prévu pour" "LIGNE 3" "HS") (defun pw_lst_de_ch (ch separ / long pos 1er ch res) (setq long (strlen separ)) (while (setq pos (vl-string-search separ ch) ) (setq 1er (substr ch 1 pos)) (setq ch (substr ch (+ 1 pos long))) (setq res (append res (list 1er))) ) (append res (list ch)) ) Citer ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
bonuscad Posté(e) le 23 janvier 2020 Posté(e) le 23 janvier 2020 Bonjour, Je reviens sur le sujet, auriez-vous une solution pour ne supprimer que la dernière ligne de ces mêmes textmult? Merci d'avance, Sylvain En dérivé de la fonction proposé auparavant, sans trop l'avoir testé en situation réelle...((lambda ( / js n ent dxf_ent val_txt l) (cond ((setq js (ssget '((0 . "MTEXT")))) (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) dxf_ent (entget ent) val_txt (cdr (assoc 1 dxf_ent)) ) (cond ((setq l (member 80 (reverse (vl-string->list val_txt)))) (if (eq (cadr l) 92) (entmod (subst (cons 1 (vl-list->string (reverse (cddr l)))) (assoc 1 dxf_ent) dxf_ent)) ) ) ) ) ) ) (prin1) )) Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
oran Posté(e) le 23 janvier 2020 Auteur Posté(e) le 23 janvier 2020 Encore une fois MERCI à vous deux, ça marche du tonnerre. Cordialement,Sylvain Citer
Messages recommandés