DenisHen Posté(e) le 9 juin 2006 Posté(e) le 9 juin 2006 Bonsoir à tous.... Je suis en plein développement et me vient d'un coup... Comment dois-je faire pour pouvoir faire appel à la même routine depuis une autre routine ET depuis AutoCAD ? Dans le Menu : (c:routine2 "Symb1" "Symb2") Dans Lisp (defun c:routine1 (symb1 symb2 / ) (Patati et Patata) ) Et plus loin.... (defun c:routine2 (symb1 symb2 / ) (Patati (routine1 Symb1 Symb2) Patata) ) Si on ne regarde pas les parenthèses, j'ai improvisé, mais juste si c'est possible... Merci... 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 9 juin 2006 Posté(e) le 9 juin 2006 Salut, On peut, depuis un lisp appeler une routine définie par un (defun c:routine ...). On l'appelle depuis le LISP en faisant (c:routine). Ce qui est curieux dans ton exemple, c'est d'avoir un defun (c:routine (arg1 arg2 /) ...) avec des arguments. Quand on choisit de faire un (defun c:routine ...) c'est pour pouvoir appeler le LISP en tapant directement routine à la ligne de commande (ou dans un menu, une macro ...) et, dans ce cas, je vois mal comment les arguments peuvent passer à la fonction routine. Si une fonction nécessite un (ou des) argument(s) on la définit avec (defun routine (arg1 arg2 /) ...) et on l'appelle depuis un LISP (ou à la ligne de commande ou dans un menu ...) avec (routine a b) où a et b sont les arguments. Dans ton exemple, il n'est pas nécessaire de faire des (defun c:* ...) même si çà ne devrait pas poser de problème de fonctionnement. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 9 juin 2006 Posté(e) le 9 juin 2006 Ce qui est curieux dans ton exemple, c'est d'avoir un defun (c:routine (arg1 arg2 /) ...) avec des arguments. C'est vrai que c'est une façon curieuse, et généralement inutile. MAIS Autodesk a bien créé des fonctions 3D supplémentaires comme _Align _Rotate3D etc.. et aussi des fonction sur les rendus qui sont définis de cette sorte. De ce fait on les utilise en ligne de commande de manière normal (avec parfois des boites de dialogues) ou à travers des appels en lisp sous la forme (c:align pt10 pt11 pt20 pt21.....) qui est la procédure d'appel recommandé, soit pour shunter les boites de dialogue ou des appels recursif par command qui engendre des erreurs de profondeur. Je pense que c'est une forme assez évolué, qui n'est généralement pas necessaire de reproduire pour nous simple lispeur ;) Ne compliquont pas les choses :casstet: Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
DenisHen Posté(e) le 9 juin 2006 Auteur Posté(e) le 9 juin 2006 Messieurs, je ne saisie pas... Je ne pensais pas passer par la ligne de commande ? ? Dans le Menu : (c:routine2 "Symb1" "Symb2") Je pensais savoir faire la différence entre (c:routine2 "Symb1" "Symb2") et routine2;Symb1;Symb2; A moins que je n'ai pas compris le sens des réponses.... 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 9 juin 2006 Posté(e) le 9 juin 2006 C'est ce que disons, si tu ne penses pas appeler la fonction directement en faisant routine à la ligne de commande, fais simplement : (defun routine (arg1 arg2 / ) ...) que tu peux ensuite appeler depuis un LISP, la ligne de commande, un menu, un bouton en faisant : (routine a b) (ou ^C^C(routine a b); pour un bouton) [Edité le 9/6/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour 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