Aller au contenu

Préfixe et Sufixe


DenisHen

Messages recommandés

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)

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é