private static void DrawXScale(Graphics g2, Pen blackPen, Rectangle spectrumRec, RectangleTransform rt) { int fontHeight = (int)g2.MeasureString("M", bigFont).Height; g2.DrawLine(blackPen, new Point(spectrumRec.Left, spectrumRec.Bottom), new Point(spectrumRec.Right, spectrumRec.Bottom)); for (int i = 0; i < 10000; i += 50) { int curMz = rt.GetTransformX(i); if (curMz > spectrumRec.Right) { break; } if (i % 100 == 0) { g2.DrawLine(blackPen, curMz, spectrumRec.Bottom, curMz, spectrumRec.Bottom + 10); string number = i.ToString(); float strWidth = GetStringWidth(g2, bigFont, number); g2.DrawString(number, bigFont, Brushes.Black, new PointF(curMz - strWidth / 2, spectrumRec.Bottom + 10)); } else { g2.DrawLine(blackPen, curMz, spectrumRec.Bottom, curMz, spectrumRec.Bottom + 5); } } float mzWidth = GetStringWidth(g2, bigFont, "M/Z"); g2.DrawString("M/Z", bigFont, Brushes.Black, new PointF((spectrumRec.Right + spectrumRec.Left - mzWidth) / 2, spectrumRec.Bottom + 10 + fontHeight)); }
public void Test() { Rectangle rec = new Rectangle(100, 10000, 500, 400); RectangleTransform rt = new RectangleTransform(rec, 2000, 2000); Assert.AreEqual(100 + 250, rt.GetTransformX(1000)); Assert.AreEqual(10000 + 400 - 100, rt.GetTransformY(500)); }
public void Draw(Graphics g2, Rectangle rec, IIdentifiedPeptideResult sr) { g2.CompositingQuality = CompositingQuality.HighQuality; g2.SmoothingMode = SmoothingMode.AntiAlias; g2.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; Rectangle newRec = new Rectangle(rec.Left + 60, rec.Top, rec.Width - 80, rec.Height - 50 - bigFont.Height); Pen blackPen = new Pen(Color.Black, 1); Rectangle spectrumRec = GetSpectrumRectangle(g2, sr.ExperimentalPeakList, newRec); var maxMz = (from peak in sr.ExperimentalPeakList orderby peak.Mz descending select peak.Mz).FirstOrDefault(); double maxMzWidth = ((int)maxMz / 100 + 1) * 100.0; int yFontShift = (int)(g2.MeasureString("M", bigFont).Height / 2); RectangleTransform rt = new RectangleTransform(spectrumRec, maxMzWidth, sr.ExperimentalPeakList.FindMaxIntensityPeak().Intensity); DrawXScale(g2, blackPen, spectrumRec, rt); DrawYScale(g2, blackPen, spectrumRec); foreach (MatchedPeak peak in sr.ExperimentalPeakList) { Brush brush; Pen pen; if (peak.Matched) { Color color = IonColorMap[peak.PeakType]; brush = new SolidBrush(color); pen = new Pen(brush); } else { brush = Brushes.Black; pen = blackPen; } int x = rt.GetTransformX(peak.Mz); int y = rt.GetTransformY(peak.Intensity); g2.DrawLine(pen, new Point(x, spectrumRec.Bottom), new Point(x, y)); if (peak.Matched) { DrawVerticalIonName(g2, brush, x - yFontShift, y, peak.Information); } } }