Effacer une forme d'un Graphics [Résolu]

Signaler
Messages postés
26
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
6 janvier 2008
-
Messages postés
26
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
6 janvier 2008
-
Coucou,



J'ai un petit problème avec un graphics.



Lorsque je click dessus, je dessine une ellipse (jusque là ça va...).

Ensuite, je refais la même opération mais je veux effacer celle qui y était déjà (là ça va plus...).



Comment fait-on pour effacer qq chose sur un Graphics?



contexte :

Mon image est une carte et je dois enregistrer les coordonnées du point que je viens de clicker.

Pour faire plus joli, je dessine un rond autour.

Je ne peux pas laisser un rond autour de tous les endroits où j'ai
clicker, sinon je ne sais plus de quel rond j'enregistre les
coordonées...



Alors je voudrais effacer le rond dès que je reclick sur ma carte mais je vois pas comment faire.

Avez vous une idée de la démarche à effectué?



Merci d'avance.


Have a nice day



Bibax en fait un max

6 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Une piste, si tu utilises des Invalidate pour redessiner ta carte,
utilise la surcharge Invalidate(region), pour redessiner que la partie
souhaitée.

Tu y gagneras peut-etre en performances.



Et ca te permettrait de redessiner seulement les parties ou tu dois enlever / dessiner les ronds
En fait, ca rejoint ce que disait lutinore


Mx
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
pourquoi prends tu le problèmes à l'envers ?

tu as bien une image de base pour ta carte ?
et bien reparts à partir de celle-ci et dessine les points qui doivents être affiché... ca sera plus simple.

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
Messages postés
26
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
6 janvier 2008

Coucou,



Le problème c'est que mes cartes sont assez grandes et si je les recharge à chaque fois que je click dessus, ça va ramer.



Sinon, je pourrai peut-être utiliser les streams mais je sais pas comment ça marche.

Si je met ma carte en mémoire, ça ira plus vite que si je la recharge du fichier à chaque fois.


C'est bizarre qu'on ne puisse rien effacer de ce qu'on vient de créer (même sous Qt, ça se fait...).


Have a nice day



Bibax en fait un max
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
Effacer ca n'existe pas, mais tu peux redessiner par dessus.. Pour des raisons de performance on redessine uniquement la partie modifiee.. En clair ca veut dire que tu recolles un bout de ton image originale a l'endroit exacte ou elle a ete modifiee..
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
Je ne sais pas si celà fonctionne mais mets ta carte sur le
backgroundimage de ton picturebox et dessine ton graphics sur l'image
de ton picturebox. Tu peux alors effacer sans pb ton image tout en
gardant ta carte.

Théo
Messages postés
26
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
6 janvier 2008

Coucou,



Merci pour votre aide car je n'aurai jamais trouvé Invalidate (ou j'aurais vraiment été chercher loin).

Je poste la petite manip que j'ai effectué pour effacer mes objets pour ceux que ça intéresse.

Si qq'un trouve un moyen pour l'améliorer, je suis preneur mais il tourne déjà bien comme ça.



public struct ClickTmp

{

private int posx;

private int posy;



public ClickTmp(int x, int y)

{

posx = x;

posy = y;

}



public int GetX()

{

return posx;

}



public int GetY()

{

return posy;

}

}



class displayRaster

{...

//permit to remove old forms

private ClickTmp myTmpClick; //record the old click

private bool hasBeenClicked =
false; //in order to know if there is a click before on image


protected void picChart_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

if(hasBeenClicked)

{


Rectangle rc = new
Rectangle(myTmpClick.GetX(),myTmpClick.GetY()-10,15,15);

picChart.Invalidate(rc);

myTmpClick = new ClickTmp(e.X,e.Y);

}

else

{

hasBeenClicked = true;

myTmpClick = new ClickTmp(e.X,e.Y);

}

g = picChart.CreateGraphics();

pos[0] = e.X; //pos[0]=X=width

pos[1] = e.Y; //pos[1]=Y=height



//draw an ellipse around the point switch position

g.DrawEllipse(Pens.Red, e.X, e.Y, 10, -10);



//simulate the
click on base in order to initialize numPixX and numPixY on rasterChart


base.OnClick(e); //simulate a click on userControl displayChart on
base

}



public void RecordPoint(int num, int[] pos)

{

hasBeenClicked = false;

SolidBrush drawBrush = new SolidBrush(Color.Red);

Font drawFont = new Font("Arial", 16);


g.DrawString(num.ToString(), drawFont, drawBrush, pos[0]+15, pos[1]+15);

}

}


Have a nice day



Bibax en fait un max