Fazendo Painel de Leds em menos usando System.Drawing(parte 2)
C#
21/06/2011 por
Jar Jar Binks
PRÓXIMO : http://pogmasters.net/pogs/fazendo-painel-de-leds-em-menos-usando-systemdrawingparte-3.aspx
Se você viu a parte 1 deste artigo (Aqui: http://pogmasters.net/pogs/fazendo-painel-de-leds-em-menos-usando-systemdrawingparte-1.aspx)
Você pode fazer esta parte 2. Esta parte consiste em criar uma classe que se chama Panel, que representa a matriz de leds que teremos.
Esta classe tem alguns pontos importantes: ChangeState(), que recebe a localização do Led na Matriz, e o ChangeStateByPosition, que recebe uma coordenada cartesiana para atualizar o Led na Matriz.
Outra coisa importante é o método DrawPanel, que fará o desenho do painel com a matriz de leds acesos ou apagados.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace LedPanel
{
public class Panel
{
public List<List<Led>> panel = new List<List<Led>>();
private const int size = 16;
private Graphics g;
private Bitmap b;
private Led lastChangedLed;
public Led LastChangedLed
{
get
{
return lastChangedLed;
}
}
public Panel(int hor, int vert)
{
for (int i = 0; i < hor; i++)
{
List<Led> vertPanel = new List<Led>();
for (int j = 0; j < vert; j++)
{
Led led = new Led();
vertPanel.Add(led);
}
panel.Add(vertPanel);
}
b = new Bitmap((hor * size ) +10 , (vert * size) + 10);
g = Graphics.FromImage(b);
}
public void ChangeState(int hLed, int vLed)
{
if((hLed >= 0 && hLed <= panel.Count -1) && (vLed >= 0 && vLed <= panel[hLed].Count -1))
{
Led led = panel[hLed][vLed];
led.ChangeState();
lastChangedLed = led;
}
}
public void ChangeStateByPosition(int x, int y)
{
int hLed = x / size;
int vLed = y / size;
ChangeState(hLed, vLed);
}
public Led getLedByPosition(int x, int y)
{
int hLed = x / size;
int vLed = y / size;
return getLed(hLed, vLed);
}
public Led getLed(int hLed, int vLed)
{
if ((hLed >= 0 && hLed <= panel.Count - 1) && (vLed >= 0 && vLed <= panel[hLed].Count - 1))
{
return panel[hLed][vLed];
}
return null;
}
public void ScrollPanelLeft()
{
List<Led> vert = panel[0];
panel.Remove(vert);
panel.Add(vert);
}
public Image DrawPanel()
{
g.Clear(Color.Black);
for (int i = 0; i < panel.Count ; i++)
{
List<Led> vertPanel = panel[i];
for (int j = 0; j < vertPanel.Count; j++)
{
Led led = vertPanel[j];
if (led.On)
{
g.DrawEllipse(new Pen(Color.Black), i * size, j * size, size, size);
g.FillEllipse(new SolidBrush(Color.Red), i * size, j * size, size, size);
}
else
{
g.DrawEllipse(new Pen(Color.Black), i * size, j * size, size, size);
g.FillEllipse(new SolidBrush(Color.Maroon), i * size, j * size, size, size);
}
}
}
return b;
}
}
}
PRÓXIMO : http://pogmasters.net/pogs/fazendo-painel-de-leds-em-menos-usando-systemdrawingparte-3.aspx
Comentários sobre o artigo
27/06/2011
por
mariajulia domingues de araujo
cassiana um beijo daju/
Poste um comentário >>
|