Aller au contenu

Masque que texte simple


Fruity

Messages recommandés

Salut Fruity,

 

Pour moi, tu n'as pas cette possibilité la avec un texte simple.

Le plus simple serais de transformer les textes en MTextes avec la commande TXT2MTXT.

A moins que tu n'ai un intérêt particulier à les conserver en TEXTE biensur ...

 

 

Aimablement

Vincent P.

Lispeur débutant!
Autocad Map3D 2023
Covadis-Autopist 18.0C

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

ET donc la routine CT_MT de notre Grand Maitre Gilles est LA pour faire le boulot !

 

Commandes : CT / MT

 

Elle traite les TEXTs et MTEXTs ... MERCI Gilles !

 

Routine tiree de mon stock de 3001 routines ...

 

LA SANTE, Bye, lecrabe ... Retraite J19 ...

 

  
;; 
;; Une routine pour placer un cadre ou un masque d'arrière plan (hachure SOLID) 
;; sur les textes (simples ou multilignes).
;;
;; CT & MT par GC 15/11/07 + 18/11/07 + 20/11/07 pour Patrice
;; 
;; Fonctionnent avec textes simples et multilignes
;; Les Parametres (couleur et la distance de Decalage)
;; sont conservées dans le dessin pendant la session
;;
;; EDIT : Tout bien pesé, je pense qu'il vaut mieux 2 commandes séparées 
;; (CT pour les cadres et MT pour les masques) : moins d'options à valider ou modifier.
;;
;; EDIT : Nouvelles versions, fonctionnent avec les "couleurs vraies" pour les version 2004 
;; et plus, en couleurs de l'index pour les version antérieures.
;;
;; EDIT : Ajout d'une option Wipeout dans MT
;;
;; EDIT : Ajout d'une option Largeur (de polyligne) dans CT
;; 

;; 
;; CT Encadre les textes Selectionnés
;; 

