protected override bool MsGraphControlOnMouseUpEvent(ZedGraphControl sender, MouseEventArgs e) { if (_peakResize != null) { var point = new PointF(e.X - _peakResize.MousePt.X + _peakResize.CoordPt.X, e.Y); double x, y; MsGraphControl.GraphPane.ReverseTransform(point, out x, out y); var peaks = PeptideFileAnalysis.CalculatedPeaks; double newStart, newEnd; switch (_peakResize.LineSegment) { case LineSegment.Start: newStart = x; newEnd = _peakResize.Peak.EndTime; break; case LineSegment.End: newStart = _peakResize.Peak.StartTime; newEnd = x; break; default: newStart = x; newEnd = x - _peakResize.Peak.StartTime + _peakResize.Peak.EndTime; break; } var newPeaks = peaks.ChangeTime(_peakResize.TracerFormula, Math.Min(newStart, newEnd), Math.Max(newStart, newEnd)); _peakResize = null; PeptideFileAnalysis.SetCalculatedPeaks(newPeaks); PeptideAnalysis.EnsurePeaksCalculated(); } return(base.MsGraphControlOnMouseUpEvent(sender, e)); }
protected override bool MsGraphControlOnMouseDownEvent(ZedGraphControl sender, MouseEventArgs e) { _peakResize = null; if (base.MsGraphControlOnMouseDownEvent(sender, e)) { return(true); } if ((_peakResize = PeakResizeFromPoint(e.Location)) != null) { sender.Cursor = _peakResize.GetCursor(); return(true); } return(false); }
private PeakResize PeakResizeFromPoint(PointF pointF) { if (_peakLines == null) { return(null); } var peaks = PeptideFileAnalysis.CalculatedPeaks; if (peaks == null) { return(null); } foreach (var entry in _peakLines) { var peak = peaks.GetPeak(entry.Key); if (peak == null) { continue; } var peakDisplay = entry.Value; var peakResize = new PeakResize { TracerFormula = entry.Key, Peak = peak.Value, MousePt = pointF, PeakDisplay = peakDisplay, }; if (peakDisplay.HorizontalLine != null) { PointF startPt = MsGraphControl.GraphPane.GeneralTransform(peakDisplay.HorizontalLine.Points[0], CoordType.AxisXYScale); PointF endPt = MsGraphControl.GraphPane.GeneralTransform(peakDisplay.HorizontalLine.Points[1], CoordType.AxisXYScale); if (Math.Abs(pointF.Y - startPt.Y) <= 2) { if (Math.Abs(pointF.X - startPt.X) <= 2) { peakResize.LineSegment = LineSegment.Start; peakResize.CoordPt = startPt; return(peakResize); } if (Math.Abs(pointF.X - endPt.X) <= 2) { peakResize.LineSegment = LineSegment.End; peakResize.CoordPt = endPt; return(peakResize); } if (pointF.X > startPt.X && pointF.X < endPt.X) { peakResize.LineSegment = LineSegment.Middle; peakResize.CoordPt = startPt; return(peakResize); } } } foreach (var lineItemSeg in new[] { new KeyValuePair <LineItem, LineSegment>(peakDisplay.StartVerticalLine, LineSegment.Start), new KeyValuePair <LineItem, LineSegment>(peakDisplay.EndVerticalLine, LineSegment.End) }) { if (lineItemSeg.Key == null) { continue; } PointF firstPt = MsGraphControl.GraphPane.GeneralTransform(lineItemSeg.Key.Points[0], CoordType.AxisXYScale); PointF lastPt = MsGraphControl.GraphPane.GeneralTransform(lineItemSeg.Key.Points[1], CoordType.AxisXYScale); if (Math.Abs(pointF.X - firstPt.X) <= 1 && pointF.Y >= Math.Min(firstPt.Y, lastPt.Y) && pointF.Y <= Math.Max(firstPt.Y, lastPt.Y)) { peakResize.LineSegment = lineItemSeg.Value; peakResize.CoordPt = new PointF(firstPt.X, pointF.Y); return(peakResize); } } } return(null); }
protected override bool MsGraphControlOnMouseMoveEvent(ZedGraphControl sender, MouseEventArgs e) { if (_peakResize != null) { var peakDisplay = _peakResize.PeakDisplay; PointPair[] points = new[] { new PointPair(peakDisplay.Start, peakDisplay.Height), new PointPair(peakDisplay.End, peakDisplay.Height), }; var screenPt = new PointF(e.Location.X - _peakResize.MousePt.X + _peakResize.CoordPt.X, _peakResize.CoordPt.Y); double x, y; MsGraphControl.GraphPane.ReverseTransform(screenPt, out x, out y); switch (_peakResize.LineSegment) { case LineSegment.Start: points[0] = new PointPair(x, points[0].Y); break; case LineSegment.End: points[1] = new PointPair(x, points[0].Y); break; case LineSegment.Middle: points = new[] { new PointPair(x, points[0].Y), new PointPair(x - points[0].X + points[1].X, points[1].Y) }; break; } if (peakDisplay.HorizontalLine != null) { peakDisplay.HorizontalLine.RemovePoint(1); peakDisplay.HorizontalLine.RemovePoint(0); peakDisplay.HorizontalLine.AddPoint(points[0]); peakDisplay.HorizontalLine.AddPoint(points[1]); } foreach (var lineItemPt in new[] { new KeyValuePair <LineItem, PointPair>(peakDisplay.StartVerticalLine, points[0]), new KeyValuePair <LineItem, PointPair>(peakDisplay.EndVerticalLine, points[1]) }) { if (lineItemPt.Key == null) { continue; } lineItemPt.Key.RemovePoint(1); lineItemPt.Key.RemovePoint(0); lineItemPt.Key.AddPoint(new PointPair(lineItemPt.Value.X, peakDisplay.Height)); lineItemPt.Key.AddPoint(new PointPair(lineItemPt.Value.X, 0)); } MsGraphControl.Invalidate(); sender.Cursor = _peakResize.GetCursor(); return(true); } if (base.MsGraphControlOnMouseMoveEvent(sender, e)) { return(true); } PeakResize peakResize = PeakResizeFromPoint(e.Location); if (peakResize != null) { sender.Cursor = peakResize.GetCursor(); return(true); } return(false); }
private PeakResize PeakResizeFromPoint(PointF pointF) { if (_peakLines == null) { return null; } var peaks = PeptideFileAnalysis.CalculatedPeaks; if (peaks == null) { return null; } foreach (var entry in _peakLines) { var peak = peaks.GetPeak(entry.Key); if (peak == null) { continue; } var peakDisplay = entry.Value; var peakResize = new PeakResize { TracerFormula = entry.Key, Peak = peak.Value, MousePt = pointF, PeakDisplay = peakDisplay, }; if (peakDisplay.HorizontalLine != null) { PointF startPt = MsGraphControl.GraphPane.GeneralTransform(peakDisplay.HorizontalLine.Points[0], CoordType.AxisXYScale); PointF endPt = MsGraphControl.GraphPane.GeneralTransform(peakDisplay.HorizontalLine.Points[1], CoordType.AxisXYScale); if (Math.Abs(pointF.Y - startPt.Y) <= 2) { if (Math.Abs(pointF.X - startPt.X) <= 2) { peakResize.LineSegment = LineSegment.Start; peakResize.CoordPt = startPt; return peakResize; } if (Math.Abs(pointF.X - endPt.X) <= 2) { peakResize.LineSegment = LineSegment.End; peakResize.CoordPt = endPt; return peakResize; } if (pointF.X > startPt.X && pointF.X < endPt.X) { peakResize.LineSegment = LineSegment.Middle; peakResize.CoordPt = startPt; return peakResize; } } } foreach (var lineItemSeg in new[] { new KeyValuePair<LineItem, LineSegment>(peakDisplay.StartVerticalLine, LineSegment.Start), new KeyValuePair<LineItem, LineSegment>(peakDisplay.EndVerticalLine, LineSegment.End)}) { if (lineItemSeg.Key == null) { continue; } PointF firstPt = MsGraphControl.GraphPane.GeneralTransform(lineItemSeg.Key.Points[0], CoordType.AxisXYScale); PointF lastPt = MsGraphControl.GraphPane.GeneralTransform(lineItemSeg.Key.Points[1], CoordType.AxisXYScale); if (Math.Abs(pointF.X - firstPt.X) <= 1 && pointF.Y >= Math.Min(firstPt.Y, lastPt.Y) && pointF.Y <= Math.Max(firstPt.Y, lastPt.Y)) { peakResize.LineSegment = lineItemSeg.Value; peakResize.CoordPt = new PointF(firstPt.X, pointF.Y); return peakResize; } } } return null; }
protected override bool MsGraphControlOnMouseUpEvent(ZedGraphControl sender, MouseEventArgs e) { if (_peakResize != null) { var point = new PointF(e.X - _peakResize.MousePt.X + _peakResize.CoordPt.X, e.Y); double x, y; MsGraphControl.GraphPane.ReverseTransform(point, out x, out y); var peaks = PeptideFileAnalysis.CalculatedPeaks; double newStart, newEnd; switch (_peakResize.LineSegment) { case LineSegment.Start: newStart = x; newEnd = _peakResize.Peak.EndTime; break; case LineSegment.End: newStart = _peakResize.Peak.StartTime; newEnd = x; break; default: newStart = x; newEnd = x - _peakResize.Peak.StartTime + _peakResize.Peak.EndTime; break; } var newPeaks = peaks.ChangeTime(_peakResize.TracerFormula, Math.Min(newStart, newEnd), Math.Max(newStart, newEnd)); _peakResize = null; PeptideFileAnalysis.SetCalculatedPeaks(newPeaks); PeptideAnalysis.EnsurePeaksCalculated(); } return base.MsGraphControlOnMouseUpEvent(sender, e); }
protected override bool MsGraphControlOnMouseDownEvent(ZedGraphControl sender, MouseEventArgs e) { _peakResize = null; if (base.MsGraphControlOnMouseDownEvent(sender, e)) { return true; } if ((_peakResize = PeakResizeFromPoint(e.Location)) != null) { sender.Cursor = _peakResize.GetCursor(); return true; } return false; }