Aller au contenu

Boites de dialogue (DCL temporaire)


(gile)

Messages recommandés

Une petite nouvelle : GetLayouts pour choisir une ou plusieurs presentations dans la liste de toutes les présentation du dessin.

 

;; GETLAYOUTS (gile) 03/12/07
;; Retourne la liste des présentations choisies dans la boite de dialogue
;;
;; arguments
;; titre : titre de la boite de dialogue ou nil, défauts = Choisir la (ou les) présentation(s)
;; mult : T ou nil (pour choix multiple ou unique)

(defun GetLayouts (titre mult / lay tmp file ret)
 (setq	lay  (vl-sort (layoutlist)
	      (function
		(lambda	(x1 x2)
		  (			     (TabOrder x2)
		  )
		)
	      )
     )
tmp  (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
 )
 (write-line
   (strcat
     "GetLayouts:dialog{label="
     (if titre
(vl-prin1-to-string titre)
(if mult
  "\"Choisir les présentations\""
  "\"Choisir une présentation\""
)
     )
     ";:list_box{key=\"lst\";multiple_select="
     (if mult
"true;}:row{:retirement_button{label=\"Toutes\";key=\"all\";}
ok_button;cancel_button;}}"
"false;}ok_cancel;}"
     )
   )
   file
 )
 (close file)
 (setq dcl_id (load_dialog tmp))
 (if (not (new_dialog "GetLayouts" dcl_id))
   (exit)
 )
 (start_list "lst")
 (mapcar 'add_list lay)
 (end_list)
 (action_tile "all" "(setq ret (reverse lay)) (done_dialog)")
 (action_tile
   "accept"
   "(or (= (get_tile \"lst\") \"\")
(foreach n (str2lst (get_tile \"lst\") \" \")
(setq ret (cons (nth (atoi n) lay) ret))))
(done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete tmp)
 (reverse ret)
)

;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")

(defun str2lst (str sep / pos)
 (if (setq pos (vl-string-search sep str))
   (cons (substr str 1 pos)
  (str2lst (substr str (+ (strlen sep) pos 1)) sep)
   )
   (list str)
 )
)

;; TabOrder
;; Retourne le numéro d'ordre de la présentation
;;
;; Argument : le nom de la présentation (chaîne)
;;
;; Retour : le numéro d'ordre de la présentation (entier)

(defun TabOrder (name / dict lay)
 (setq dict (dictsearch (namedobjdict) "ACAD_LAYOUT"))
 (if (setq lay (cdr (assoc 350 (member (cons 3 name) dict))))
   (cdr (assoc 71 (entget lay)))
 )
) 

[Edité le 2/12/2007 par (gile)][Edité le 3/12/2007 par (gile)]

 

[Edité le 29/12/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Lis les commentaires au début du LISP, il faut spécifier 2 arguments.

 

Essaye :

 

(getlayouts "Test lili" t)

pour "Test lili" comme titre et un choix multiple (touche CTRL enfoncée)

 

ou

(getlayouts nil nil)

(pour le titre par défaut et choix unique.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Lis les commentaires au début du LISP, il faut spécifier 2 arguments

 

C'est ce que je fais systématiquement, mais tu sais que mon niveau est encore bien trop bas pour comprendre toutes les subtilités des écritures,....

 

Trois questions au passage,

 

Que veut dire " nil nil" dans (getlayouts nil nil) ? (boite de dialogue AutoCAD par défaut ?)

Que veut dire le " t" dans "(getlayouts "Test lili" t)" ? (Par déduction, titre perso ?)

 

Quand cette boite de dialogue apparaitra t-elle ?

 

Merci d'avance.

 

[Edité le 2/12/2007 par lili2006]

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Commentaires en début de LISP (précédés par un point virgule) :

 

;; GETLAYOUTS (gile) 02/12/07

;; Retourne la liste des présentations choisies dans la boite de dialogue

;;

;; arguments

;; titre : titre de la boite de dialogue ou nil, défauts = Choisir la (ou les) présentation(s)

;; mult : T ou nil (pour choix multiple ou unique)

 

Début de la routine :

 

(defun GetLayouts (defun GetLayouts (titre mult / lay tmp file ret)

...)

 

Comme les fonctions LISP prédéfinies, les routines peuvent requérir des arguments :

dans l'expression LISP (+ 2 3) les nombres 2 et 3 sont les arguments de la fonction +

 

La fonction defun admet plusieurs arguments, les deux premiers étant obligatoires : le nom de la fonction et une liste (même vide) contenant les symboles des arguments requis par la fonction et des variables locales. Les arguments suivants sont des expressions LISP dont le nombre peut varier.

Dans la routine GetLayouts, par exemple, GetLayouts est le symbole utilisé comme nom de la fonction. Le deuxième argument : (titre mult / lay tmp file ret) est la liste contenant les des symboles séparés par une barre oblique : titre et mult placés avant la barre oblique sont les arguments requis par la fonction, lay tmp file ret sont les variable locales utilisées dans la fonction.

 

À la différence des fonctions LISP prédéfinies, pour les fonctions définies avec defun les arguments ne peuvent être optionnels.

 

La routine GetLayers requiert 2 arguments (obligatoirement spécifiés) titre et mult :

 

- titre : comme dans les autres boites dialogue de ce sujet, j'ai voulu laisser la possibilité à l'utilisateur de spécifier le titre de la boite de dialogue, dans ce cas il faut spécifier l'argument avec une chaîne (ex : (getlayouts "Test lili" nil) sinon, on met nil comme argument pour avoir les titres par défaut : "Choisir les présentations" ou "Choisir une présentation" en fonction de l'autre argument : mult.

 

- mult : si cet argument n'est pas nil, il sera possible de sélectionner plusieurs présentations dans la liste de la boite de dialogue, sinon un seul choix sera possible (ex : (getlayouts nil nil) = choix unique, (getlayouts nil T) = choix multiples)

 

La boite de dialogue apparaît lors de l'interprétation de l'expression (getlayouts ...) pendant le déroulement du LISP dans lequel elle est utilisée. Un exemple ici.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

Merci encore (gile) pour le développement de tes réponses.

Petit à petit, on y vois plus clair,...

 

Ok pour le test donné en exemple. En fait on choisi les présentations (toutes, par exemple) et aprés, on fait quoi ?? !

 

Merci d'avance.

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

En fait on choisi les présentations (toutes, par exemple) et aprés, on fait quoi ?? !

 

Ces routines s'adressent plutôt à ceux qui écrivent des LISP. Elles peuvent être utilisées dans ces LISP pour récupérer de entrées de la part de l'utilisateur qui choisisra dans une boite de dialogue au lieu de le faire à la ligne de commande.

 

Dans ce LISP, par exemple, l'utilisateur spécifie les présentations auxquelles il veut donner la même configuration de traçage que dans la présentation courante.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Ok ! , mais concrétement, comment s"en sert t-on ? Je vais dans un onglet de présentation, et là,...

 

Spécifiez le coin de la fenêtre ou

[Actif/Inactif/Zonegraph/Tracombr/Verrou/Objet/Polygonal/Restaurer/Calque/2/3/4]

:

Spécifiez le coin opposé: Régénération du modèle.

Commande: prop_layout

Commande:

 

Je perd ensuite la main,...??! (Probablement une mauvaise utilisation,...).

 

Bonsoir.

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Ok ! , mais concrétement, comment s"en sert t-on ? Je vais dans un onglet de présentation, et là,...

 

Là, tu configures le traçage de la présentation dans laquelle tu es, puis tu lances Prop_Layout et tu choisis dans la boite de dialogue les présentations auxquelles tu veux appliquer la même configuration de traçage.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...
  • 4 mois après...

Une nouvelle, pour choisir une option parmi plusieurs.

 

Les arguments sont :

- Le titre de la boite de dialogue

- une liste d'association du type ((key_1 . label_1) (key_2 . label_2) ...)

 

Exemple d'utilisation:

 

(ChooseBox "Type de fichier"
   '(("dwg" . "Dessin AutoCAD (.dwg)")
     ("dwt" . "Gabarit AutoCAD (.dwt)")
     ("dxf" . "DXF AutoCAD (.dxf)")
    )
) 

 

http://img387.imageshack.us/img387/541/chooserf6.png

 

En fonction du choix, la clé ("dwg" "dwt" ou "dxf") est retournée.

 

Cette routine a été ajoutée au fichier Dialog.lsp en téléchargement sur cette page

 

Le code :

 

;; ChooseBox (gile)
;; Boite de dialogue permettant de choisir une option
;;
;; Arguments
;; title : le titre de la boite de dialogue (chaîne)
;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...)
;;
;; Retour : la clé de l'option choisie (chaîne)
;;
;; Exemple d'utilisation
;; (choosebox "Type de fichier" '(("lin" . "Type de ligne") ("pat" . "Motif de hachure")))

(defun ChooseBox (title keylab / tmp file dcl_id choice)
 (setq	tmp  (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
 )
 (write-line
   (strcat "ChooseBox:dialog{label=\""
    title
    "\";:radio_column{key=\"choice\";"
   )
   file
 )
 (mapcar
   (function
     (lambda (p)
(write-line
  (strcat ":radio_button{key=\""
	  (car p)
	  "\";label=\""
	  (cdr p)
	  "\";}"
  )
  file
)
     )
   )
   keylab
 )
 (write-line "}spacer;ok_cancel;}" file)
 (close file)
 (setq dcl_id (load_dialog tmp))
 (if (not (new_dialog "ChooseBox" dcl_id))
   (exit)
 )
 (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
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

J'en ai donné un dans le message ci-dessus, pour choisir un type de fichier qui retourne l'extension.

 

Un autre pour choisir un système d'unités angulaire qui retourne, sous forme de chaine, le même nombre que la variable AUNITS.

 

La boite de dialogue:

http://img141.imageshack.us/img141/3135/unitstg0.png

 

Le code :

(ChooseBox "Unités angulaires"
   '(("0" . "Degrés décimaux")
     ("1" . "Degrés/minutes/secondes")
     ("2" . "Grades")
     ("3" . "Radians")
     ("4" . "Unité géodésiques")
    )
) 

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é