Project - Step 2 : Graphical objects


To translate this course in your native langage:

  • In Chrome: right-click anywhere on the page and select “Translate to…”

  • Or use this language selector:

Les mots colorés en anglais représentent des mots-clés de la norme du langage C++. Ils sont conservés à l’identique lors de l’utilisation d’une traduction automatique avec Google Translate. Exemple : l’héritage (inheritance) est un principe fondamental de C++.


L’application va gérer différents objets graphiques :

../_images/shapes.png
  • Des segments

  • Des triangles

  • Des cercles

  • Des rectangles

  • Du texte

Conception

Avant de mettre en place les outils de tracé, nous allons commencer par créer ces différents objets au sein d’une scène de démonstration. Pour cela, vous pouvez utiliser la fonction initApp() du fichier students.cpp qui est appelée une seule fois au début du programme.

Voici quelques informations pour vous guider dans vos choix de conception :

  • Le logiciel permettra de créer et de supprimer des objets graphiques.

  • Il existe un ordre d’affichage :

    • Les objets sont affichés du fond vers l’avant.

    • Par convention, les derniers objets créés s’affichent au-dessus des précédents.

    • Ce système simule une sorte d’empilement.

  • Le segment n’utilise que la couleur de tracé.

Vous devez donc porter une attention particulière aux points suivants :

  • Comment stocker ces objets graphiques dans le modèle ?

  • Quelles fonctions polymorphes peuvent partager ces différents objets graphiques ?

  • Comment modéliser chaque objet ?

VIDEO (max 1 minute) : Explicitez vos choix de conception

Sélection

Le premier outil que nous allons utiliser est l’outil sélection. Nous allons tout d’abord programmer une version simplifiée :

  • 1 clic souris dans la fenêtre de travail permet de sélectionner 1 objet graphique dans la scène

  • 1 deuxième clic permet d’ajouter un objet à la sélection existante.

  • L’objet sélectionné doit apparaître différemment : couleur inversée, trait plus épais, encadré en rose, couleur spécifique…

  • 1 clic dans le vide doit tout désélectionner

Plusieurs problèmes apparaissent :

  • Si deux objets se trouvent sous la position du clic souris, que faire ? En l’absence de précision de la part du client, on choisira l’approche la plus simple

  • Comment modéliser la sélection des objets dans le modèle ?

  • Qui est propriétaire des données modélisant la sélection et qui en a la responsabilité : la logique générale ou l’outil de sélection ?

VIDEO (max 1 min) : Explicitez vos choix de conception

Actions

Créez un nouveau panneau contenant des boutons pour effectuer les actions suivantes sur le ou les objets sélectionnés :

../_images/order.png

Voici les outils :

  • Delete : supprime le ou les objets sélectionnés

  • Up/Down : si un seul objet est sélectionné, on l’avance ou on le recule dans l’ordre d’empilement

  • Top/Bottom : si un seul objet est sélectionné, on le place tout en haut ou tout en bas de l’empilement

  • Left/Right/Up/Down : déplace le ou les objets sélectionnés de 5 pixels dans la direction choisie

../_images/uptop.png

VIDEO (max 1 min) : Faites une démonstration des fonctionnalités

Comment créer des icônes

Des icônes sont disponibles dans le répertoire images pour personnaliser vos boutons.

Vous pouvez également utiliser ChatGPT pour générer d’autres icônes. Pour cela, il faut un compte mais l’abonnement payant n’est pas requis pour la création de quelques images. Voici un exemple de prompt :

ChatGPT : Crée une image représentant :

  • Une flèche vers le haut, bleue, centrée, avec un fond transparent, aux contours nets et légèrement lissés

  • Format : PNG

  • Dimensions exactes : 64 × 64 pixels

  • Fond transparent (canal alpha)

  • Design simple et minimaliste

Résultat obtenu avec ce prompt :

../_images/fleche_haut_64x64.png