/// <summary> /// Plots a line of conditions on the graph /// </summary> /// <param name="peak">Peak to plot</param> /// <param name="seriesNames">Names of existing series</param> /// <param name="intensities">Intensity values (y)</param> /// <param name="seriesName">Name of this series</param> /// <param name="xInfo">Info for x position of intentises (in same order as intensities)</param> /// <param name="line">Line or dots/</param> /// <param name="bold">Bold line?</param> /// <param name="isConditions">Order by conditions or obervations</param> private void AddToPlot( MCharting.Plot plot, Peak peak, Dictionary <string, MCharting.Series> seriesNames, Vector intensities, string seriesName, StylisedPeakOptions o, EPlot draw, Dictionary <GroupInfoBase, MCharting.Series> groupLegends, MCharting.Series legend) { // Iterate whatever it is we're iterating for (int i = 0; i < intensities.Observations.Length; ++i) { // Get the values ObservationInfo obs = intensities.Observations[i]; // Name the series if (draw.HasFlag(EPlot.ByBatch)) { if (!o.ViewBatches.Contains(obs.Batch)) { continue; } } else { if (!o.ViewGroups.Contains(obs.Group)) { continue; } } bool colorByBatch = draw.HasFlag(EPlot.ByBatch); GroupInfoBase seriesUsing = colorByBatch ? (GroupInfoBase)obs.Batch : (GroupInfoBase)obs.Group; string name = seriesName + " for " + seriesUsing.DisplayName; MCharting.Series series; // Create the series (if required) if (!seriesNames.ContainsKey(name)) { series = plot.Series.Add(name); series.Style.StrictOrder = SeriesStyle.EOrder.X; series.ApplicableLegends.Add(groupLegends[seriesUsing]); series.ApplicableLegends.Add(legend); seriesNames.Add(name, series); series.Tag = peak; Color colour = (draw.HasFlag(EPlot.DrawBold) || draw.HasFlag(EPlot.ByBatch) || !o.ShowTrend) ? seriesUsing.Colour : seriesUsing.ColourLight; if (draw.HasFlag(EPlot.DrawLine)) { series.Style.DrawLines = new Pen(colour); series.Style.DrawLines.Width = draw.HasFlag(EPlot.DrawBold) ? this._core.Options.LineWidth * 4 : this._core.Options.LineWidth; } else { UiControls.CreateIcon(series, seriesUsing); } } else { series = seriesNames[name]; } // Get the X position double xPos; if (draw.HasFlag(EPlot.ByBatch)) { xPos = obs.Order; if (o.ConditionsSideBySide) { xPos += this.GetBatchOffset(o.ViewBatches, obs.Batch); } } else { xPos = obs.Time; if (o.ConditionsSideBySide) { xPos += this.GetTypeOffset(o.ViewGroups, obs.Group); } } // Get the Y position double yPos = intensities.Values[i]; if (double.IsNaN(yPos) || double.IsInfinity(yPos)) { yPos = 0; } // Create the point MCharting.DataPoint cdp = new MCharting.DataPoint(xPos, yPos); IntensityInfo tag = new IntensityInfo(obs.Time, obs.Rep, obs.Group, yPos); cdp.Tag = tag; series.Points.Add(cdp); } }
public ChartSelectionEventArgs(Peak variable, IntensityInfo dataPoint, string seriesName) { this._peak = variable; this._dataPoint = dataPoint; this._seriesName = seriesName; }
private void AddUpperAndLowerShade( MCharting.Plot plot, StylisedPeakOptions o, Dictionary <string, MCharting.Series> seriesNames, Peak peak, Vector min, Vector max, Dictionary <GroupInfoBase, MCharting.Series> groupLegends) { MCharting.Series legendEntry = new MCharting.Series(); legendEntry.Name = "Range"; legendEntry.Style.DrawVBands = new SolidBrush(Color.Gray); plot.LegendEntries.Add(legendEntry); // Iterate the conditions for (int i = 0; i < min.Observations.Length; i++) { ObservationInfo obs = min.Observations[i]; Debug.Assert(max.Observations[i] == min.Observations[i], "Expected max and min trends to match sequences."); if (o.ViewGroups.Contains(obs.Group)) { // Name the series string name = "Range for " + obs.Group.DisplayName; MCharting.Series series; // Create the series (if required) if (!seriesNames.ContainsKey(name)) { series = plot.Series.Add(name); series.Style.StrictOrder = SeriesStyle.EOrder.X; Color c = obs.Group.ColourLight; c = Color.FromArgb(0x80, c.R, c.G, c.B); series.Tag = peak; series.Style.DrawVBands = obs.Group.CreateBrush(c); series.ApplicableLegends.Add(groupLegends[obs.Group]); series.ApplicableLegends.Add(legendEntry); seriesNames.Add(name, series); } else { series = seriesNames[name]; } // Get the X coordinate int typeOffset = this.GetTypeOffset(o.ViewGroups, obs.Group); double xVal = obs.Time; if (o.ConditionsSideBySide) { xVal += typeOffset; } // Get the Y coordinates double yMin = min.Values[i]; double yMax = max.Values[i]; if (double.IsNaN(yMin) || double.IsInfinity(yMin)) { yMin = 0; } if (double.IsNaN(yMax) || double.IsInfinity(yMax)) { yMax = 0; } // Create the point IntensityInfo info1 = new IntensityInfo(obs.Time, null, obs.Group, yMin); IntensityInfo info2 = new IntensityInfo(obs.Time, null, obs.Group, yMax); MCharting.DataPoint cdp = new MCharting.DataPoint(xVal, new[] { yMin, yMax }); cdp.Tag = new[] { info1, info2 }; series.Points.Add(cdp); } } }
protected virtual void OnSelection(Peak v, IntensityInfo dp) { // No action }