Project - Step 2 : Graphical objects ************************************ .. include:: ../BoutonGoogleTrad.rst L'application va gérer différents objets graphiques : .. image:: 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 :cpp:`initApp()` du fichier :cpp:`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 ? .. panels:: :column: col-lg-10 p-2 **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 ? .. panels:: :column: col-lg-10 p-2 **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 : .. image:: 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 .. image:: uptop.png :align: center .. panels:: :column: col-lg-10 p-2 **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 :cpp:`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 : .. panels:: :column: col-lg-10 p-2 **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 : .. image:: fleche_haut_64x64.png :align: center