Personnaliser des boites de dialogue (DLC) avec des images pour des macros LISP.

Il est souvent utile voir nécessaire d'utiliser des boites de dialogue lorsque l'on souhaite une interaction de saisie de données pour un programme LISP.

 

Dans ce qui suit nous allons voir les points suivants :

  1. Les fichiers DCL et LISP de base pour démarrer.
  2. Créer une boite de dialogue DCL avec un bouton qui lance la boite de dialogue de choix de couleur d'AutoCAD.
  3. Insérer 2 types d'image dans la boite de dialogue.
  4. Mettre à jour les images suite à une action du bouton.
  5. Créer une Image bouton.

1.  Définition des fichiers de bases.

Pour commencer, nous devons créer 2 fichiers :

  • Un fichier DCL qui contient la définition de la forme de la boite de dialogue.
  • Un fichier LISP qui va appeler la boite de dialogue et gérer son comportement.

Pour créer les fichiers, il suffit de créer 2 fichiers texte et de modifier l'extension .txt en .dcl pour le premier et en .lsp pour le second.

001_Files_B

Remarque : Ces fichiers doivent être placés dans un répertoire reconnu par AutoCAD (pour éviter des messages lors de leurs chargements).

Voici les codes de base pour afficher une boite de dialogue :

01_DialBoxDCL  02_ProgLISP

Le résultat affiche une boite de dialogue avec simplement un bouton OK qui ferme la boite de dialogue et un bouton Annuler qui ferme la boite de dialogue en retournant le message « ...DialBox Cancelled. » dans la ligne de commande d'AutoCAD.

002_MsgBox

2.  Ajout d'un bouton dans la boite de dialogue qui permet de lancer la boite de dialogue de choix de couleur d'AutoCAD.

Les modifications de programme sont surlignées en couleur dans ce qui suit.

Dans le fichier DCL, on définit un bouton dont la clef est « mybutton », cette clef permet de gérer le comportement du bouton dans le fichier LISP.

Dans le fichier LISP, on associe à la clef « mybutton » l'action de lancement de la boite de dialogue de choix de couleur d'AutoCAD et on affecte la valeur de la couleur choisie à la variable Wcolor.

03_DialBoxDCL  04_ProgLISP

Cette fois la boite de dialogue contient un bouton qui lance la boite de choix de couleur AutoCAD.

003_MsgBox          004_ColorBox

Complément sur les fonctions :

  • (action_tile "key" "action")  lance une « action » si le bouton « key » est cliqué.

 

3.  Insérer 2 types d'images dans la boite de dialogue.

Dans le fichier DCL, nous allons ajouter 2 zones d'image que nous utiliserons de 2 façons différentes :

  • En bleu, on définit une zone d'image avec la clef d'appel « mycolor » avec un remplissage de couleur noir (0).
  • En jaune, on définit une zone d'image avec la clef d'appel « mypicture » avec un remplissage de couleur rouge (1).
  • En vert, on définit une ligne d'encadrement pour les 3 éléments (le bouton et les 2 images).
  • En orange, on définit un formatage.

Dans un premier temps on ne modifie pas le fichier LISP.

05_DialBoxDCL

Affichage de la boite de dialogue sans dimensionnement (à gauche) et avec (à droite).

005_MsgBox          006_MsgBox

On va maintenant modifier le fichier LISP pour remplir différemment chacune des zones d'image.

La première sera remplie avec des couleurs, la seconde contiendra un fichier image :

  • En bleu, on remplit la première zone d'image avec des couleurs.
  • En jaune, on insert un fichier image dans la seconde zone d'image.

06_ProgLISP

Attention : Le fichier image doit être un fichier SLD. On obtient un fichier SLD avec la commande créer un fichier cliché d'AutoCAD (MCLICHE). Il s'agit en fait d'une capture de la fenêtre d'affichage d'AutoCAD.

007_Files_B

On obtient le résultat suivant :

008_MsgBox

Complément sur les fonctions :

  • (start_image "key")  active la modification de la zone image « key ».
  • (dimx_tile "key")  calcule la dimension en X de la zone image « key ».
  • (fill_image Xstart Ystart Xend Yend Color)  remplit une partie de la zone image avec une couleur choisie.
  • (slide_image Xstart Ystart Xend Yend "image_file")  remplit une partie de la zone image avec un fichier cliché (image.sld)
  • (end_image)  termine la modification de la zone image.

 

4.  Mettre à jour les images suite à une action déclenchée par le bouton.

Le comportement souhaité pour les zones d'image est le suivant :

  • La zone 1 doit affichée la couleur choisie par l'utilisateur dans la boite de dialogue de choix de couleur d'AutoCAD.
  • La zone 2 doit remplacer l'image interrogation.sld sur fond rouge par l'image OK.sld sur fond vert.

009_Comp

On ne modifie pas le fichier DCL.

Dans le fichier LISP, on crée 2 fonctions qui permettront chacune de modifier l'affichage des zones image :

  • En bleu, la fonction permet de remplir une zone image avec une couleur.
  • En jaune, la fonction permet de remplir une zone image avec une couleur et d'afficher un fichier image.
  • En vert, l'appel des fonctions suite à l'action sur le bouton.

07_ProgLISP

 

5.  Créer une boite de dialogue avec une image bouton.

L'objectif est de lancer une boite de dialogue qui contient une image bouton et un texte qui demande de cliquer sur l’image.

Quand l'utilisateur clique sur l'image, la boite de dialogue de choix de couleur d'AutoCAD se lance.

Une fois que l'utilisateur à choisit sa couleur, l'image se remplie avec la couleur choisie et le texte est modifié.

Dans le fichier DCL :

  • En rouge, on définit une zone de texte.
  • En vert, on définit une image bouton.

08_DialBoxDCL2

Dans le fichier LISP :

  • En bleu, on définit une fonction de mise à jours de l'image bouton.
  • En orange, on initialise les variables Wcolor, Wkey,Wkey2 et Wtext2.
  • En jaune, on définit les actions associées à l'image bouton.

09_ProgLISP2

Le comportement de la boite de dialogue est le suivant :

010_Comp