Déméter_33 Posté(e) il y a 8 heures Posté(e) il y a 8 heures Bonjour, Dans une routine assez imposante de fusion d'un fichier natif dans un modèle pré-paramétré, je cherche à transformer l'apparence et la composition de certains "TEXT" en éléments "MTEXT" avec l'insertion de préfixes et suffixes composés de caractères unicodes , ◄ en préfixes et ► en suffixes. Pour cela, j'ai adapté un morceau de LISP (PTX-STX) trouvé sur ce même forum, mais dans lequel je n'arrive pas à paramétrer les caractères UNICODE, même en les entrants manuellement. (defun TextDp1b2Mtext (/ doc ent Pref Suff) (setq TDPsel (ssget "X" '((0 . "TEXT") (8 . "Sectionnement_PlotsAnno")))) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (setq Pref (getstring "\Entrer alt+17")) ;Définition du préfixe manuelle (setq Suff (getstring "\Entrer alt+16")) ;Définition du suffixe manuelle (while (< i (sslength TDPsel)) (setq ent (vlax-ename->vla-object (ssname TDPsel i))) (vla-put-textstring ent (strcat Pref (vla-get-textstring ent) Suff)) (setq i (1+ i)) ) (vla-endundomark doc) (setq Setlen (sslength TDPsel) Count 0 ) (repeat SetLen (setq Ntxt (ssname TDPsel Count)) (command "_txt2mtxt" Ntxt "") (setq jsF (ssadd (entlast)) NMtxt (entlast)) (setq dxf_ent (entget NMtxt)) (entmod (append dxf_ent (list (cons 90 19) ;Encadrement (cons 8 "G-ANNOTATIONS") ;Calque (cons 40 0.15) ;Hauteur de texte (cons 45 1.2) ;Bordure (cons 441 0) ;Echelle (cons 41 1.4) ;Largeur ) ) ) (setq Count (+ 1 Count)) ) (princ) ) Le résultat du code joint me donne bien l'apparence désirée mais n'insère pas les caractères demandés. Help me please.
JPhil Posté(e) il y a 7 heures Posté(e) il y a 7 heures En passant par chr, ça pourrait peut-être fonctionner ? Source : https://www.da-code.fr/chr/
Déméter_33 Posté(e) il y a 5 heures Auteur Posté(e) il y a 5 heures J'y ai pensé (je suis allé sur la même page), mais la liste des 255 caractères ASCII ne comporte pas les deux caractères, seulement les caractères < et > qui ne sont pas assez visuellement explicites dans l'utilisation de nos plans... https://www.purebasic.com/french/documentation/reference/ascii.html Il s'agit d'Alt codes issus de la table de codage graphique de la page de code 850, en fait si je tape (setq A ►) j'ai nil comme réponse, donc je pense juste que ça ne devrai pas être possible... SAUF QUE quand j'utilise le code duquel je me suis inspiré ça fonctionne, donc mon problème doit être ailleurs... Je cherche encore.
didier Posté(e) il y a 3 heures Posté(e) il y a 3 heures Bonjour @Déméter_33 Je ne suis pas sûr de bien comprendre. Est-il possible d'avoir un visuel du rendu souhaité en image ? Est-ce qu'on travaille bien avec du MTEXT, j'ai bien une idée, mais je voudrais voir ce rendu souhaité avant de répondre à côté si je me fourvoie. Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Déméter_33 Posté(e) il y a 3 heures Auteur Posté(e) il y a 3 heures Bonjour @didier, L'élément de base : L'élément une fois converti :
Déméter_33 Posté(e) il y a 3 heures Auteur Posté(e) il y a 3 heures Pourtant, j'utilisais avant un autre LISP mais qui correspondait moins bien à mes besoins et qui lui fonctionne très bien avec ces caractères : ; Ajouter un morceau de texte (prefix) (defun c:ptx(/ doc ent tx1 tx2 txt) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "TEXT,MTEXT"))) (setq tx1 (getstring "\nTexte à ajouter : ")) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vla-put-textstring ent (strcat tx1 (vla-get-textstring ent))) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) Peut être faut-il que je pense mon code autrement en ajustant la commande de sélection de celui-ci ?
didier Posté(e) il y a 2 heures Posté(e) il y a 2 heures Bonjour @Déméter_33 J'ai un peu utilisé le même principe, il n'y en a pas cent. Par contre, je change la police, Wingdings 3 en l'occurrence, les caractères t et u sont des triangles orientés. Voici le visuel : Voici le code : (setq ent (car (entsel))) (setq val (cdr (assoc 1 (entget ent)))) (entmod (subst (cons 1 (strcat "{\\fWingdings 3|b0|i0|c2|p18;t\\" "fArial|b0|i0|c0|p34;" val "\\fWingdings 3|b0|i0|c2|p18;u}") ) (assoc 1 (entget ent)) (entget ent) ) ) Éternel débutant… Mon site perso : Programmer dans AutoCAD
Déméter_33 Posté(e) il y a 1 heure Auteur Posté(e) il y a 1 heure Bien trouvé sur le fond, mais mon dessin a pas aimé : Par contre j'ai réussi à me faire ma routine "propre" dans laquelle j'ai juste à taper les caractères et qui fonctionne nickel du coup : (defun c:TextDp1b2Mtext () (vl-load-com) (setq TDPsel (vla-get-activedocument (vlax-get-acad-object))) ; Récupérer le document actif (vla-startundomark TDPsel) (setq sel (ssget "_X" '((0 . "TEXT") (8 . "Sectionnement_PlotsAnno")))) ; Filtre de sélection : Texte + Mtext uniquement du calque "Sectionnement_PlotsAnno" (progn (setq Pref (getstring T "\Entrer alt+17")) ;; Préfixe facultatif (setq Suff (getstring T "\Entrer alt+16")) ;; Suffixe facultatif (vlax-for ent (vla-get-activeselectionset TDPsel) ; Traiter chaque entité sélectionnée (vla-put-textstring ent (strcat Pref (vla-get-textstring ent) Suff))) (vla-delete (vla-get-activeselectionset TDPsel)) ; Supprimer la sélection après modification ) (vla-endundomark TDPsel) (setq TPsel (ssget "X" '((0 . "TEXT") (8 . "Sectionnement_PlotsAnno")))) ;Sélection de tous les textes du calque Sectionnement_PlotsAnno (setq Setlen (sslength TPsel) Count 0 ) ;setq le nombre d'entités dans Setlen, setq le compteur à 0 (repeat SetLen ;Boucle de répétition (Setlen) fois (setq Ntxt (ssname TPsel Count)) ;setq Ntxt comme étant la (Count)ième entité dans la selection Tsel (command "_txt2mtxt" Ntxt "") ;Transformation de l'entité de Ntxt de texte en mtext (setq jsF (ssadd (entlast)) NMtxt (entlast)) ;setq NMtext la dernière entité Mtext créée (setq dxf_ent (entget NMtxt)) ;Lis le code DXF de l'entité NMtext (entmod (append dxf_ent (list (cons 71 5) ;Justifier (cons 90 19) ;Encadrement (cons 8 "G-ANNOTATIONS") ;Calque (cons 40 0.15) ;Hauteur de texte (cons 45 1.2) ;Bordure (cons 441 0) ;Echelle (cons 41 1.4) ;Largeur ) ) ) (setq Count (+ 1 Count)) ;Ajoute 1 au compteur ) ;Fin de Repeat (princ) ) Fut juste taper les deux caractères... Mais pour le moment ça marche.
didier Posté(e) il y a 1 heure Posté(e) il y a 1 heure Bonjour @Déméter_33 C'est sans doute parce que la gestion des entités MTEXT est cauchemardesque ! Je n'ai pas fait de tests approfondis, mais chez moi ça fonctionne, voir le gif fourni. Si vous êtes arrivés à vos fins, c'est parfait, tant pis pour mes efforts qui tombent à côté de la cible. Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
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