Desenhar vários desenhos à mão livre de polilinha ou curva - Adicionando recurso de desfazer
Estou tentando criar um aplicativo de desenho simples com recursos de desfazer e refazer. Suponho que você possa adicionar o que está desenhando em uma lista e convocá-la a desenhar tudo. Em seguida, desfazer deve remover o último item adicionado e redesenhar tudo novamente. O problema é: como adiciono o que desenhei a uma lista e uso essa lista para desfazer?
Estou usando o método de redesenho de bitmap. É assim que eu desenho:
Point start, end;
bool painting;
private List<PointF> myPoints = new List<PointF>();
private void pnlMain_MouseDown(object sender, MouseEventArgs e)
{
start = e.Location;
painting = true;
}
private void pnlMain_MouseUp(object sender, MouseEventArgs e)
{
painting = false;
}
private void pnlMain_MouseMove(object sender, MouseEventArgs e)
{
if (painting == true)
{
end = e.Location;
g.DrawLine(p, start, end);
myPoints.Add(e.Location);
pnlMain.Refresh();
start = end;
}
}
private void btnUndo_Click(object sender, EventArgs e)
{
g.Clear(cldFill.Color);
if (myPoints.Count > 2)
{
myPoints.RemoveAt(myPoints.Count - 1);
g.DrawCurve(p, myPoints.ToArray());
}
pnlMain.Refresh();
//This works but you have to spam it to get rid of
//a line and does some weird connections.
}