Aller au contenu

Supprimer des lignes dans textmult


oran

Messages recommandés

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 local

Ligne 02: Nature du sol

Ligne 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.

Lien vers le commentaire
Partager sur d’autres sites

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é

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

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)
))

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

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

 

 

 

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 @)

Lien vers le commentaire
Partager sur d’autres sites

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))
)

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

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)
))

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

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