Aller au contenu

Menu DCL


fauxsuisse

Messages recommandés

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:

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 lisp

correspondant.

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Lien vers le commentaire
Partager sur d’autres sites

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 description

et 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...

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é