barbichette Posté(e) vendredi à 15:45 Posté(e) vendredi à 15:45 Bonjour, J'ai essayé de créer un bout de code pour apprendre le language. Ce code est censé me demander si je veux exécuter l'une ou l'autre fonction (defun c:ChoisirFonction () (setq choix (getkword "\nChoisissez la fonction à exécuter [CHOIXOPTION1 / CHOIXOPTION2Y] : ")) (cond ((= choix "CHOIXOPTION1") (CHOIXOPTION1) ; Appel de la fonction CHOIXOPTION1 (princ "\nVous avez choisi CHOIXOPTION1")) ((= choix "CHOIXOPTION2Y") (CHOIXOPTION2Y) ; Appel de la fonction CHOIXOPTION2Y (princ "\nVous avez choisi CHOIXOPTION2Y")) (T (princ "\nChoix invalide. Veuillez entrer une option correcte.")) ; Si l'entrée est invalide ) (princ) ; Retour à la ligne de commande ) (defun CHOIXOPTION1 () (command "TEXT" "0,0,0" "0.2" "0" "oui") ; Crée le texte "oui" aux coordonnées 0,0,0 (princ "\nTexte 'oui' écrit aux coordonnées (0,0,0).") ) (defun CHOIXOPTION2Y () (command "TEXT" "0,0,0" "0.2" "0" "non") ; Crée le texte "non" aux coordonnées 0,0,0 (princ "\nTexte 'non' écrit aux coordonnées (0,0,0).") ) Mais la réponse que j'obtient est "Choix de l'option incorrect" Euh ? qu'ai-je fait de faux ? ***********************Rien ne sert de courrir, il faut partir à point.
Olivier Eckmann Posté(e) vendredi à 16:14 Posté(e) vendredi à 16:14 Regarde du côté de la fonction initget
barbichette Posté(e) hier à 06:45 Auteur Posté(e) hier à 06:45 Ce code, ou plutot bout de code a été créé par une IA. J'essaye de comprendre la logique (qui me semble bonne) mais elle renvoie une erreur. Comme je ne connais pas ce langage, je ne vois pas l'erreur qui doit être dans la syntaxe... Je ne connais pas non plus la commande "initget" ni comment l'utiliser Bon, j'ai regardé dans le fichier introduction au Lisp, et j'ai vu que "Initget" sert à définir les réponses autorisées, mais je ne vois pas comment l'intégrer ici, ni la raison pour laquelle il faudrait ***********************Rien ne sert de courrir, il faut partir à point.
Vincent P. Posté(e) hier à 07:58 Posté(e) hier à 07:58 Bonjour, Si tu veut comprendre ce que te produit Copilot (qui s'en sort pas trop mal je trouve), jet un oeil à l'introduction au LISP de maitre (gile) https://gilecad.azurewebsites.net/Tutorials.aspx Et pour l'utilisation de Initget (que tu vas certainement retrouver dans le tuto de (gile)) tu peut regarder ici : http://da-code.fr/initget Lispement Vincent P. Lispeur éternel débutant! Autocad Map3D 2023 Covadis-Autopist 18.2
barbichette Posté(e) hier à 09:56 Auteur Posté(e) hier à 09:56 J'ai cherché, et essayé de comprendre. j'ai pondu ces deux codes. Le premier, demande à selectionner un objet pour rendre le calque de l'objet courant et ensuite demande de choisir si on veut écrire Oui ou non Ce code marche (defun c:def(/ doc ent s *errdef*) (defun *errdef* (msg) (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) (vla-endundomark doc) (setq *error* s) (princ) ) (if (setq ent (entsel)) (progn (setq ent (entget (car ent)) doc (vla-get-activedocument (vlax-get-acad-object)) s *error* *error* *errdef* ) (vla-startundomark doc) (setvar "clayer" (cdr (assoc 8 ent))) (if (cdr (assoc 6 ent)) (setvar "celtype" (cdr (assoc 6 ent))) (setvar "celtype" "bylayer") ) ) ) (initget 1 "CHOIX1 CHOIX2") (setq choix (getkword "\nChoisissez la fonction à exécuter [CHOIX1 / CHOIX2] : ")) (cond ((= choix "CHOIX1") (CHOIX1) ; Appel de la fonction CHOIX1 (princ "\nVous avez choisi CHOIX1")) ((= choix "CHOIX2") (CHOIX2) ; Appel de la fonction CHOIX2 (princ "\nVous avez choisi CHOIX2")) (T (princ "\nChoix invalide. Veuillez entrer une option correcte.")) ) (defun choix1 () (entmakex (list (cons 0 "TEXT") (cons 10 (list 0.0 0.0 0.0)) (cons 40 1.0) ; Hauteur du texte (cons 1 "OUI") (cons 7 "Standard") ; Style de texte (cons 50 0.0) ; Angle de rotation )) (princ) ) (defun choix2 () (entmakex (list (cons 0 "TEXT") (cons 10 (list 0.0 0.0 0.0)) (cons 40 1.0) ; Hauteur du texte (cons 1 "non") (cons 7 "Standard") ; Style de texte (cons 50 0.0) ; Angle de rotation )) (princ) ) (princ) ) Le deuxième qui est une simple évolution dans les fonctions, après le choix de celle a exécuter Ne marche pas il me renvoie le code d'erreur Erreur : no function definition: GRUEDIAG218 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXX DEPART DE LA FONCTION XXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun c:DepartGrue (/ doc ent s *errdef*) (defun *errdef* (msg) (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) (vla-endundomark doc) (setq *error* s) (princ) ) (if (setq ent (entsel)) (progn (setq ent (entget (car ent)) doc (vla-get-activedocument (vlax-get-acad-object)) s *error* *error* *errdef* ) (vla-startundomark doc) (setvar "clayer" (cdr (assoc 8 ent))) (if (cdr (assoc 6 ent)) (setvar "celtype" (cdr (assoc 6 ent))) (setvar "celtype" "bylayer") ) ) ) ;; Demander a l'utilisateur de choisir entre les diffa©rentes fonctions (initget 1 "GRUEDIAG219 GRUEDIAG218 GRUEDIAG178 GRUEDIAG125 GRUEDIAG386 GRUEDIAG366") (setq choix (getkword "\nChoisissez la fonction a executer [GRUEDIAG219 / GRUEDIAG218 / GRUEDIAG178 / GRUEDIAG125 / GRUEDIAG386 / GRUEDIAG366] : ")) (cond ((= choix "GRUEDIAG219") (GRUEDIAG219) (princ "\nVous avez choisi GRUEDIAG219")) ((= choix "GRUEDIAG218") (GRUEDIAG218) (princ "\nVous avez choisi GRUEDIAG218")) ((= choix "GRUEDIAG178") (GRUEDIAG178) (princ "\nVous avez choisi GRUEDIAG178")) ((= choix "GRUEDIAG125") (GRUEDIAG125) (princ "\nVous avez choisi GRUEDIAG125")) ((= choix "GRUEDIAG386") (GRUEDIAG386) (princ "\nVous avez choisi GRUEDIAG386")) ((= choix "GRUEDIAG366") (GRUEDIAG366) (princ "\nVous avez choisi GRUEDIAG366")) (T (princ "\nChoix invalide. Veuillez entrer une option correcte.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX Autodesk Mechanical Desktop 219 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG219 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 25, 30, 35, 40, 45, 50, 55, 60, 65): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("25" (20 20) (25 8.4)) ("30" (20 10) (25 8.6) (30 7)) ("35" (21 10) (25 8.5) (30 6.9) (35 5.8)) ("40" (20 10) (25 8.4) (30 6.9) (35 5.8) (40 5)) ("45" (20 10) (25 8.3) (30 6.8) (35 5.7) (40 4.9) (45 4.3)) ("50" (20 10) (25 8.3) (30 6.7) (35 5.6) (40 4.7) (45 4) (50 3.5)) ("55" (20 10) (25 7.9) (30 6.4) (35 5.4) (40 4.5) (45 3.9) (50 3.3) (55 2.95)) ("60" (20 9.4) (25 7.3) (30 6) (35 4.6) (40 4.2) (45 3.6) (50 3.1) (55 2.6) (60 2.2)) ("65" (20 8.88) (25 6.9) (30 5.6) (35 4.6) (40 3.9) (45 3.3) (50 2.85) (55 2.4) (60 1.95) (65 1.6)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note "1"=taille "90"=rotation (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX Autodesk Mechanical Desktop 218 XXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG218 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 25, 30, 35, 40, 45, 50, 55, 60, 65): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("25" (21 10) (25 8.2)) ("30" (21.1 10) (25 8.3) (30 6.7)) ("35" (21.3 10) (25 8.3) (30 6.8) (35 5.65)) ("40" (20.9 10) (25 8.2) (30 6.6) (35 5.5) (40 4.73)) ("45" (20.2 10) (25 7.9) (30 6.4) (35 5.3) (40 4.6) (45 3.93)) ("50" (20 9.8) (25 7.6) (30 6.2) (35 5.2) (40 4.4) (45 3.8) (50 3.33)) ("55" (20 9.4) (25 7.3) (30 5.9) (35 4.9) (40 4.2) (45 3.6) (50 3.2) (55 2.78)) ("60" (20 8.6) (25 6.7) (30 5.4) (35 4.5) (40 3.8) (45 3.3) (50 2.85) (55 2.5) (60 2.18)) ("65" (20 7.3) (25 5.6) (30 4.5) (35 3.7) (40 3.1) (45 2.65) (50 2.3) (55 2) (60 1.75) (65 1.53)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX Autodesk Mechanical Desktop 178 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG178 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 25, 30, 35, 40, 45, 50, 55, 60): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("25" (21.4 8) (25 6.7)) ("30" (21.3 8) (25 6.674) (30 5.4)) ("35" (21.3 8) (25 6.678) (30 5.403) (35 4.5)) ("40" (21.3 8) (25 6.65) (30 5.379) (35 4.48) (40 3.81)) ("45" (21.1 8) (25 6.593) (30 5.332) (35 4.44) (40 3.775) (45 3.26)) ("50" (20 7.511) (25 5.801) (30 4.676) (35 3.879) (40 3.286) (45 2.826) (50 2.46)) ("55" (20 6.098) (25 4.679) (30 3.746) (35 3.085) (40 2.593) (45 2.211) (50 1.908) (55 1.66)) ("60" (20 5.5) (25 4.205) (30 3.353) (35 2.749) (40 2.3) (45 1.952) (50 1.674) (55 1.448) (60 1.26)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX MD 125 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG125 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 25, 30, 35, 40, 45, 50, 57.5): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("30" (20.4 6) (25 4.7) (30 3.8)) ("35" (20.4 6) (25 4.7) (30 3.8) (35 3.2)) ("40" (20.4 6) (25 4.7) (30 3.8) (35 3.2) (40 2.6)) ("45" (20.4 6) (25 4.7) (30 3.8) (35 3.2) (40 2.6) (45 2.25)) ("50" (20.4 6) (25 4.7) (30 3.8) (35 3.2) (40 2.6) (45 2.25) (50 1.95)) ("55" (20 5.1) (25 3.9) (30 3) (35 2.55) (40 2.1) (45 1.8) (50 1.55) (55 1.35)) ("57.5" (20 4.8) (25 3.8) (30 2.9) (35 2.4) (40 2) (45 1.7) (50 1.43) (55 1.24) (57.5 1.15)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX 386 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG386 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 31, 35, 40, 45, 50): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("31" (20 7.01) (25 5.34) (31 4.1)) ("35" (20 6.775) (25 5.16) (30 4.12) (35 3.4)) ("40" (20 6.205) (25 4.71) (30 3.755) (35 3.09) (40 2.6)) ("45" (20 5.31) (25 4.01) (30 3.18) (35 2.6) (40 2.175) (45 1.85)) ("50" (20.4 4.655) (25 3.5) (30 2.765) (35 2.25) (40 1.87) (45 1.58) (50 1.35)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX 366 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG366 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 31, 35, 40, 45): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ;("30m" (20 6.00) (22 5.30) (25 4.60) (28.6 4.20) (30 3.65)) ;("35m" (20 6.00) (22 5.30) (25 4.60) (27 4.20) (30 3.60) (32 3.40) (35 3.00)) ;("40m" (20 6.00) (22 5.30) (25 4.60) (27 4.20) (30 3.60) (32 3.40) (34.9 3.00) (38.6 3.00) (40 2.90)) ;("45m" (20 6.00) (22 5.30) (25.8 4.60) (28.6 4.20) (30 3.60) (32 3.40) (34.9 3.00) (38.6 3.00) (40 2.90) (42 2.70) (45 2.50)) ;("50m" (20 6.00) (22 5.30) (25 4.60) (27 4.20) (30 3.60) (32 3.40) (34.9 3.00) (38.6 3.00) (40 2.90) (42 2.70) (45 2.50) (47 2.35) (50 2.20)) ;("55m" (20 5.00) (22 4.40) (25 3.80) (27 3.40) (29.9 3.00) (33 3.00) (35 2.80) (37 2.60) (40 2.40) (42 2.25) (45 2.05) (47 1.95) (50 1.80) (52 1.70) (55 1.60)) ;("57.5m" (20 4.60) (22 4.10) (25 3.50) (27 3.20) (28.2 3.00) (31.2 3.00) (32 2.90) (35 2.60) (37 2.45) (40 2.25) (42 2.10) (45 1.90) (47 1.80) (50 1.70) (52 1.60) (55 1.50) (57.5 1.40)) ("31" (21 4.8) (25 4.33) (31 3.3)) ("35" (21 4.9) (25 3.94) (31 2.99) (35 2.55)) ("40" (21 4.34) (25 3.47) (31 2.62) (35 2.23) (40 1.85)) ("45" (21 3.74) (25 2.98) (31 2.23) (35 1.88) (40 1.55) (45 1.3)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) (princ) ) (princ) ) ***********************Rien ne sert de courrir, il faut partir à point.
barbichette Posté(e) hier à 12:25 Auteur Posté(e) hier à 12:25 Bon en fait aucune des deux ne fonctionne... plus La première marchait hier...🤔 ***********************Rien ne sert de courrir, il faut partir à point.
barbichette Posté(e) hier à 12:39 Auteur Posté(e) hier à 12:39 Alors j'ai modifié le lisp de cette façon et cela marche. ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX Autodesk Mechanical Desktop 219 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG219 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 25, 30, 35, 40, 45, 50, 55, 60, 65): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("25" (20 20) (25 8.4)) ("30" (20 10) (25 8.6) (30 7)) ("35" (21 10) (25 8.5) (30 6.9) (35 5.8)) ("40" (20 10) (25 8.4) (30 6.9) (35 5.8) (40 5)) ("45" (20 10) (25 8.3) (30 6.8) (35 5.7) (40 4.9) (45 4.3)) ("50" (20 10) (25 8.3) (30 6.7) (35 5.6) (40 4.7) (45 4) (50 3.5)) ("55" (20 10) (25 7.9) (30 6.4) (35 5.4) (40 4.5) (45 3.9) (50 3.3) (55 2.95)) ("60" (20 9.4) (25 7.3) (30 6) (35 4.6) (40 4.2) (45 3.6) (50 3.1) (55 2.6) (60 2.2)) ("65" (20 8.88) (25 6.9) (30 5.6) (35 4.6) (40 3.9) (45 3.3) (50 2.85) (55 2.4) (60 1.95) (65 1.6)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note "1"=taille "90"=rotation (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX Autodesk Mechanical Desktop 218 XXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG218 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 25, 30, 35, 40, 45, 50, 55, 60, 65): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("25" (21 10) (25 8.2)) ("30" (21.1 10) (25 8.3) (30 6.7)) ("35" (21.3 10) (25 8.3) (30 6.8) (35 5.65)) ("40" (20.9 10) (25 8.2) (30 6.6) (35 5.5) (40 4.73)) ("45" (20.2 10) (25 7.9) (30 6.4) (35 5.3) (40 4.6) (45 3.93)) ("50" (20 9.8) (25 7.6) (30 6.2) (35 5.2) (40 4.4) (45 3.8) (50 3.33)) ("55" (20 9.4) (25 7.3) (30 5.9) (35 4.9) (40 4.2) (45 3.6) (50 3.2) (55 2.78)) ("60" (20 8.6) (25 6.7) (30 5.4) (35 4.5) (40 3.8) (45 3.3) (50 2.85) (55 2.5) (60 2.18)) ("65" (20 7.3) (25 5.6) (30 4.5) (35 3.7) (40 3.1) (45 2.65) (50 2.3) (55 2) (60 1.75) (65 1.53)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX Autodesk Mechanical Desktop 178 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG178 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 25, 30, 35, 40, 45, 50, 55, 60): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("25" (21.4 8) (25 6.7)) ("30" (21.3 8) (25 6.674) (30 5.4)) ("35" (21.3 8) (25 6.678) (30 5.403) (35 4.5)) ("40" (21.3 8) (25 6.65) (30 5.379) (35 4.48) (40 3.81)) ("45" (21.1 8) (25 6.593) (30 5.332) (35 4.44) (40 3.775) (45 3.26)) ("50" (20 7.511) (25 5.801) (30 4.676) (35 3.879) (40 3.286) (45 2.826) (50 2.46)) ("55" (20 6.098) (25 4.679) (30 3.746) (35 3.085) (40 2.593) (45 2.211) (50 1.908) (55 1.66)) ("60" (20 5.5) (25 4.205) (30 3.353) (35 2.749) (40 2.3) (45 1.952) (50 1.674) (55 1.448) (60 1.26)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX MD 125 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG125 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 25, 30, 35, 40, 45, 50, 57.5): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("30" (20.4 6) (25 4.7) (30 3.8)) ("35" (20.4 6) (25 4.7) (30 3.8) (35 3.2)) ("40" (20.4 6) (25 4.7) (30 3.8) (35 3.2) (40 2.6)) ("45" (20.4 6) (25 4.7) (30 3.8) (35 3.2) (40 2.6) (45 2.25)) ("50" (20.4 6) (25 4.7) (30 3.8) (35 3.2) (40 2.6) (45 2.25) (50 1.95)) ("55" (20 5.1) (25 3.9) (30 3) (35 2.55) (40 2.1) (45 1.8) (50 1.55) (55 1.35)) ("57.5" (20 4.8) (25 3.8) (30 2.9) (35 2.4) (40 2) (45 1.7) (50 1.43) (55 1.24) (57.5 1.15)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX 386 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG386 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 31, 35, 40, 45, 50): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ("31" (20 7.01) (25 5.34) (31 4.1)) ("35" (20 6.775) (25 5.16) (30 4.12) (35 3.4)) ("40" (20 6.205) (25 4.71) (30 3.755) (35 3.09) (40 2.6)) ("45" (20 5.31) (25 4.01) (30 3.18) (35 2.6) (40 2.175) (45 1.85)) ("50" (20.4 4.655) (25 3.5) (30 2.765) (35 2.25) (40 1.87) (45 1.58) (50 1.35)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXX 366 XXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun GRUEDIAG366 () (setq choix-fleche (getstring "\nEntrez la longueur de fleche installee (ex: 31, 35, 40, 45): ")) ;; Definition des capacites de levage selon la longueur de fleche et le rayon de travail (setq capacites '( ;("30m" (20 6.00) (22 5.30) (25 4.60) (28.6 4.20) (30 3.65)) ;("35m" (20 6.00) (22 5.30) (25 4.60) (27 4.20) (30 3.60) (32 3.40) (35 3.00)) ;("40m" (20 6.00) (22 5.30) (25 4.60) (27 4.20) (30 3.60) (32 3.40) (34.9 3.00) (38.6 3.00) (40 2.90)) ;("45m" (20 6.00) (22 5.30) (25.8 4.60) (28.6 4.20) (30 3.60) (32 3.40) (34.9 3.00) (38.6 3.00) (40 2.90) (42 2.70) (45 2.50)) ;("50m" (20 6.00) (22 5.30) (25 4.60) (27 4.20) (30 3.60) (32 3.40) (34.9 3.00) (38.6 3.00) (40 2.90) (42 2.70) (45 2.50) (47 2.35) (50 2.20)) ;("55m" (20 5.00) (22 4.40) (25 3.80) (27 3.40) (29.9 3.00) (33 3.00) (35 2.80) (37 2.60) (40 2.40) (42 2.25) (45 2.05) (47 1.95) (50 1.80) (52 1.70) (55 1.60)) ;("57.5m" (20 4.60) (22 4.10) (25 3.50) (27 3.20) (28.2 3.00) (31.2 3.00) (32 2.90) (35 2.60) (37 2.45) (40 2.25) (42 2.10) (45 1.90) (47 1.80) (50 1.70) (52 1.60) (55 1.50) (57.5 1.40)) ("31" (21 4.8) (25 4.33) (31 3.3)) ("35" (21 4.9) (25 3.94) (31 2.99) (35 2.55)) ("40" (21 4.34) (25 3.47) (31 2.62) (35 2.23) (40 1.85)) ("45" (21 3.74) (25 2.98) (31 2.23) (35 1.88) (40 1.55) (45 1.3)) )) ;; Recuperation des valeurs disponibles pour la fleche choisie (setq valeurs (cdr (assoc choix-fleche capacites))) (if valeurs (progn (foreach item valeurs (setq rayon (car item) charge (cadr item)) ;; Dessiner un cercle pour chaque rayon de travail ;; la partie (command "_circle" '(x x) defini le centre des cercles (command "_circle" '(0 0) (rtos rayon 2 2)) ;; Ajouter un texte avec la charge au bon emplacement ;; (list rayon x) defini la coordonnee y du texte de charge note (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))) (princ "\nDiagramme de levage cree avec toutes les charges affichees.")) (princ "\nFleche non disponible.")) (princ) ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXX DEPART DE LA FONCTION XXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (defun c:DepartGrue (/ doc ent s *errdef*) (defun *errdef* (msg) (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) (vla-endundomark doc) (setq *error* s) (princ) ) (if (setq ent (entsel)) (progn (setq ent (entget (car ent)) doc (vla-get-activedocument (vlax-get-acad-object)) s *error* *error* *errdef* ) (vla-startundomark doc) (setvar "clayer" (cdr (assoc 8 ent))) (if (cdr (assoc 6 ent)) (setvar "celtype" (cdr (assoc 6 ent))) (setvar "celtype" "bylayer") ) ) ) ;; Demander a l'utilisateur de choisir entre les diffa©rentes fonctions (initget 1 "GRUEDIAG219 GRUEDIAG218 GRUEDIAG178 GRUEDIAG125 GRUEDIAG386 GRUEDIAG366") (setq choix (getkword "\nChoisissez la fonction a executer [GRUEDIAG219 / GRUEDIAG218 / GRUEDIAG178 / GRUEDIAG125 / GRUEDIAG386 / GRUEDIAG366] : ")) (cond ((= choix "GRUEDIAG219") (GRUEDIAG219) (princ "\nVous avez choisi GRUEDIAG219")) ((= choix "GRUEDIAG218") (GRUEDIAG218) (princ "\nVous avez choisi GRUEDIAG218")) ((= choix "GRUEDIAG178") (GRUEDIAG178) (princ "\nVous avez choisi GRUEDIAG178")) ((= choix "GRUEDIAG125") (GRUEDIAG125) (princ "\nVous avez choisi GRUEDIAG125")) ((= choix "GRUEDIAG386") (GRUEDIAG386) (princ "\nVous avez choisi GRUEDIAG386")) ((= choix "GRUEDIAG366") (GRUEDIAG366) (princ "\nVous avez choisi GRUEDIAG366")) (T (princ "\nChoix invalide. Veuillez entrer une option correcte.")) ) (princ) ) Mais au final je ne sais pas pourquoi cela fonctionne maintenant... ***********************Rien ne sert de courrir, il faut partir à point.
Vincent P. Posté(e) hier à 14:15 Posté(e) hier à 14:15 Bonjour Le 31/03/2025 à 12:25, barbichette a dit : Bon en fait aucune des deux ne fonctionne... plus La première marchait hier...🤔 Développer Normalement, il ne devait pas marcher avant non plus, le problème vient de l'organisation de ton code. (defun c:Pouet1 () (choix1) (defun choix1 () (princ "Pouet") (princ) ) ) (defun c:Pouet2 () (defun choix1 () (princ "Pouet") (princ) ) (choix1) ) Pouet1 ne fonctionnera pas. Lorsque tu vas lancer la commande, le LISP va se dérouler, il va rencontrer (choix1), mais il ne le "connaît pas" encore. Si tu veux garder les defun imbriqués, il faut déclarer la fonction avant de l’appeler (comme dans Pouet2). Le LISP se déroule, il définit la fonction choix1, puis il y fait appel, tout va bien. Dernière possibilité : ne pas imbriquer les defun (ce que tu as fait dans ton LISP final) (defun choix1 () (princ "Pouet") (princ) ) (defun c:Pouet3 () (choix1) (choix2) ) (defun choix2 () (princ " et re-Pouet") (princ) ) Ici, Pouet3 fait appel à 2 fonctions "externe" (qui existe en dehors de lui). Autocad connaît les fonctions choix1 et choix2 indépendamment de la fonction Pouet3. Donc que tu le places avant ou après pouet3, il pourra les utiliser. C'est comme ça que je fais le plus souvent mes LISP. Pour avancer en LISP, tu peux te renseigner sur la déclaration des variables (absence de ton programme) qui te rendra un travail plus propre et moins sujet aux bugs. Lispeur éternel débutant! Autocad Map3D 2023 Covadis-Autopist 18.2
barbichette Posté(e) hier à 14:32 Auteur Posté(e) hier à 14:32 Merci pour cette aide. En fait j'ai compris que j'avais un souci dans l'organisation et la position de mes parenthèses. et donc dans l'imbrication de mes fonctions... ***********************Rien ne sert de courrir, il faut partir à point.
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