MiniMinus Posté(e) le 20 juin 2006 Posté(e) le 20 juin 2006 Voilà les petites routines que j'ai concoctées pour pouvoir faire appel à un calque avant de créer un objet puis remettre l'ancien actif. Seulement, si je mets "Nom1" en argument, cela bloque. Par contre telles qu'elles sont là, elles fonctionnent très bien. Quelqu'un peut-il m'expliquer pourquoi ? Merci et bonne journée à tous MiniMinus--------------------------------------------------------------------------------------------Sans arguments... (defun c:Chang_Calq () (setq Nom1 (getstring "Nom du calque :")) (setq old_lay (getvar "clayer")) (if (not (tblsearch "LAYER" Nom1)) (c:creer_calq) (setvar "clayer" Nom1) ) (princ)) (defun c:Remet_Calq ( ) (setvar "clayer" old_lay)) (defun c:creer_calq ( ) (command "_layer" "E" Nom1 "CO" 3 "" "") )-------------------------------------------------------------------------------------------------------------... et avec argument: (defun c:Chang_Calq (Nom1 / ) (setq Nom1 (getstring "Nom du calque :")) (setq old_lay (getvar "clayer")) (if (not (tblsearch "LAYER" Nom1)) (c:creer_calq) (setvar "clayer" Nom1) ) (princ)) (defun c:Remet_Calq ( ) (setvar "clayer" old_lay)) (defun c:creer_calq ( Nom1 / ) (command "_layer" "E" Nom1 "CO" 3 "" "") )
(gile) Posté(e) le 20 juin 2006 Posté(e) le 20 juin 2006 Salut, Décidément, je ne dois pas être clair dans mes explications ! Si une fonction nécessite des arguments, on ne peut la lancer sans spécifier ces arguements. Exemple 1 (defun MaFonction (str)(princ (strcat "\L'argument est : " str))(princ)) Si on tape à la ligne de commande : (MaFonction "Salut !") il est retourné : L'argument est : Salut ! (MaFonction) il est retourné : ; erreur: nombre d'arguments insuffisants MaFonction il est retourné : Commande inconnue "MAFONCTION". Appuyez sur F1 pour obtenir de l'aide. Quand on fait un (defun C:MaFonction ...) c'est pour pouvoir lancer fonction en tapant directement MaFonction à la ligne commande et dans ce cas il est impossible de spécifer le (ou les) argument(s). Exemple 2 : (defun C:MaFonction (str)(princ (strcat "\L'argument est : " str))(princ)) Si on tape à la ligne de commande : (MaFonction "Salut !") il est retourné : L'argument est : Salut ! (MaFonction) il est retourné : ; erreur: nombre d'arguments insuffisants MaFonction il est retourné : ; erreur: nombre d'arguments insuffisants Il est donc préférable de n'utiliser les (defun C:* ...) que pour les cas où on désire spécifiquement définir un nom de commande semblable aux commandes prédéfines.Donc de ne pas les utiliser pour les fonctions nécéssitant un (ou des) arguments, qui ne peuvent, elles, n'être lancées que par une expression LISP du type (fonction arg1 ...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
tiboulen Posté(e) le 20 juin 2006 Posté(e) le 20 juin 2006 pour changer de calque , je fais beaucoup plus simple(setq newcalque (getstring "nouveau calque"))(command "-calque" "e" newcalque "")si le calque n'existe pas il est crée,si il existe il le met actif sans message d'erreur
(gile) Posté(e) le 20 juin 2006 Posté(e) le 20 juin 2006 Je n'avais répondu que sur la question des defun avec ou sans arguments en préciant le rôle de C: Mais Tiboulen a complètement raison pour la commande "-calque" ("_-layer") et l'option "e" ("_make" ou "_m"), j'ajouterais que pour seulement une ligne de code, il est rarement intéressant de faire un (defun ...) à part et de l'appeler depuis une autre fonction, autant mettre le ligne directement dans cette fonction. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
MiniMinus Posté(e) le 20 juin 2006 Auteur Posté(e) le 20 juin 2006 Tout d'abord merci à vous deux. Gile je peux te dire que tu avais été clair mais c'est certainement moi qui n'avait pas compris qu'avec "c:fonction" , on ne pouvait pas donner d'argument (toujours la fatigue car ENORMEMENT de boulot plus apprendre le LISP !!!!). Mais ce coup-ci la leçon est retenue. Merci également Tiboulen pour le racourci. Je l'avais remarqué après avoir écrit mes routines et comme c'était le passage d'argument qui me gênait, je n'avais rien changé. Pour ce qui est d'écrire des fonctions d'une ligne, il est dit "Qu'il faut diviser pour régner". Aussi je crée des petites routines que je peux manipuler plus facilement et ainsi mieux les comprendre. Mais ne vous en faites pas, quand je veux les utiliser vraiment, j'insère simplement la ligne de code dans le programme. Je trouve que c'est plus facile pour moi cerner le langage au début. En tous cas, cela réchauffe le coeur de ne pas se sentir seul dans cette froide jungle du langage informatique. MiniMinus
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