Aller au contenu

Messages recommandés

Posté(e)

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.

Posté(e)

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.

Posté(e)

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

Posté(e)

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.

Posté(e)

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.

Posté(e)

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

Posté(e)

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.

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é