public void DrawRegions(Graphics gfx) { if (_regions == null) { return; } using (StringFormat textFormat = new StringFormat()) { textFormat.Alignment = StringAlignment.Center; textFormat.LineAlignment = StringAlignment.Center; using (Font font = new Font(_fontFamily, _labelFontSize)) { using (Brush textBrush = new SolidBrush(_fontColor)) { using (Pen solidPen = new Pen(_fontColor)) { using (Pen lightPen = new Pen(Color.FromArgb(128, _fontColor))) { float labelWidth = _barWidth + _spaceBtwBars; for (int i = 0; i < _regions.Length; ++i) { BarRegion reg = _regions[i]; RectangleF rc = new RectangleF(_xOrigin + (reg.m_RangeFrom * labelWidth), _yOrigin, (reg.m_RangeTo - reg.m_RangeFrom + 1) * labelWidth, _graphHeight); if (rc.X + rc.Width > _xOrigin + _graphWidth) { rc.Width = _xOrigin + _graphWidth - rc.X; } using (SolidBrush brsh = new SolidBrush(Color.FromArgb(48, GetColor(i)))) gfx.FillRectangle(brsh, rc); rc.Offset((rc.Width - 200.0f) * 0.5f, -16.0f); rc.Width = 200.0f; rc.Height = 20.0f; gfx.DrawString(reg.m_Name, font, textBrush, rc, textFormat); } } } } } } }
public static BarGraph OverTime(SnapshotHistory history, string reportName, string valueName, int step, int max, int ival) { BarGraph barGraph = new BarGraph(valueName + " over time", "graphs_" + valueName.ToLower() + "_ot", 10, "Time", valueName, BarGraphRenderMode.Lines); TimeSpan ts = TimeSpan.FromHours((max * step) - 0.5); DateTime mostRecent = history.Snapshots[history.Snapshots.Count - 1].TimeStamp; DateTime minTime = mostRecent - ts; barGraph.FontSize = 6; barGraph.Interval = ival; ArrayList regions = new ArrayList(); for (int i = 0; i < history.Snapshots.Count; ++i) { Snapshot ss = history.Snapshots[i]; DateTime timeStamp = ss.TimeStamp; if (timeStamp < minTime) { continue; } if ((i % step) != 0) { continue; } int val = LookupReportValue(ss, reportName, valueName); if (val == -1) { continue; } int realHours = timeStamp.TimeOfDay.Hours; int hours; if (realHours == 0) { hours = 12; } else if (realHours > 12) { hours = realHours - 12; } else { hours = realHours; } string dayName = timeStamp.DayOfWeek.ToString(); if (regions.Count == 0) { regions.Add(new BarRegion(barGraph.Items.Count, barGraph.Items.Count, dayName)); } else { BarRegion region = (BarRegion)regions[regions.Count - 1]; if (region.m_Name == dayName) { region.m_RangeTo = barGraph.Items.Count; } else { regions.Add(new BarRegion(barGraph.Items.Count, barGraph.Items.Count, dayName)); } } barGraph.Items.Add(hours + (realHours >= 12 ? " PM" : " AM"), val); } barGraph.Regions = (BarRegion[])regions.ToArray(typeof(BarRegion)); return(barGraph); }
public static BarGraph Growth(SnapshotHistory history, string reportName, string valueName) { BarGraph barGraph = new BarGraph("Growth of " + valueName + " over time", "graphs_" + valueName.ToLower() + "_growth", 10, "Time", valueName, BarGraphRenderMode.Lines); barGraph.FontSize = 6; barGraph.Interval = 7; DateTime startPeriod = history.Snapshots[0].TimeStamp.Date + TimeSpan.FromDays(1.0); DateTime endPeriod = history.Snapshots[history.Snapshots.Count - 1].TimeStamp.Date; ArrayList regions = new ArrayList(); DateTime curDate = DateTime.MinValue; int curPeak = -1; int curLow = 1000; int curTotl = 0; int curCont = 0; int curValu = 0; for (int i = 0; i < history.Snapshots.Count; ++i) { Snapshot ss = history.Snapshots[i]; DateTime timeStamp = ss.TimeStamp; if (timeStamp < startPeriod || timeStamp >= endPeriod) { continue; } int val = LookupReportValue(ss, reportName, valueName); if (val == -1) { continue; } DateTime thisDate = timeStamp.Date; if (curDate == DateTime.MinValue) { curDate = thisDate; } curCont++; curTotl += val; curValu = curTotl / curCont; if (curDate != thisDate && curValu >= 0) { string mnthName = thisDate.ToString("MMMM"); if (regions.Count == 0) { regions.Add(new BarRegion(barGraph.Items.Count, barGraph.Items.Count, mnthName)); } else { BarRegion region = (BarRegion)regions[regions.Count - 1]; if (region.m_Name == mnthName) { region.m_RangeTo = barGraph.Items.Count; } else { regions.Add(new BarRegion(barGraph.Items.Count, barGraph.Items.Count, mnthName)); } } barGraph.Items.Add(thisDate.Day.ToString(), curValu); curPeak = val; curLow = val; } else { if (val > curPeak) { curPeak = val; } if (val > 0 && val < curLow) { curLow = val; } } curDate = thisDate; } barGraph.Regions = (BarRegion[])regions.ToArray(typeof(BarRegion)); return(barGraph); }