DenisHen Posté(e) le 25 février 2016 Posté(e) le 25 février 2016 Bonjour à tous. Voilà, je cherche à faire une routine qui change le texte contenu dans une entité "TEXT" mais je ne sais absolument pas par où commencer... Si quelqu'un a une astuce ou un conseil, je suis preneur... Denis... 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)
Olivier Eckmann Posté(e) le 25 février 2016 Posté(e) le 25 février 2016 Bonjour (entget (car (entsel))) est toujours un bon début (il y a d'ailleurs un bouton dans les palettes de base d'AutoCAD qui lance cette fonction)puis sélection d'un texte permet de récupérer la liste DXF, ensuite tu repères la paire pointée qui contient l'info à mettre à jour.Ensuite un petit (subst ... pour mettre à jour la liste DXFet un petit (entmod ... pour mettre à jour l'entité. Olivier 1
(gile) Posté(e) le 25 février 2016 Posté(e) le 25 février 2016 Salut, En modifiant la liste DXF de l'entité. Regarde les fonctions subst et entmod. tu trouveras un exemple dans "Introduction à AutoLISP" au chapitre 16.2. 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 25 février 2016 Auteur Posté(e) le 25 février 2016 Merci à vous de m'aider, je vais voir si j'ai bien compris... Denis... 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)
bonuscad Posté(e) le 25 février 2016 Posté(e) le 25 février 2016 Comme tu rencontre beaucoup de difficulté, je ne peux que te conseiller les méthodes évoqué par Olivier et gilles, ce sera une bonne démarche pour manipuler les fonctions de base. Il y a aussi un autre moyen, que je donne pour d'autres, qui est beaucoup plus rapide.Exemple: (vlax-put (vlax-ename->vla-object (car (entsel "\nSélectionner un texte: "))) 'TextString (getstring T "\nNouveau texte: ") ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
DenisHen Posté(e) le 25 février 2016 Auteur Posté(e) le 25 février 2016 Merci à vous, j'ai fini par comprendre, enfin je pense... Maintenant, j'ai donc ça :;;;**************************************** ;;; Transforme un text en casse Prénon NOM ;;;**************************************** ;;; Utilise str2lst, lst2str et NomPropre de (gile) (defun c:PrenomNOM () (setq Select (entsel "\nChoisissez votre texte :")) (setq Texte (cdr (assoc 1 (entget (car Select))))) (setq Texte (str2lst Texte " ")) (setq DebTxt (Nompropre (lst2str (reverse (cdr (reverse Texte))) " "))) ;_ Fin de setq (setq FinTxt (strcase (last Texte))) (setq NouvTxt (strcat DebTxt " " FinTxt)) ;(princ Texte) (setq elst (entget (car Select))) (setq elst (subst (cons 1 NouvTxt) (assoc 1 elst) elst)) (entmod elst) (princ) ) ;_ Fin de defun C'est mon premier code "complet" ! ! ! Merci encore à vous, Denis... 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)
(gile) Posté(e) le 25 février 2016 Posté(e) le 25 février 2016 Re, Il y a aussi la nouvelle méthode (A2012) qu'on oublie toujours : (setq ent (car (entsel "\nChoisissez votre texte :"))) (setq ancienTexte (getpropertyvalue ent "TextString")) ;... (setpropertyvalue ent "TextString" nouveauTexte) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 25 février 2016 Auteur Posté(e) le 25 février 2016 Je ne l'avais pas oubliée, je ne la connaissais même pas... :( Maintenant que je les "connais" (subst et (entmod ouvrent beaucoup de possibilités... Il me vient pas mal d'idées... Mais j'ai encore beaucoup de mal avec les entsel, entget... Merci encore pour tout... Denis... 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)
DenisHen Posté(e) le 25 février 2016 Auteur Posté(e) le 25 février 2016 Bien entendu, il y a un défaut... Si le texte sélectionné est un texte "unique" (un seul mot) la chaine renvoie "Nil MotUnique" Comment faire pour savoir s'il y a un espace dans un "string" ? Je n'ai rien trouvé dans l'excellent "Introduction à AutoLISP" de (gile)... J'ai essayé ça, mais ça ne fonctionne pas :(defun c:PrenomNOM () (setq Select (entsel "\nChoisissez votre texte :")) (setq Texte (vl-string-trim " " (cdr (assoc 1 (entget (car Select)))))) (if (/= (vl-string-search " " Texte) nil) (progn (setq Texte (str2lst Texte " ")) (setq DebTxt (Nompropre (lst2str (reverse (cdr (reverse Texte))) " ")) ) ;_ Fin de setq (setq FinTxt (strcase (last Texte))) (setq NouvTxt (strcat DebTxt " " FinTxt)) (setq elst (entget (car Select))) (setq elst (subst (cons 1 NouvTxt) (assoc 1 elst) elst)) (entmod elst) ) ;_ Fin de progn (progn) (setq NouvTxt (Nompropre Texte)) (setq elst (entget (car Select))) (setq elst (subst (cons 1 NouvTxt) (assoc 1 elst) elst)) (entmod elst) ) ;_ Fin de if (princ) ) ;_ Fin de defun Denis... 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)
didier Posté(e) le 25 février 2016 Posté(e) le 25 février 2016 Coucou C'est bien tu poses des questions, (nous de notre temps on ne savait pas à qui s'adresser). Un exemple vite fait, la variable test contient une chaîne de caractères (string) Si : (wcmatch test "* *") renvoie T il y a une espace quelque part, nil pas d'espace. (entre les caractères génériques * (étoile) il y a une espace. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 25 février 2016 Auteur Posté(e) le 25 février 2016 Mille mercis didier pour ton aide... Mais je ne m'explique pas pourquoi le (if (/= (vl-string-search " " Texte) nil) ne fonctionne pas... EDIT : Pfff, en plus, je t'ai dérangé pour rien, le deuxième progn était fermé dès son ouverture... Mea Maxima Coulpa... (nous de notre temps on ne savait pas à qui s'adresser) C'est vrai, et sans CadXP, je ne connaitrais absolument rien du Lisp... C'est grace à vous tous que j'arrive à faire des petites macros qui me font gagner des heures et des heures de boulo ! ! ! Merci encore pour ton aide... Et à CadXP... Denis... 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)
didier Posté(e) le 25 février 2016 Posté(e) le 25 février 2016 Coucou Je ne suis pas du genre à dire "c'était mieux avant", toutefois il est clair que c'était quelque peu différent :Sans parler du fait que celui qui débutait en lisp était vraiment isolé dans son coin sans personne avec qui échanger il n'y avait pas de I.D.E. Exemple de travail :taper dans l'edit du DOS le code du programmefermer le lisp en l'enregistrantlancer AutoCAD (pas de multi tâches)loader la routine (avec le chemin)lancer la routine et deux cas se présentent :ça marche tant mieuxça marche pas et tu sais pas pourquoi (problème de parenthèse, division par zéro, mauvais nom de commande, variable pas globale ...) je te parle des années 90 du siècle dernier.La grande joie et la fierté quand ça marchait je ne te dis que ça... Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 25 février 2016 Auteur Posté(e) le 25 février 2016 Effectivement, j'ai commencé au début des années 90 sur AutoCAD (version 9 je crois). Et c'est un collègue qui faisait les LISP... Il avait même fait un programme en TurboBasic pour créer des DXF issus de nos levés topo ! ! ! Tout ça dans l'éditeur de texte d'MS-DOS... Je me souviens encore du nombre de clopes qu'il fumait quand ça ne voulait pas ! ! C'était mes premiers pas dans la programmation... Amicalement aussi... 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)
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