Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1400 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Définition d'une action de dessin

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Définition d'une action de dessin

n°1856021
alexandre_​j
Posté le 27-02-2009 à 14:59:28  profilanswer
 

Bonjour,
 
Je réalise un éditeur d'icone qui dessine sur une image pixel par pixel (c++ / Qt4). Mon problème se situe sur le système de undo/redo. L'application doit-être capable d'annuler ou refaire une action/commande. Aujourd'hui je le gère comme ça et ce n'est pas top niveau performance :
 
Je choisis l'outil "pen"
Je clic sur le dessin (reste appuyé) // Création d'un objet command (command est un objet qui contient une liste de points). J'ajoute le point dans la liste.
Je me déplace sur la zone de dessin. // J'enregistre chaque point dans la liste de mon objet command
Je relache le bouton de la souris. // J'arrête l'ajout de points et je stock mon objet command dans une liste
 
Sur l'évenement paintEvent de mon composant graphique, je parcours toutes mes commandes
Et pour chaque commande, je dessine tous ses points.
 
... ça fonctionne mais c'est lourd :(
 
L'avantage, c'est que si je retire une action/commande de la liste, l'action n'est pas dessiné.
 
Mon problème est de définir une action/commande. Actuellement c'est une liste de point mais je cherche une meilleur solution. J'avais commencé à gérer une action/commande sur une QImage différente (QImage est objet représentant une image dans Qt), mais ça me semblait un peu démesurer comme solution.
 
Merci de m'avoir lu !

mood
Publicité
Posté le 27-02-2009 à 14:59:28  profilanswer
 

n°1856079
Joel F
Real men use unique_ptr
Posté le 27-02-2009 à 17:04:19  profilanswer
 

c'ets lourd = c'ets deja lent ou ca te plait pas a priori ?

n°1856119
0x90
Posté le 27-02-2009 à 19:32:23  profilanswer
 

Joel F a écrit :

c'ets lourd = c'ets deja lent ou ca te plait pas a priori ?


Si j'ai bien compris ce qu'il fait, à chaque redraw il redéroule tout l'historique des modifications, ça peut vite devenir lent.

 

Pour le pb, bah il me semble que le plus simple c'est déja d'avoir une structure de donnée type tableau de pixels (un QImage en fait), que tu puisse lire directement pendant ton paintEvent. Ensuite dans tes commande, au lieu de faire une liste de "nouvelle couleur du point", tu fait une liste de paires "ancienne couleur du point + nouvelle couleur du point", comme ça quand tu veut faire un undo, tu utilise la valeur "ancienne couleur" pour modifier ton tableau de pixels, quand tu veut faire un redo tu utilise la nouvelle couleur.

Message cité 1 fois
Message édité par 0x90 le 27-02-2009 à 19:32:56

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1856231
alexandre_​j
Posté le 28-02-2009 à 11:55:35  profilanswer
 

Effectivement, je reparcours tout l'historique pour dessiner sur mon image. Pour répondre à Joel F, c'est lourd et ça me plait pas trop :(
Je pensais limiter le nombre d'actions à un nombre définit en paramètre et écrire les n-monombred'actionmax dernières actions définitivement dans l'image, mais si une autre solution existe, je la prend.

 

Si j'ai bien compris t'as solution 0x90,
Ma commande serait constitué d'un point (coord sur l'image), de la couleur de ce point et de l'ancienne couleur. Et lors du undo, je redessine la dernière commande mais avec l'ancienne couleur. Ai-je bien compris ? L'idée me plait assez :)

 

Merci


Message édité par alexandre_j le 28-02-2009 à 11:56:49
n°1856236
masklinn
í dag viðrar vel til loftárása
Posté le 28-02-2009 à 12:47:36  profilanswer
 

0x90 a écrit :

Ensuite dans tes commande, au lieu de faire une liste de "nouvelle couleur du point", tu fait une liste de paires "ancienne couleur du point + nouvelle couleur du point", comme ça quand tu veut faire un undo, tu utilise la valeur "ancienne couleur" pour modifier ton tableau de pixels, quand tu veut faire un redo tu utilise la nouvelle couleur.


Le même système qu'un repo svn ou mercurial quoi :D


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Définition d'une action de dessin

 

Sujets relatifs
[JAVA] [STRUTS] Code dans l'action à executer apres validation du form[VBA] : action sur la touche ENTER
modifier position texte apres action sur boutonmettre action sur bouton flash
[C] Interrompre une fonction qui attend une action utilisateurPause dans programme pour faire une action
scrollbar - action a repeter tant que le bouton est enfoncéLancer deux liens en une seule action...
problème de style de dessin d'un rectanglebesoin d'aide par rapport a un action script
Plus de sujets relatifs à : Définition d'une action de dessin


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR