75
Grafico.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using PonteDados;
namespace GraficoXY
{
/// <summary>
/// Classe estática para gerar o gráfico
/// </summary>
public static class Grafico
{
/// <summary>
/// Plota o gráfico em um PictureBox
/// </summary>
/// <param name="Figura">Controle PictureBox onde será desenhado o gráfico</param>
/// <param name="grafico">Objeto Grafico do controle PictureBox</param>
/// <param name="Dados">Dados a serem plotados</param>
public static void Plotar(this System.Windows.Forms.PictureBox Figura,
System.Drawing.Graphics grafico, strDados[] Dados)
{
Graphics Grafico = Graphics.FromImage(Figura.Image);
int Altura = Figura.Size.Height;
int Largura = Figura.Size.Width;
int OffSet = 5;
Grafico.Clear(Color.White);
int minimoX = (int)Dados.Min(n => n.Duracao.TotalMilliseconds);
int maximoX = (int)Dados.Max(n => n.Duracao.TotalMilliseconds);
DesenharGraduacaoEixoY(Grafico, Altura, OffSet, 2, new SolidBrush(Color.Red),
70, 470);
DesenharGraduacaoEixoY(Grafico, Altura, OffSet, 35, new SolidBrush(Color.Blue),
13, 32);
DesenharGraduacaoEixoY(Grafico, Altura, OffSet, 60, new
SolidBrush(Color.Green), 2, 22);
DesenharPontos(Grafico, Largura, Altura, 80, OffSet, Color.Red, 70, 470,
minimoX, maximoX, Dados.Select(n => new PointF() { X = n.Duracao.TotalMilliseconds, Y =
n.Corrente }).ToArray());
DesenharPontos(Grafico, Largura, Altura, 80, OffSet, Color.Blue, 13, 32,
minimoX, maximoX, Dados.Select(n => new PointF() { X = n.Duracao.TotalMilliseconds, Y =
n.Tensao }).ToArray());
DesenharPontos(Grafico, Largura, Altura, 80, OffSet, Color.Green, 2, 22,
minimoX, maximoX, Dados.Select(n => new PointF() { X = n.Duracao.TotalMilliseconds, Y =
n.Arame }).ToArray());
DesenharGraduacaoEixoX(Grafico, Largura, Altura, 80, Color.Yellow, minimoX,
maximoX, Dados.Select(n => n.Duracao.TotalMilliseconds).ToArray());
grafico = Grafico;
}
/// <summary>
/// Desenha o eixo X de coordenadas
/// </summary>
/// <param name="Grafico">Objeto gráfico onde será desenhado o eixo</param>
/// <param name="Largura">Largura do gráfico</param>
/// <param name="Altura">Altura do gráfico</param>
/// <param name="OffSetX">Distância horizantal das bordas</param>
/// <param name="Cor">Cor do eixo</param>
/// <param name="minimoX">Valor mínimo da escala X</param>
/// <param name="maximoX">Valor máximo da escala Y</param>
/// <param name="Duracao">Largura de tempo da janela</param>
private static void DesenharGraduacaoEixoX(Graphics Grafico, int Largura, int
Altura, int OffSetX, Color Cor, int minimoX, int maximoX, double[] Duracao)
{
double[] PontosFiltrados = Duracao.Where(m => m >= minimoX && m <=
maximoX).Select(n => n - n % 1000).Distinct().ToArray();
int[] PontoCorrigidos = new int[PontosFiltrados.Length];
for (int i = 0; i < PontosFiltrados.Length; i++)
{
if (PontosFiltrados[i] < 0)