fauxsuisse Posté(e) le 10 mai 2010 Posté(e) le 10 mai 2010 Bonjour tout le monde, Je suis à la recherche de la création d'un petit menu à bouton qui permettrait de lancer les lisp.Je pense que ce menu doit être fait en DCL mais je ne sais pas comment le créer et comment faire pour qu'il charge et démarre un lisp, en faite je voudrais faire un menu qui regroupe plusieurs lisp. :casstet:
bseb67 Posté(e) le 10 mai 2010 Posté(e) le 10 mai 2010 Salut fauxsuisse, Ce ne serai pas plus logique de faire une barre d'outils qui appelle tes lisps ? Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
fauxsuisse Posté(e) le 10 mai 2010 Auteur Posté(e) le 10 mai 2010 Oui effectivement c'est ce que je faisais jusqu'à maintenant mais avec les icône dans les barre d'outils il est toujours un peu difficile de comprendre la fonction qui se cache derrière, enfin moi je comprend bien mais mes collègues ont de la peine, c'est pour ça que pour certain lisp spéciaux je voulais avoir une fenêtre qui s'ouvre et que la fonction est écrite en texte, je sais qu'on peut aussi avoir le texte dans la barre de menu mais là aussi ils ont de la peine à aller chercher les informations, je cherche beaucoup de solution sur Cadxp et j'en fais profiter à mes collègues dès que je trouve des lisp qui me sont très utilie :P
bseb67 Posté(e) le 10 mai 2010 Posté(e) le 10 mai 2010 ok tu as le même souci que moi :) :je sais ce que chaque icône représente, mais les autres pas vraiment... J'ai une pseudo-solution, inspire toi de ceci fait par (Gile) : http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=20244 En utilisant optionbox, il te faudra mettre du texte plus long pour donc détailler la fonction lisp,il faudra l'appeler dans un lisp et faire un cond sur le résultat pour lancer le lispcorrespondant. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
fauxsuisse Posté(e) le 10 mai 2010 Auteur Posté(e) le 10 mai 2010 Super merci c'est exactement ce que je cherchais :P
fauxsuisse Posté(e) le 10 mai 2010 Auteur Posté(e) le 10 mai 2010 ps. j'ai juste pas bien compris comment faire que le le choix d'un bouton puisse me lancer un lisp, j'aimerai bien comprendre les lisp mais j'ai pas trouvé de littérature en français.
bseb67 Posté(e) le 10 mai 2010 Posté(e) le 10 mai 2010 Un exemple tout simple ;; OptionBox (gile) ;; Boite de dialogue permettant de choisir une ou plusieurs options ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil por aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; mult : T (choix multiple) ou nil (choix unique) ;; ;; Retour : la clé de l'option (mult = nil) ou la liste des clés des options (mult = T) ;; ;; Exemples d'utilisations ;; (OptionBox "Type de fichier" nil '(("lin" . "Type de ligne") ("pat" . "Motif de hachure")) nil) ;; (OptionBox "Types d'entités" "Choisir les types d'entité" '(("LINE" . "Lignes") ("CIRCLE" . "Cercles")) T) (defun OptionBox (title msg keylab mult / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "OptionBox:dialog{label=\"" title "\";") file ) (write-line (strcat (if mult ":boxed_column{" ":boxed_radio_column{key=\"choice\";" ) ) file ) (if (and msg (/= msg "")) (write-line (strcat "label=\"" msg "\";") file) ) (mapcar (function (lambda (p) (write-line (strcat (if mult ":toggle{key=\"" ":radio_button{key=\"" ) (car p) "\";label=\"" (cdr p) "\";}" ) file ) ) ) keylab ) (if mult (write-line "spacer;:button{label=\"Tout sélectionner\"; key=\"all\";fixed_width=true;alignment=centered;}" file ) ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "OptionBox" dcl_id)) (exit) ) (if mult (progn (action_tile "all" "(foreach k (mapcar 'car keylab) (set_tile k\"1\"))" ) (action_tile "none" "(foreach k (mapcar 'car keylab) (set_tile k\"0\"))" ) (action_tile "accept" "(foreach k (mapcar 'car keylab) (if (= \"1\" (get_tile k)) (setq choice (cons k choice)))) (setq choice (reverse choice)) (done_dialog)" ) ) (progn (set_tile "choice" (caar keylab)) (action_tile "accept" "(setq choice (get_tile \"choice\")) (done_dialog)" ) ) ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) (defun lanceur_de_lisps( / choix) (setq VAR_LST_LISPS '(("lisp1" . "Mon lisp 1") ("lisp2" . "Mon lisp 2") ("lisp3" . "Mon lisp 3")) ) ; setq (cond ((= (setq choix (OptionBox "Mes lisps" "Choix du lisp à lancer" VAR_LST_LISPS nil)) nil) ; annuler ) ((= choix "lisp1") (load mon_lisp1) ) ((= choix "lisp2") (load mon_lisp2) ) ((= choix "lisp3") (load mon_lisp3) ) ) ; cond ) ; lanceur_de_lisps Il te suffit de remplacer "Mon lisp X" par le texte de descriptionet pour le load d'appeler le lisp voulu.Load charge uniquement le lisp, après si tu veux appeler une fonction ou une commande,il te suffit de mettre à la ligne sous le load :(ma_fonction) ou (c:ma_fonction) et voilà Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 10 mai 2010 Posté(e) le 10 mai 2010 Salut, Une nouvelle boite pour lancer directement des commandes définies en LISP en cliquant sur un bouton (un clic de moins que OptionBox). Exemple d'utilisation : Définition d'un commande "INC" qui ouvre une boite pour lancer les commandes INCTXT, INCATT, INCSEL, INCSUF, INCADD (CF Increment.lsp sur cette page) (defun c:INC () (cmdbox "Incrémentation" '(("INCTXT" . "Insérer un texte contenant une valeur incrémentée") ("INCATT" . "Insérer un bloc contenant un attribut incrémenté") ("INCSEL" . "Incrémenter une valeur dans les textes sélectionnés") ("INCSUF" . "Incrémenter la partie finale des textes sélectionnés") ("INCADD" . "Ajouter une valeur incrémentée aux textes sélectionnés") ) ) (princ) ) Pour faire sa propre commande, remplacer dans le code ci dessus :- INC par le nom de la commande- "Incrémentation" par le titre de la boite de dialogue- chaque paire de la liste par le nom de la commande à lancer et une description :("NOM_COMMANDE" . "description de la commande") Le code;; CmdBox ;; Boite de dialogue pour lancer directement des commandes LISP ;; ;; Arguments ;; title : le titre de la boite de dialogue ;; funlst : une liste de paires pointées du type ("nom_commande" . "description") (defun cmdbox (title funlst / tmp file dcl_id fun) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") wid (+ 6 (apply 'max (mapcar '(lambda (x) (strlen (cdr x))) funlst))) ) (write-line (strcat "CmdBox:dialog{label=\"" title "\";") file ) (foreach p funlst (write-line (strcat ":row{:button{label=" (vl-prin1-to-string (car p)) ";key=" (vl-prin1-to-string (car p)) ";fixed_width=true;width=12;}" ":text{label=" (vl-prin1-to-string (cdr p)) ";width=" (itoa wid) ";}}" ) file ) ) (write-line "spacer;cancel_button;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "CmdBox" dcl_id)) (exit) ) (foreach k (mapcar 'car funlst) (action_tile k "(setq fun $key)(done_dialog)") ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) (and fun (apply (read (strcat "c:" fun)) nil)) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 10 mai 2010 Posté(e) le 10 mai 2010 Le résultat en image avec l'exemple ci-dessus (je n'arrive pas à mettre cette image dans le message). http://img13.imageshack.us/img13/1028/incf.png Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fauxsuisse Posté(e) le 10 mai 2010 Auteur Posté(e) le 10 mai 2010 Merci les gars c'est vraiment parfait. :P
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