(defun c:CT (/ of col wid opt par wo n ss n tx elst plst)
(or *TextFrameOffset*
(setq *TextFrameOffset* (/ (getvar "TEXTSIZE") 5.0))
)
(or *TextFrameColor*
(setq *TextFrameColor* (list '(62 . 256)))
)
(or *TextFrameWidth*
(setq *TextFrameWidth* 0.0)
)
(setq of *TextFrameOffset*
col *TextFrameColor*
wid *TextFrameWidth*
)
(while
(and (princ (strcat "\nDecalage: "
(rtos of)
"\tCouleur: "
(TrueColor2String col)
"\tLargeur: "
(rtos wid)
"\nSelectionnez les textes ou <Parametres> "
)
)
(not (setq ss (ssget '((0 . "MTEXT,TEXT")))))
)
(initget 1 "Decalage Couleur Largeur")
(setq par (getkword
"\nChoix de l'option [Decalage/Couleur/Largeur]: "
)
)
(cond
((= par "Couleur")
(if (< 15 (atoi (substr (getvar "ACADVER") 1 2)))
(if (setq col (acad_truecolordlg
(cond
((assoc 420 col))
((assoc 62 col))
)
)
)
(setq *TextFrameColor* col)
(setq col *TextFrameColor*)
)
(if (setq col (acad_colordlg (cdr (assoc 62 col))))
(setq *TextFrameColor* (setq col (list (cons 62 col))))
(setq col *TextFrameColor*)
)
)
)
((= par "Decalage")
(if (setq of (getdist (strcat "\nSpecifiez le Decalage du cadre <"
(rtos of)
">: "
)
)
)
(setq *TextFrameOffset* of)
(setq of *TextFrameOffset*)
)
)
(T
(if (setq wid (getdist (strcat "\nSpecifiez la largeur du cadre <"
(rtos wid)
">: "
)
)
)
(setq *TextFrameWidth* wid)
(setq wid *TextFrameWidth*)
)
)
)
)
(setq n -1)
(while (setq tx (ssname ss (setq n (1+ n))))
(setq elst (entget tx)
plst (text2box-plst elst of)
)
(make-frame elst col wid plst)
)
(princ)
)

;; ==========================================================;;

;; 
;; MT Place un masque (hachure SOLID ou wipeout) derrière les textes Selectionnés
;; 

(defun c:MT (/ of col par n ss n tx elst plst ec)
(or *TextMaskOffset*
(setq *TextMaskOffset* (/ (getvar "TEXTSIZE") 5.0))
)
(or *TextMaskColor*
(setq *TextMaskColor* (list '(62 . 1)))
)
(setq of *TextMaskOffset*
col *TextMaskColor*
)
(while
(and (princ (strcat "\nDecalage: "
(rtos of)
"\tCouleur: "
(TrueColor2String col)
"\nSelectionnez les textes ou <Parametres> "
)
)
(not (setq ss (ssget '((0 . "MTEXT,TEXT")))))
)
(initget 1 "Decalage Couleur Wipeout")
(setq par (getkword
"\nChoix de l'option [Decalage/Couleur/Wipeout]: "
)
)
(cond
((= par "Wipeout")
(setq *TextMaskColor* (setq col (list (cons 430 "Wipeout"))))
)
((= par "Couleur")
(if (< 15 (atoi (substr (getvar "ACADVER") 1 2)))
(if (setq col (acad_truecolordlg
(cond
((assoc 420 col))
((assoc 62 col))
(T '(62 . 1))
)
)
)
(setq *TextMaskColor* col)
(setq col *TextMaskColor*)
)
(if (setq col (acad_colordlg
(cond ((cdr (assoc 62 col)))
(T 1)
)
)
)
(setq *TextMaskColor* (setq col (list (cons 62 col))))
(setq col *TextMaskColor*)
)
)
)
(T
(setq of (getdist (strcat "\nSpecifiez le Decalage du cadre <"
(rtos of)
">: "
)
)
)
(setq *TextMaskOffset* of)
(setq of *TextMaskOffset*)
)
)
)
(setq n -1)
(while (setq tx (ssname ss (setq n (1+ n))))
(setq elst (entget tx)
plst (text2box-plst elst of)
)
(make-mask elst col plst)
)
(setq ec (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(command "_draworder" ss "" "_f")
(setvar "CMDECHO" ec)
(princ)
)

;; ==========================================================;;

;; Text2Box-plst
;; Retourne la liste des sommets (coordonnées SCO) de la boite
;; englobant le texte après Decalage
;;
;; Arguments
;; elst : liste DXF de l'entité
;; of : distance de Decalage

(defun Text2box-plst (elst of / nor ref rot wid hgt jus org box plst)
(if (= "MTEXT" (cdr (assoc 0 elst)))
(setq nor (cdr (assoc 210 elst))
ref (trans (cdr (assoc 10 elst)) 0 nor)
rot (angle '(0 0 0) (trans (cdr (assoc 11 elst)) 0 nor))
wid (cdr (assoc 42 elst))
hgt (cdr (assoc 43 elst))
jus (cdr (assoc 71 elst))
org (list
(cond
((member jus '(2 5 8)) (/ wid -2))
((member jus '(3 6 9)) (- wid))
(T 0.0)
)
(cond
((member jus '(1 2 3)) (- hgt))
((member jus '(4 5 6)) (/ hgt -2))
(T 0.0)
)
)
plst (mapcar
(function
(lambda (p)
(mapcar '+ org p)
)
)
(list
(list (- of) (- of))
(list (+ wid of) (- of))
(list (+ wid of) (+ hgt of))
(list (- of) (+ hgt of))
)
)
)
(setq box (textbox elst)
ref (cdr (assoc 10 elst))
rot (cdr (assoc 50 elst))
plst (list
(list (- (caar box) of) (- (cadar box) of))
(list (+ (caadr box) of) (- (cadar box) of))
(list (+ (caadr box) of) (+ (cadadr box) of))
(list (- (caar box) of) (+ (cadadr box) of))
)
)
)
(setq mat (list (list (cos rot) (- (sin rot)) 0)
(list (sin rot) (cos rot) 0)
'(0 0 1)
)
plst (mapcar
(function
(lambda (p)
(mapcar '+ (mxv mat p) (list (car ref) (cadr ref)))
)
)
plst
)
)
)

;; ==========================================================;;

;; Make-Frame
;; Crée une polyligne encadrant le texte
;;
;; Arguments
;; elst : liste DXF de l'entité
;; col : couleur de la polyligne
;; plst : liste des sommets

(defun make-frame (elst col wid plst / nor elv)
(setq nor (cdr (assoc 210 elst)))
(if (= "MTEXT" (cdr (assoc 0 elst)))
(setq elv (caddr (trans (cdr (assoc 10 elst)) 0 nor)))
(setq elv (caddr (cdr (assoc 10 elst))))
)
(entmake
(append
(list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
(assoc 8 elst)
(if (and (< 15 (atoi (substr (getvar "ACADVER") 1 2)))
(assoc 420 col)
)
(assoc 420 col)
(assoc 62 col)
)
'(100 . "AcDbPolyline")
'(90 . 4)
'(70 . 1)
(cons 43 wid)
(cons 38 elv)
(cons 210 nor)
)
(mapcar (function (lambda (x) (cons 10 x))) plst)
)
)
)

;; ==========================================================;;

;; Make-Mask
;; Crée une hachure SOLID figurant un masque d'arrière plan
;;
;; Arguments
;; elst : liste DXF de l'entité texte
;; col : couleur de la hachure
;; plst : liste des sommets

(defun make-mask (elst col plst / nor elv)
(setq nor (cdr (assoc 210 elst)))
(if (= "MTEXT" (cdr (assoc 0 elst)))
(setq elv (caddr (trans (cdr (assoc 10 elst)) 0 nor)))
(setq elv (caddr (cdr (assoc 10 elst))))
)
(if (= (cdr (assoc 430 col)) "Wipeout")
(MakeWipeout
(mapcar
(function
(lambda (p)
(list (car p) (cadr p) elv)
)
)
plst
)
nor
(cdr (assoc 8 elst))
)
(entmake
(list
'(0 . "HATCH")
'(100 . "AcDbEntity")
(assoc 8 elst)
(if (and (< 15 (atoi (substr (getvar "ACADVER") 1 2)))
(assoc 420 col)
)
(assoc 420 col)
(assoc 62 col)
)
'(100 . "AcDbHatch")
(list 10 0.0 0.0 elv)
(cons 210 nor)
'(2 . "SOLID")
'(70 . 1)
'(71 . 0)
'(91 . 1)
'(92 . 1)
'(93 . 4)
'(72 . 1)
(cons 10 (car plst))
(cons 11 (cadr plst))
'(72 . 1)
(cons 10 (cadr plst))
(cons 11 (caddr plst))
'(72 . 1)
(cons 10 (caddr plst))
(cons 11 (cadddr plst))
'(72 . 1)
(cons 10 (cadddr plst))
(cons 11 (car plst))
'(97 . 0)
'(75 . 0)
'(76 . 1)
'(98 . 1)
'(10 0.0 0.0 0.0)
)
)
)
)




;; ==========================================================;;
;; MakeWipeout crée un objet "wipeout" à partir d'une liste de points 
;; et du vecteur normal de l'objet

(defun MakeWipeout (pt_lst nor lay / dxf10 max_dist cen dxf_14)
(or (member "acwipeout.arx" (arx)) (arxload "acwipeout.arx"))
(setq dxf10 (list (apply 'min (mapcar 'car pt_lst))
(apply 'min (mapcar 'cadr pt_lst))
(caddar pt_lst)
)
)
(setq
max_dist
(float
(apply 'max
(mapcar '- (apply 'mapcar (cons 'max pt_lst)) dxf10)
)
)
)
(setq cen (mapcar '+ dxf10 (list (/ max_dist 2) (/ max_dist 2) 0.0)))
(setq
dxf14 (mapcar
'(lambda (p)
(mapcar '/
(mapcar '- p cen)
(list max_dist (- max_dist) 1.0)
)
)
pt_lst
)
)
(setq dxf14 (reverse (cons (car dxf14) (reverse dxf14))))
(entmake (append (list '(0 . "WIPEOUT")
'(100 . "AcDbEntity")
(cons 8 lay)
'(100 . "AcDbWipeout")
'(90 . 0)
(cons 10 (trans dxf10 nor 0))
(cons 11 (trans (list max_dist 0.0 0.0) nor 0))
(cons 12 (trans (list 0.0 max_dist 0.0) nor 0))
'(13 1.0 1.0 0.0)
'(70 . 7)
'(280 . 1)
'(71 . 2)
(cons 91 (length dxf14))
)
(mapcar '(lambda (p) (cons 14 p)) dxf14)
)
)
)

;; ==========================================================;;
;; Applique une matrice de transformation à un vecteur (Vladimir Nesterovsky) 

(defun mxv (m v)
(mapcar (function (lambda (r) (apply '+ (mapcar '* r v))))
m
)
)

;; ==========================================================;;
;; Retourne une chaîne indiquant l'index de la couleur ou les valeurs RVB 

(defun TrueColor2String (lst / ind)
(setq ind (cond ((cdr (assoc 430 lst)))
((cdr (assoc 420 lst)))
((cdr (assoc 62 lst)))
(T 256)
)
)
(cond
((= (type ind) 'STR) ind)
((= ind 256) "DuCalque")
((= ind 0) "DuBloc")
((< 256 ind)
(strcat (itoa (lsh ind -16))
","
(itoa (lsh (lsh ind 16) -24))
","
(itoa (lsh (lsh ind 24) -24))
)
)
((itoa ind))
)
)  

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

Hormis via les express tools, existe-il un autre moyen d'appliquer un masque a un txt simple de la même manière que sur un multi?

Le but étant de ne pas avoir un second objet indépendant du texte.

 

Merci

 

Grace à toi je découvre seulement maintenant que l'on peut mettre des masques sur les mtext :blink:

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Lien vers le commentaire
Partager sur d’autres sites

Vous n'avez pas bientôt fini de causer de masques partout ! :P

On en entend déjà assez comme ça…

 

Bon je sors :rolleyes:

Seuls nous allons vite, ensemble nous allons plus loin...

CPU Intel 3,5Go / Nvidia RTX-3090

AutoCad (Architecture) 2022 - Lumion PRO

BMW R-1200-RT, c'est moche, oui... je sais...

 

www.neda.ch

Lien vers le commentaire
Partager sur d’autres sites

Pas bête l'idée de groupe. A voir si la modification du texte ensuite est encore possible sans dégrouper/regrouper. Je teste ca.

Merci.

 

CTRL + H

C'est le raccourci clavier qui passe la variable système PICKSTYLE de 0 à 1 à 0 à 1 à 0 ....

 

Quand PICKSTYLE est à 0, les groupes sont gérés normalement (ca ressemble à un bloc quoi).

Quand PICKSTYLE est à 1, tu peut sélectionner/ modifier les entités dans les groupes comme s'ils n'étaient pas groupés.

Lispeur débutant!
Autocad Map3D 2023
Covadis-Autopist 18.0C

Lien vers le commentaire
Partager sur d’autres sites

CTRL + H

C'est le raccourci clavier qui passe la variable système PICKSTYLE de 0 à 1 à 0 à 1 à 0 ....

 

Quand PICKSTYLE est à 0, les groupes sont gérés normalement (ca ressemble à un bloc quoi).

Quand PICKSTYLE est à 1, tu peut sélectionner/ modifier les entités dans les groupes comme s'ils n'étaient pas groupés.

 

De plus, quand tu as fait le groupe, tu le sélectionnes, dans la palette de propriété tu déroules groupe, tu vas sur texte, et depuis la palette tu changes ton texte

Lien vers le commentaire
Partager sur d’autres sites

Grace à toi je découvre seulement maintenant que l'on peut mettre des masques sur les mtext :blink:

 

:D

Pratique aussi pour les cotes, il y a une option pour mettre un masque derrière le texte de cote (j'ai découvert ca il n'y pas logntps, ca change la vie d'avoir des textes lisibles!)

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é