DenisHen Posté(e) le 14 septembre 2016 Posté(e) le 14 septembre 2016 Bonjour à la communauté. Voilà, j'ai fais un petit LISP qui créer des variables :;;;Enregistrement des détails du dossier dans le fichier courant (defun c:DHDoss (/ DH_Departement DH_Commune) (princ "\nDéveloppé par Denis H. (V3.0)") ;;; Saisie de la commune*************************************************************************** (setq DH_Departement (vlax-ldata-get "DenisH" "Departement")) (if DH_Departement ; si donnee est déjà défini (progn (if (setq DH_Departement (getstring T (strcat "\nNom du département (" DH_Departement ") - Nouveau nom : " ) ;_ Fin:strcat ) ;_ Fin:getstring ) ;_ Fin:setq ; Si donnee est re-défini (if (/= DH_Departement "") (vlax-ldata-put "DenisH" "Departement" DH_Departement) ) ;_ Fin:if ) ;_ Fin:if ) ;_ Fin:progn ; si Ech n'est pas encore défini (progn (setq DH_Departement (getstring T "\nNom du département : ")) (vlax-ldata-put "DenisH" "Departement" DH_Departement) ) ;_ Fin:progn ) ;_ Fin:if ;;; Saisie de la commune*************************************************************************** (setq DH_Commune (vlax-ldata-get "DenisH" "Commune")) (if DH_Commune ; si donnee est déjà défini (progn (if (setq DH_Commune (getstring T (strcat "\nNom de la commune (" DH_Commune ") - Nouveau nom : " ) ;_ Fin:strcat ) ;_ Fin:getstring ) ;_ Fin:setq ; Si donnee est re-défini (if (/= DH_Commune "") (vlax-ldata-put "DenisH" "Commune" DH_Commune) ) ;_ Fin:if ) ;_ Fin:if ) ;_ Fin:progn ; si Ech n'est pas encore défini (progn (setq DH_Commune (getstring T "\nNom de la commune : ")) (vlax-ldata-put "DenisH" "Commune" DH_Commune) ) ;_ Fin:progn ) ;_ Fin:if ;;;Affichage des données saisies*************************************************************************** (setq DH_Departement (vlax-ldata-get "DenisH" "Departement")) (setq DH_Commune (vlax-ldata-get "DenisH" "Commune")) (alert (strcat "\nDépartement : \t" DH_Departement "\nCommune : \t" DH_Commune ) ;_ Fin de strcat ) ;_ Fin de alert (c:CtrlSvGrd) (princ) ) ;_ Fin de defun Mon problème est que lorsque j'insert un champs avec le nom du champs : VariableLisp et la variable dh_departement, j'ai le droit à "----" et nom au contenu de ma variable... L'expression est "%<\AcVar.17.0 Lisp.dh_departement>%" Je ne sais pas pourquoi, les deux derniers (setq ne fonctionnent pas, car si je le fais en ligne de commande, c'est OK... Si quelqu'un a une astuce, un conseil... Je suis preneur... 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)
Olivier Eckmann Posté(e) le 14 septembre 2016 Posté(e) le 14 septembre 2016 Bonjour, Ta variable DH_Departement est déclarée comme variable locale de ton programme. Donc dès que le programme a fini son exécution, elle est remise à nil. Donc tu récupères nil en dehors du programme.Si tu veux pouvoir récupérer sa valeur, elle doit être globale donc non déclarée dans le (defunPenses à nommer tes variables globales avec une syntaxe pour les différentier des autres valeurs, ça rend le code plus lisible.Olivier 1
(gile) Posté(e) le 14 septembre 2016 Posté(e) le 14 septembre 2016 Penses à nommer tes variables globales avec une syntaxe pour les différentier des autres valeurs, ça rend le code plus lisible.Olivier Une convention* consiste à préfixer et suffixer le nom de variable avec des astérisques (*).Autodesk respecte cette convention avec certains nom de fonctions "globales" : *error*, *push-error-using-command*, *pop-error-mode*, *push-error-using-stack*. * il s'agit bien d'une convention, aucune obligation. J'ajouterais qu'il faut choisir un nom de commande qui a peu de chance d'être utilisé par d'autres noms de variables globales** (ent, lst, etc.) même si on sait bien qu'en informatique, une chose qui a peu de chance de survenir finit toujours par arriver... ** beaucoup de variables globales sont, tout simplement, des variables qui n'ont pas été déclaré localement par simple oubli ou négligence... 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 15 septembre 2016 Auteur Posté(e) le 15 septembre 2016 Salut. Et merci à vous deux, ça fonctionne nickel... Juste une petite question. Est-ce que ces variables restent dans le DWG ? Si mes clients n'ont pas ce LISP, les champs garderont-ils leur valeur ? 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)
DenisHen Posté(e) le 15 septembre 2016 Auteur Posté(e) le 15 septembre 2016 Re. Apparament pas, j'ai fais quelques testes sur différents DWG sur d'autres postes et les variables LISP ne sont pas enregistrées dans les DWG... Au démarrage d'AutoCAD, j'ai un LISP contenant : (setq DH_Departement (vlax-ldata-get "DenisH" "Departement")) (setq DH_Commune (vlax-ldata-get "DenisH" "Commune")) Ce qui me permet de placer dans les champs ces deux variables. Mais ce LISP, ou même ces deux lignes, doivent être lancées au chargement d'AuroCAD ou du DWG puisque les valeurs de ces variables sont bien dans le DWG avec (vlax-ldata... Les postes de mes clients n'ont pas ce LISP... Donc, ça ne fonctionnera chez moi, mais pas chez le client... Et je n'ai rien trouvé pour placer dans le champs une phrase LISP qui serait du type :(vlax-ldata-get "DenisH" "Departement") ;;; Ou alors (vlax-ldata-get "DenisH" "Commune") Peut-être dans une expression DIESEL... Mais je ne connais pas le DIESEL... 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 15 septembre 2016 Posté(e) le 15 septembre 2016 Salut Tu peux aussi créer des champs dans propriétés du fichier (Fichier --> Propriétés du dessin --> Personnaliser) Par exemple(setq sum (vla-get-summaryinfo (vla-get-activedocument (vlax-get-acad-object)))) (vla-addcustominfo sum "Denis_H" "I am the BEST") Ensuite, dans les noms de champs, tu vas retrouver Denis_H et donc la valeur qui lui est associé :D De plus, si tu vas dans l'explorateur de Windows, tu choisis ton fichier --> clic droit --> Propriétés --> Personnalisées et que retrouve-t-on ? @+ 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 15 septembre 2016 Auteur Posté(e) le 15 septembre 2016 Salut Patrik_35. Mille mercis pour cette astuce... Je n'avais jamais pensé à passer par ce genre de variable... Ca fonctionne nickel ! ! Encore un grand merci (ça fait 1001 pour aujourd'hui... ;) ) 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)
DenisHen Posté(e) le 15 septembre 2016 Auteur Posté(e) le 15 septembre 2016 Re. Par contre, lorsque je change ces variables, AutoCAD me répond :; erreur: Erreur Automation Clé dupliquée En fait, le addcustominfo ajoute une variable, mais ne la change pas... Comment changer le contenu de ces variables lorsqu'elles existent déjà ? 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 15 septembre 2016 Posté(e) le 15 septembre 2016 Re. Par contre, lorsque je change ces variables, AutoCAD me répond : En fait, le addcustominfo ajoute une variable, mais ne la change pas... Comment changer le contenu de ces variables lorsqu'elles existent déjà ?Par exemple(vla-setcustombykey sum "Denis_H" "Ben pourquoi") Pour récupérer la valeur(vla-getcustombykey sum "Denis_H" 'valeur) Si jamais la clé existe(and (vl-catch-all-error-p (vl-catch-all-apply 'vla-addcustominfo (list sum "Denis_H" "Je veux une nouvelle clé"))) (vla-setcustombykey sum "Denis_H" "Ben non, elle existe") ) Plus d'info avec(vlax-dump-object sum T) @+ 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 15 septembre 2016 Auteur Posté(e) le 15 septembre 2016 Que dire... Codes, explications... Tout est excellent... Un grand merci à toi Patrick_35... 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)
DenisHen Posté(e) le 15 septembre 2016 Auteur Posté(e) le 15 septembre 2016 Re, Finalement, j'ai maintenant une autre approche... J'utilise la fenêtre des propriétés du dessin plutôt que de multiplier les lignes de saisie... Voici donc mon code ainsi qu'un cartouche "exemple" : Dossier.zip Ce code créé les variables s'il elles n'existent pas, puis, les affiches... Avec cette technique, les champs sont mis à jour à chaque changement... Je l'utilise quand j'ai des dizaines de cartouches dans des dizaines de présentations... C'est beaucoup plus rapide et sûr... Encore un grand merci à Patrick_35 (ça fait 1002...) 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)
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