DenisHen Posté(e) le 1 décembre 2016 Posté(e) le 1 décembre 2016 Bonjour à la communauté... Voilà, j'ai écris un LISP avec une DCL, tout fonctionne correctement, sauf que si je lance une deuxième fois cette commande "DHPtTopo", la fenêtre du DCL s'ouvre et se referme immédiatement... Mais pas toujours... ? ? ? Télécharger ces deux fichiers depuis WeTransfer Si quelqu'un a une astuce, un conseil... Je suis preneur... 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)
Patrick_35 Posté(e) le 1 décembre 2016 Posté(e) le 1 décembre 2016 Salut C'est à mon avis un problème de variables.Pour trouver ce que tu as oublié de déclarer localement 1) Tu fermes et ré-ouvres ton dessin (pour repartir sur de bonnes bases).2) Tu lances l'instruction (setq variables (atoms-family 1))3) Tu lances ton lisp est tu fais toutes les manips.4) Tu lances (vl-remove-if '(lambda(x)(vl-position x variables)) (atoms-family 1))5) Tu as le résultat de ce qui traine (dont la variable variables, ce qui est normal, car non déclarée auparavant) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 1 décembre 2016 Auteur Posté(e) le 1 décembre 2016 Salut Maître Patrick_35 pour ta réponse. Je prendrais le temps la semaine prochaine pour vérifier cette variable grâce à ta méthode... J'avais le temps de me mettre perfectionner ce LISP et hop, boulo urgent de dernière minute... Merci encore... 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)
DenisHen Posté(e) le 1 décembre 2016 Auteur Posté(e) le 1 décembre 2016 Bon, j'ai trouvé 5 minutes ce midi pour revoir mon LISP. avec ta méthode, j'ai trouvé deux variables non ou mal déclarées, ensuite, j'ai ça : 1. nouveau dessin,2. une liste de variables à perdre la raison,3. ma routine se lance,4. seule la variable "VARIABLES" reste,5. Rien ne traîne... Que faire maintenant... 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 1 décembre 2016 Posté(e) le 1 décembre 2016 Salut, Un vieil adage disais qu'une bonne routine LISP ne devait pas dépasser 10 lignes.Sans essayer de respecter stricto-sensu cette adage, je dirais qu'une bonne pratique est de fractionner son code en plusieurs fonctions ce qui permet de les tester séparément.Par exemple, si une commande LISP utilise une boite de dialogue, il est souvent profitable qu'une fonction indépendante (locale ou globale) ouvre la boite de dialogue et en retourne le résultat (éventuellement sous forme de liste). Un petit exemple vite fait : Le DCLhello :dialog{ label = "Hello"; :boxed_radio_row{ label = "Civilité"; key = "civilite"; :radio_button{ label = "Madame"; key = "madame"; } :radio_button{ label = "Monsieur"; key = "monsieur"; } } :edit_box{ label = "Nom"; key = "nom"; } :edit_box{ label = "Prénom"; key = "prenom"; } spacer; ok_cancel; } La routine qui ouvre la boite de dialogue et retourne le résultat :(defun helloDlg (/ dcl_id civilite nom prenom status result) (setq dcl_id (load_dialog "HelloWorld.dcl")) (if (new_dialog "hello" dcl_id) (progn (setq civilite "madame") (set_tile "civilite" civilite) (action_tile "civilite" "(setq civilite $value)") (action_tile "nom" "(setq nom $value)") (action_tile "prenom" "(setq prenom $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq status (start_dialog)) (unload_dialog dcl_id) (if (= status 1) (setq lst (list civilite nom prenom)) ) ) ) ) La commande :(defun c:Hello (/ lst) (if (setq lst (helloDlg)) (alert (strcat "Hello " (if (= (car lst) "madame") "Mme " "M. " ) (caddr lst) " " (cadr lst) ) ) ) (princ) ) La commande pourrait, bien sûr être plus complexe (appeler d'autres sous-routines) mais on peut tester séparément la boite de dialogue en appelant juste : (helloDlg) dans la console ou à la ligne de commande. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 1 décembre 2016 Auteur Posté(e) le 1 décembre 2016 Salut Maître (gile), et merci pour ta réponse... Mais là... Wouaouw... Claire, net et précis... Comme toujours... Je m'en vais de ce pas appliquer tes conseils... Enfin, quand j'en aurais le temps... Ce qui implique la restructuration presque total de ma routine... Merci encore pour ton aide... 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)
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