DenisHen Posté(e) le 21 octobre 2013 Posté(e) le 21 octobre 2013 Bonjour à tous, Voilà, j'ai écris 2 routines que je poste : ;;;ajoute un préfix au texte sélectionné (defun c:prefixe (pref / ss i etx idx newidx) (setq ss (ssget "_:S" '((0 . "*TEXT")))) (princ "\n1") (if ss (progn (setq i 0) (while (< i (sslength ss)) (setq etx (entget (ssname ss i))) (setq idx (cdr (assoc 1 etx))) (setq newidx (strcat pref idx)) (setq etx (subst (cons 1 newidx) (assoc 1 etx) etx)) (entmod etx) (setq i (+ i 1)) ) ;_ Fin:while ) ;_ Fin:progn ) ;_ Fin:if ) ;_ Fin de defun ;;;ajoute un sufix au texte sélectionné (defun c:sufixe (suf / ss i etx idx newidx) (setq ss (ssget "_:S" '((0 . "*TEXT")))) (princ "\n1") (if ss (progn (setq i 0) (while (< i (sslength ss)) (setq etx (entget (ssname ss i))) (setq idx (cdr (assoc 1 etx))) (setq newidx (strcat idx suf)) (setq etx (subst (cons 1 newidx) (assoc 1 etx) etx)) (entmod etx) (setq i (+ i 1)) ) ;_ Fin:while ) ;_ Fin:progn ) ;_ Fin:if ) ;_ Fin de defun Pour toutes question... Je reste là. 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)
fredbross Posté(e) le 21 octobre 2013 Posté(e) le 21 octobre 2013 Bonsoir, sinon il y avais déjà ça sur le net: (defun c:prefixe(/ 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) ) ; Ajouter un morceau de texte (suffix) (defun c:stx(/ 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 (vla-get-textstring ent) tx1)) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) )
lecrabe Posté(e) le 21 octobre 2013 Posté(e) le 21 octobre 2013 Hello DenisH Desole mais tes routines ne sont pas correctes du moins pour mon MAP 2010 ! lecrabe Autodesk Expert Elite Team
DenisHen Posté(e) le 21 octobre 2013 Auteur Posté(e) le 21 octobre 2013 Salut lecrabe, Je les ai essayées sur un 2010 et çà fonctionne... Je ne comprend pas. 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)
lecrabe Posté(e) le 21 octobre 2013 Posté(e) le 21 octobre 2013 Hello Commande: prefixe; erreur: nombre d'arguments insuffisants SVP tu peux me dire OU tu initialises / prepares la variable PREF et SUF ??? que tu concatenes avec le contenu du texte existant : IDX Je suis un "gros nul" en Lisp et franchement c no comprendo pour moi !! Mais je suis pret a apprendre !? lecrabe Autodesk Expert Elite Team
(gile) Posté(e) le 21 octobre 2013 Posté(e) le 21 octobre 2013 Salut, Les routines de Denis ne peuvent pas être utilisées comme des commandes. Il s'agit de routines qui requièrent un argument (le préfixe ou le suffixe à ajouter aux textes sélectionnés). Il me semble bien avoir expliqué (plusieurs fois) à Denis qu'il était inutile (et ambigu) de préfixer avec "c:" les noms de fonctions LISP qui ne sont pas destinées à être appelées comme des commandes.Encore une fois, donc, en règle générale on n'utilise le préfixe "c:" pour les noms de fonctions LISP uniquement si celles-ci doivent être appelées comme des commandes et n'ont donc pas d'argument*. Pour utiliser ces routines en ligne commande, il faut entrer une expression LISP avec argument :(c:prefixe "toto_")par exemple, pour ajouter "toto_" aux textes sélectionnés. La manière plus "académique" serait de supprimer les préfixes "c:" dans les noms de fonctions de Denis et, au besoin, de définir une commande qui demanderait le préfixe (ou suffixe) à l'utilisateur et appellerait la routine en lui passant la chaine entrée en argument. ;;;ajoute un préfixe au textes sélectionnés (defun prefixe (pref / ss i etx idx newidx) (setq ss (ssget "_:S" '((0 . "*TEXT")))) (princ "\n1") (if ss (progn (setq i 0) (while (< i (sslength ss)) (setq etx (entget (ssname ss i))) (setq idx (cdr (assoc 1 etx))) (setq newidx (strcat pref idx)) (setq etx (subst (cons 1 newidx) (assoc 1 etx) etx)) (entmod etx) (setq i (+ i 1)) ) ;_ Fin:while ) ;_ Fin:progn ) ;_ Fin:if ) ;_ Fin de defun ;;; Commande PREFIXE (defun c:prefixe (/ pref) (if (setq pref (getstring "\nEntrez le préfixe: ")) (prefixe pref) ) (princ) ) * une exception toutefois à cette règle pour les fonctions LISP destinées à être appelées par des applications ObjectARX avec acedInvoke() (ou Invoke() en .NET). Ceci explique pourquoi les fonctions doivent être préfixées avec "c:" dans ObjectDCL ou OpenDCL (applications ObjectARX).On peut aussi, au lieu de préfixer les noms de fonctions, uiliser vl-acad-defun :If a function does not have the c: prefix, and you want to be able to invoke this function from an external ObjectARX application, you can use vl-acad-defun to make the function accessible.(c:fonction [arguments...] ...)ou(fonction [arguments...] ...) (vl-acad_defun 'fonction) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 21 octobre 2013 Posté(e) le 21 octobre 2013 Hello C bien ce que j'avais imagine ! Donc une bonne mesure de DenisH + qq gouttes de GC (Gilles) et c TIP-TOP ! Merci a DenisH & Gilles, Bonne Soiree, lecrabe Autodesk Expert Elite Team
DenisHen Posté(e) le 22 octobre 2013 Auteur Posté(e) le 22 octobre 2013 Salut, Désolé, j'avais oublié... Je lance ces commande par un menu tel que ... [Préfixe Ht=]^C(c:prefixe "Ht="); [Préfixe Pf=]^C(c:prefixe "Pf="); [--] [sufixe 0]^C(c:prefixe "0"); [sufixe m]^C(c:prefixe "m"); ... 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)
lecrabe Posté(e) le 22 octobre 2013 Posté(e) le 22 octobre 2013 Hello En resume notre "affreux" DenisH est un "petit cachotier" !? Bonne Journee, lecrabe PS: tu t'es ameliore sur le groupe de dessins et les requetes de MAP ? Autodesk Expert Elite Team
DenisHen Posté(e) le 22 octobre 2013 Auteur Posté(e) le 22 octobre 2013 Salut, Je n'ai pas eu le temps de me pencher sur la question... Mais merci lecrabe de t'en soucier... 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)
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