void FillInValues(HexFileDecoder decoder, LoggerVariables pdfVariables, String serialNumber) { var tagCount = 0; var dateColumn = 20; var timeColumn = 30; var columnStart = 75; var currentColumn = columnStart; var maxColumnValue = 650; var columnIncrement = 28; var rowStart = 65; var row = rowStart; var rowIncrement = 12; var pageFont = new PDFFont(FontType.Helvetica, 10, PDF.Drawing.FontStyle.Regular); var font = new PDFFont(FontType.Helvetica, 6, PDF.Drawing.FontStyle.Regular); var boldFont = new PDFFont(FontType.Helvetica, 6, PDF.Drawing.FontStyle.Bold); var tempPen = new PDFPen(Color.Black, 1); var humPen = new PDFPen(Color.Gray, 1); PDFPen abovelimit = new PDFPen(Color.Coral, 1); PDFPen belowlimit = new PDFPen(Color.CornflowerBlue, 1); var time = new List <string>(); var date = new List <string>(); var valuePage = CreateNewPage(pageFont, serialNumber); for (int i = 0; i < pdfVariables.Time.Count; i++) { time.Add(decoder.UNIXtoUTCTime(Convert.ToInt32(pdfVariables.Time[i]))); date.Add(decoder.UNIXtoUTCDate(Convert.ToInt32(pdfVariables.Time[i]))); } for (int i = 0; i < pdfVariables.RecordedSamples; i++) { if ((i == 0) || (date[i - 1] != date[i])) { if (pdfVariables.IsChannelTwoEnabled && i != 0) { row = row + rowIncrement * 2; } else { row += rowIncrement; } valuePage.DrawString(date[i], boldFont, Color.Black, dateColumn, row); row += rowIncrement; valuePage.DrawString(time[i], boldFont, Color.Black, timeColumn, row); currentColumn = columnStart; } if ((currentColumn > maxColumnValue)) { currentColumn = columnStart; if (pdfVariables.IsChannelTwoEnabled) { row = row + rowIncrement * 2; } else { row += rowIncrement; } if (row > 950) { valuePage = CreateNewPage(pageFont, serialNumber); row = rowStart + rowIncrement; currentColumn = columnStart; } valuePage.DrawString(time[i], boldFont, Color.Black, timeColumn, row); } if (tagCount < pdfVariables.Tag.Count && pdfVariables.Tag[tagCount] == i) { valuePage.DrawString(pdfVariables.ChannelOne.Data[i].ToString("N2") + pdfVariables.ChannelOne.Unit, font, Color.ForestGreen, currentColumn, row); tagCount++; } else if (pdfVariables.ChannelOne.Data[i] > pdfVariables.ChannelOne.PresetUpperLimit) { valuePage.DrawString(pdfVariables.ChannelOne.Data[i].ToString("N2") + pdfVariables.ChannelOne.Unit, font, Color.Coral, currentColumn, row); } else if (pdfVariables.ChannelOne.Data[i] < pdfVariables.ChannelOne.PresetLowerLimit) { valuePage.DrawString(pdfVariables.ChannelOne.Data[i].ToString("N2") + pdfVariables.ChannelOne.Unit, font, Color.CornflowerBlue, currentColumn, row); } else { valuePage.DrawString(pdfVariables.ChannelOne.Data[i].ToString("N2") + pdfVariables.ChannelOne.Unit, font, Color.Black, currentColumn, row); } if (pdfVariables.IsChannelTwoEnabled) { if (pdfVariables.ChannelTwo.Data[i] > pdfVariables.ChannelTwo.PresetUpperLimit) { valuePage.DrawString(pdfVariables.ChannelTwo.Data[i].ToString("N2") + pdfVariables.ChannelTwo.Unit, font, Color.Coral, currentColumn, row + rowIncrement); } else if (pdfVariables.ChannelTwo.Data[i] < pdfVariables.ChannelTwo.PresetLowerLimit) { valuePage.DrawString(pdfVariables.ChannelTwo.Data[i].ToString("N2") + pdfVariables.ChannelTwo.Unit, font, Color.CornflowerBlue, currentColumn, row + rowIncrement); } else { valuePage.DrawString(pdfVariables.ChannelTwo.Data[i].ToString("N2") + pdfVariables.ChannelTwo.Unit, font, Color.Black, currentColumn, row + rowIncrement); } } currentColumn += columnIncrement; } }
void DrawGraph(HexFileDecoder decoder, LoggerVariables pdfVariables, PDFPage pdfPage, PDFPen pen, PDFFont font) { var withinlimitsPen = new PDFPen(Color.LightGray, 0.5, PenStyle.ShortDash); var abovelimitPen = new PDFPen(Color.LightSalmon, 1, PenStyle.ShortDash); var belowlimitPen = new PDFPen(Color.CornflowerBlue, 1, PenStyle.ShortDash); var presetUpperLimit = new double[8]; var presetLowerLimit = new double[8]; var presetUpperLimitY = new double[8]; var presetLowerLimitY = new double[8]; var maxRecorded = new double[8]; var minRecorded = new double[8]; var maxRecordedY = new double[8]; var minRecordedY = new double[8]; float dateX = 0; float maximumX = 55; float graphScaleX = 0; float graphScaleY = 0; float y0 = 0; float y1 = 0; int numberofDates = pdfVariables.RecordedSamples / 5; int dateGap; if (numberofDates == 0) { dateGap = 1; } else { dateGap = numberofDates; } //Assign statistics of the first channel presetUpperLimit[0] = pdfVariables.ChannelOne.PresetUpperLimit; presetLowerLimit[0] = pdfVariables.ChannelOne.PresetLowerLimit; maxRecorded[0] = pdfVariables.ChannelOne.Max; minRecorded[0] = pdfVariables.ChannelOne.Min; var yHighest = pdfVariables.ChannelOne.Max; var yLowest = pdfVariables.ChannelOne.Min; //Assign statistics of the second channel if (pdfVariables.IsChannelTwoEnabled) { presetUpperLimit[1] = pdfVariables.ChannelTwo.PresetUpperLimit; presetLowerLimit[1] = pdfVariables.ChannelTwo.PresetLowerLimit; maxRecorded[1] = pdfVariables.ChannelTwo.Max; minRecorded[1] = pdfVariables.ChannelTwo.Min; if (pdfVariables.ChannelTwo.Max > yHighest) { yHighest = pdfVariables.ChannelTwo.Max; } if (pdfVariables.ChannelTwo.Min < yLowest) { yLowest = pdfVariables.ChannelTwo.Min; } } //draw graph pdfPage.DrawLine(pen, PDFcoordinates.Xstart, PDFcoordinates.Ystart, PDFcoordinates.Xstart, PDFcoordinates.Yfinish); pdfPage.DrawLine(pen, PDFcoordinates.Xstart, PDFcoordinates.Yfinish, PDFcoordinates.Xfinish, PDFcoordinates.Yfinish); graphScaleY = (float)((PDFcoordinates.graphHeight - 20) / (yHighest - yLowest)); graphScaleX = (float)PDFcoordinates.graphWidth / pdfVariables.RecordedSamples; //graph dates while (numberofDates < pdfVariables.RecordedSamples) { dateX = (graphScaleX * numberofDates) + maximumX; pdfPage.DrawString(decoder.UNIXtoUTCDate(Convert.ToInt32(pdfVariables.Time[numberofDates])), font, Color.Black, dateX - 40, PDFcoordinates.Yfinish + 15); pdfPage.DrawString(decoder.UNIXtoUTCTime(Convert.ToInt32(pdfVariables.Time[numberofDates])), font, Color.Black, dateX - 45, PDFcoordinates.Yfinish + 28); numberofDates += dateGap; } //Y axis var range = yHighest - yLowest; var yIncrement = 0; if (range > 100) { yIncrement = 10; } else if (range > 50) { yIncrement = 5; } else if (range > 20) { yIncrement = 2; } else { yIncrement = 1; } int currentYLabel = (int)yLowest + yIncrement; while (currentYLabel < yHighest) { var graphCurrentValue = (float)(PDFcoordinates.graphHeight - ((currentYLabel - yLowest) * graphScaleY)) + PDFcoordinates.Ymax; pdfPage.DrawLine(withinlimitsPen, PDFcoordinates.Xstart, graphCurrentValue, PDFcoordinates.Xfinish, graphCurrentValue); pdfPage.DrawString(currentYLabel.ToString("N2"), font, Color.Black, PDFcoordinates.firstColumn, graphCurrentValue); currentYLabel = currentYLabel + yIncrement; } //If there is more than one channel available, current function is not optimal as if we were to have more than 2 channels we would be loooping to check .isChannelThreeEnabled? and so on if (pdfVariables.IsChannelTwoEnabled && pdfVariables.RecordedSamples > 0) { y1 = (float)(PDFcoordinates.graphHeight - (pdfVariables.ChannelTwo.Data[0] - yLowest) * graphScaleY) + PDFcoordinates.Ymax; presetUpperLimitY[1] = (float)(PDFcoordinates.graphHeight - ((presetUpperLimit[1] - yLowest) * graphScaleY)) + PDFcoordinates.Ymax; presetLowerLimitY[1] = (float)(PDFcoordinates.graphHeight - ((presetLowerLimit[1] - yLowest) * graphScaleY)) + PDFcoordinates.Ymax; maxRecordedY[1] = (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelTwo.Max - yLowest) * graphScaleY)) + PDFcoordinates.Ymax; minRecordedY[1] = (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelTwo.Min - yLowest) * graphScaleY)) + PDFcoordinates.Ymax; /*pdfPage.DrawLine(withinlimitsPen, PDFcoordinates.Xstart, maxRecordedY[1], PDFcoordinates.Xfinish, maxRecordedY[1]); * pdfPage.DrawLine(withinlimitsPen, PDFcoordinates.Xstart, minRecordedY[1], PDFcoordinates.Xfinish, minRecordedY[1]); * pdfPage.DrawString(minRecorded[1].ToString("N2"), font, Color.Black, PDFcoordinates.firstColumn, minRecordedY[1]); * pdfPage.DrawString(maxRecorded[1].ToString("N2"), font, Color.Black, PDFcoordinates.firstColumn, maxRecordedY[1]);*/ if ((presetUpperLimit[1] < maxRecorded[1]) && (presetUpperLimit[1] > minRecorded[1])) { pdfPage.DrawString(pdfVariables.ChannelTwo.Unit + LabelConstant.UpperLimit, font, Color.LightCoral, PDFcoordinates.thirdColumn, presetUpperLimitY[1] - 5); pdfPage.DrawString(presetUpperLimit[1].ToString("N2"), font, Color.Black, PDFcoordinates.firstColumn, presetUpperLimitY[1]); pdfPage.DrawLine(abovelimitPen, PDFcoordinates.Xstart, presetUpperLimitY[1], PDFcoordinates.Xfinish, presetUpperLimitY[1]); } if ((presetLowerLimit[1] > minRecorded[1]) && (presetLowerLimit[1] < maxRecorded[1])) { pdfPage.DrawString(pdfVariables.ChannelTwo.Unit + LabelConstant.LowerLimit, font, Color.CornflowerBlue, PDFcoordinates.thirdColumn, presetLowerLimitY[1] + 10); pdfPage.DrawString(presetLowerLimit[1].ToString("N2"), font, Color.Black, PDFcoordinates.firstColumn, presetLowerLimitY[1]); pdfPage.DrawLine(belowlimitPen, PDFcoordinates.Xstart, presetLowerLimitY[1], PDFcoordinates.Xfinish, presetLowerLimitY[1]); } } //Retrieve data from channel one if (pdfVariables.ChannelOne.Data != null) { y0 = (float)(PDFcoordinates.graphHeight - (pdfVariables.ChannelOne.Data[0] - yLowest) * graphScaleY) + PDFcoordinates.Ymax; presetUpperLimitY[0] = (float)(PDFcoordinates.graphHeight - ((presetUpperLimit[0] - yLowest) * graphScaleY)) + PDFcoordinates.Ymax; presetLowerLimitY[0] = (float)(PDFcoordinates.graphHeight - ((presetLowerLimit[0] - yLowest) * graphScaleY)) + PDFcoordinates.Ymax; maxRecordedY[0] = (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelOne.Max - yLowest) * graphScaleY)) + PDFcoordinates.Ymax; minRecordedY[0] = (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelOne.Min - yLowest) * graphScaleY)) + PDFcoordinates.Ymax; /*pdfPage.DrawLine(withinlimitsPen, PDFcoordinates.Xstart, maxRecordedY[0], PDFcoordinates.Xfinish, maxRecordedY[0]); * pdfPage.DrawLine(withinlimitsPen, PDFcoordinates.Xstart, minRecordedY[0], PDFcoordinates.Xfinish, minRecordedY[0]); * pdfPage.DrawString(minRecorded[0].ToString("N2"), font, Color.Black, PDFcoordinates.firstColumn, minRecordedY[0]); * pdfPage.DrawString(maxRecorded[0].ToString("N2"), font, Color.Black, PDFcoordinates.firstColumn, maxRecordedY[0]);*/ if ((presetUpperLimit[0] < maxRecorded[0]) && (presetUpperLimit[0] > minRecorded[0])) { pdfPage.DrawString(pdfVariables.ChannelOne.Unit + LabelConstant.UpperLimit, font, Color.Coral, PDFcoordinates.thirdColumn, presetUpperLimitY[0] - 5); pdfPage.DrawString(presetUpperLimit[0].ToString("N2"), font, Color.Black, PDFcoordinates.firstColumn, presetUpperLimitY[0]); pdfPage.DrawLine(abovelimitPen, PDFcoordinates.Xstart, presetUpperLimitY[0], PDFcoordinates.Xfinish, presetUpperLimitY[0]); } if ((presetLowerLimit[0] > minRecorded[0]) && (presetLowerLimit[0] < maxRecorded[0])) { pdfPage.DrawString(pdfVariables.ChannelOne.Unit + LabelConstant.LowerLimit, font, Color.CornflowerBlue, PDFcoordinates.thirdColumn, presetLowerLimitY[0] + 10); pdfPage.DrawString(presetLowerLimit[0].ToString("N2"), font, Color.Black, PDFcoordinates.firstColumn, presetLowerLimitY[0]); pdfPage.DrawLine(belowlimitPen, PDFcoordinates.Xstart, presetLowerLimitY[0], PDFcoordinates.Xfinish, presetLowerLimitY[0]); } } int i = 0; int tagCount = 0; var ch0Pen = new PDFPen(Color.DarkGreen, 1); var ch1Pen = new PDFPen(Color.MediumPurple, 1); var abovelimitDataPen = new PDFPen(Color.LightSalmon, 1); var belowlimitDataPen = new PDFPen(Color.CornflowerBlue, 1); while (i < pdfVariables.RecordedSamples) { if (tagCount < pdfVariables.Tag.Count && pdfVariables.Tag[tagCount] == i) { var tagPen = new PDFPen(Color.ForestGreen, 1); pdfPage.DrawLine(tagPen, maximumX - 2, y0 - 2, maximumX + 2, y0 + 2); pdfPage.DrawLine(tagPen, maximumX - 2, y0 + 2, maximumX + 2, y0 - 2); tagCount++; } if (pdfVariables.ChannelOne.Data != null) { if (pdfVariables.ChannelOne.Data[i] > pdfVariables.ChannelOne.PresetUpperLimit) { pdfPage.DrawLine(abovelimitDataPen, maximumX, y0, maximumX + graphScaleX, (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelOne.Data[i] - (yLowest)) * graphScaleY)) + PDFcoordinates.Ymax); } else if (pdfVariables.ChannelOne.Data[i] < pdfVariables.ChannelOne.PresetLowerLimit) { pdfPage.DrawLine(belowlimitDataPen, maximumX, y0, maximumX + graphScaleX, (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelOne.Data[i] - (yLowest)) * graphScaleY)) + PDFcoordinates.Ymax); } else { pdfPage.DrawLine(ch0Pen, maximumX, y0, maximumX + graphScaleX, (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelOne.Data[i] - (yLowest)) * graphScaleY)) + PDFcoordinates.Ymax); } y0 = (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelOne.Data[i] - (yLowest)) * graphScaleY)) + PDFcoordinates.Ymax; } if (pdfVariables.IsChannelTwoEnabled) { if (pdfVariables.ChannelTwo.Data[i] > pdfVariables.ChannelTwo.PresetUpperLimit) { pdfPage.DrawLine(abovelimitDataPen, maximumX, y1, maximumX + graphScaleX, (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelTwo.Data[i] - (yLowest)) * graphScaleY)) + PDFcoordinates.Ymax); } else if (pdfVariables.ChannelTwo.Data[i] < pdfVariables.ChannelTwo.PresetLowerLimit) { pdfPage.DrawLine(belowlimitDataPen, maximumX, y1, maximumX + graphScaleX, (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelTwo.Data[i] - (yLowest)) * graphScaleY)) + PDFcoordinates.Ymax); } else { pdfPage.DrawLine(ch1Pen, maximumX, y1, maximumX + graphScaleX, (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelTwo.Data[i] - (yLowest)) * graphScaleY)) + PDFcoordinates.Ymax); } y1 = (float)(PDFcoordinates.graphHeight - ((pdfVariables.ChannelTwo.Data[i] - (yLowest)) * graphScaleY)) + PDFcoordinates.Ymax; } maximumX += graphScaleX; i++; } }