Aller au contenu

Jouer avec les arguments ou sans ?


Messages recommandés

Posté(e)

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

)

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

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é