/// <summary> /// Paint the visual elements (colour, line and marker) of all simulation / zone pairs. /// </summary> /// <param name="factors">The simulation/zone pairs to change</param> /// <param name="storage">Storage reader</param> /// <param name="baseData">Base data</param> private List <SeriesDefinition> ConvertToSeriesDefinitions(List <ISimulationGeneratorFactors> factors, IStorageReader storage, DataTable baseData) { // Create an appropriate painter object SimulationZonePainter.IPainter painter; if (FactorToVaryColours != null) { if (FactorToVaryLines == FactorToVaryColours) { painter = new SimulationZonePainter.SequentialPainterTwoFactors() { FactorName = FactorToVaryColours, MaximumIndex1 = ColourUtilities.Colours.Length, MaximumIndex2 = Enum.GetValues(typeof(LineType)).Length - 1, // minus 1 to avoid None type Setter1 = VisualElements.SetColour, Setter2 = VisualElements.SetLineType } } ; else if (FactorToVaryMarkers == FactorToVaryColours) { painter = new SimulationZonePainter.SequentialPainterTwoFactors() { FactorName = FactorToVaryColours, MaximumIndex1 = ColourUtilities.Colours.Length, MaximumIndex2 = Enum.GetValues(typeof(MarkerType)).Length - 1,// minus 1 to avoid None type Setter1 = VisualElements.SetColour, Setter2 = VisualElements.SetMarker } } ; else if (FactorToVaryLines != null) { painter = new SimulationZonePainter.DualPainter() { FactorName1 = FactorToVaryColours, FactorName2 = FactorToVaryLines, MaximumIndex1 = ColourUtilities.Colours.Length, MaximumIndex2 = Enum.GetValues(typeof(LineType)).Length - 1, // minus 1 to avoid None type Setter1 = VisualElements.SetColour, Setter2 = VisualElements.SetLineType } } ; else if (FactorToVaryMarkers != null) { painter = new SimulationZonePainter.DualPainter() { FactorName1 = FactorToVaryColours, FactorName2 = FactorToVaryMarkers, MaximumIndex1 = ColourUtilities.Colours.Length, MaximumIndex2 = Enum.GetValues(typeof(MarkerType)).Length - 1,// minus 1 to avoid None type Setter1 = VisualElements.SetColour, Setter2 = VisualElements.SetMarker } } ; else { painter = new SimulationZonePainter.SequentialPainter() { FactorName = FactorToVaryColours, MaximumIndex = ColourUtilities.Colours.Length, Setter = VisualElements.SetColour } }; } else if (FactorToVaryLines != null) { painter = new SimulationZonePainter.SequentialPainter() { FactorName = FactorToVaryLines, MaximumIndex = Enum.GetValues(typeof(LineType)).Length - 1, // minus 1 to avoid None type Setter = VisualElements.SetLineType }; } else if (FactorToVaryMarkers != null) { painter = new SimulationZonePainter.SequentialPainter() { FactorName = FactorToVaryMarkers, MaximumIndex = Enum.GetValues(typeof(MarkerType)).Length - 1,// minus 1 to avoid None type Setter = VisualElements.SetMarker }; } else { painter = new SimulationZonePainter.DefaultPainter() { Colour = Colour, LineType = Line, MarkerType = Marker } }; List <SeriesDefinition> definitions = new List <SeriesDefinition>(); // Apply the painter to all simulation zone objects. foreach (ISimulationGeneratorFactors factor in factors) { VisualElements visualElement = new VisualElements(); visualElement.colour = Colour; visualElement.Line = Line; visualElement.LineThickness = LineThickness; visualElement.Marker = Marker; visualElement.MarkerSize = MarkerSize; painter.PaintSimulationZone(factor, visualElement); SeriesDefinition seriesDefinition = new Models.Graph.SeriesDefinition(); seriesDefinition.type = Type; seriesDefinition.marker = visualElement.Marker; seriesDefinition.line = visualElement.Line; seriesDefinition.markerSize = visualElement.MarkerSize; seriesDefinition.lineThickness = visualElement.LineThickness; seriesDefinition.colour = visualElement.colour; seriesDefinition.xFieldName = XFieldName; seriesDefinition.yFieldName = YFieldName; seriesDefinition.xAxis = XAxis; seriesDefinition.yAxis = YAxis; seriesDefinition.xFieldUnits = storage.GetUnits(TableName, XFieldName); seriesDefinition.yFieldUnits = storage.GetUnits(TableName, YFieldName); seriesDefinition.showInLegend = ShowInLegend; factor.Factors.ForEach(f => seriesDefinition.title += f.Value); if (IncludeSeriesNameInLegend) { seriesDefinition.title += ": " + Name; } if (Checkpoint != "Current") { seriesDefinition.title += " (" + Checkpoint + ")"; } DataView data = new DataView(baseData); try { data.RowFilter = CreateRowFilter(storage, new ISimulationGeneratorFactors[] { factor }, DataTableUtilities.GetColumnNames(baseData)); } catch { } if (data.Count > 0) { seriesDefinition.data = data.ToTable(); seriesDefinition.x = GetDataFromTable(seriesDefinition.data, XFieldName); seriesDefinition.y = GetDataFromTable(seriesDefinition.data, YFieldName); seriesDefinition.x2 = GetDataFromTable(seriesDefinition.data, X2FieldName); seriesDefinition.y2 = GetDataFromTable(seriesDefinition.data, Y2FieldName); seriesDefinition.error = GetErrorDataFromTable(seriesDefinition.data, YFieldName); if (Cumulative) { seriesDefinition.y = MathUtilities.Cumulative(seriesDefinition.y as IEnumerable <double>); } if (CumulativeX) { seriesDefinition.x = MathUtilities.Cumulative(seriesDefinition.x as IEnumerable <double>); } } definitions.Add(seriesDefinition); } return(definitions); }
/// <summary> /// Paint the visual elements (colour, line and marker) of all simulation / zone pairs. /// </summary> /// <param name="simulationZones">The simulation/zone pairs to change</param> private void PaintAllSimulationZones(List <SimulationZone> simulationZones) { // Create an appropriate painter object SimulationZonePainter.IPainter painter; if (FactorIndexToVaryColours != -1 && FactorIndexToVaryColours < FactorNamesForVarying.Count) { string factorNameToVaryByColours = FactorNamesForVarying[FactorIndexToVaryColours]; if (FactorIndexToVaryLines == FactorIndexToVaryColours) { painter = new SimulationZonePainter.SequentialPainterTwoFactors() { FactorName = factorNameToVaryByColours, MaximumIndex1 = ColourUtilities.Colours.Length, MaximumIndex2 = Enum.GetValues(typeof(LineType)).Length - 1, // minus 1 to avoid None type Setter1 = VisualElements.SetColour, Setter2 = VisualElements.SetLineType } } ; else if (FactorIndexToVaryMarkers == FactorIndexToVaryColours) { painter = new SimulationZonePainter.SequentialPainterTwoFactors() { FactorName = factorNameToVaryByColours, MaximumIndex1 = ColourUtilities.Colours.Length, MaximumIndex2 = Enum.GetValues(typeof(MarkerType)).Length - 1,// minus 1 to avoid None type Setter1 = VisualElements.SetColour, Setter2 = VisualElements.SetMarker } } ; else if (FactorIndexToVaryLines != -1) { painter = new SimulationZonePainter.DualPainter() { FactorName1 = factorNameToVaryByColours, FactorName2 = FactorNamesForVarying[FactorIndexToVaryLines], MaximumIndex1 = ColourUtilities.Colours.Length, MaximumIndex2 = Enum.GetValues(typeof(LineType)).Length - 1, // minus 1 to avoid None type Setter1 = VisualElements.SetColour, Setter2 = VisualElements.SetLineType } } ; else if (FactorIndexToVaryMarkers != -1) { painter = new SimulationZonePainter.DualPainter() { FactorName1 = factorNameToVaryByColours, FactorName2 = FactorNamesForVarying[FactorIndexToVaryMarkers], MaximumIndex1 = ColourUtilities.Colours.Length, MaximumIndex2 = Enum.GetValues(typeof(MarkerType)).Length - 1,// minus 1 to avoid None type Setter1 = VisualElements.SetColour, Setter2 = VisualElements.SetMarker } } ; else { painter = new SimulationZonePainter.SequentialPainter() { FactorName = factorNameToVaryByColours, MaximumIndex = ColourUtilities.Colours.Length, Setter = VisualElements.SetColour } }; } else if (FactorIndexToVaryLines != -1 && FactorIndexToVaryLines < FactorNamesForVarying.Count) { string factorNameToVaryByLine = FactorNamesForVarying[FactorIndexToVaryLines]; painter = new SimulationZonePainter.SequentialPainter() { FactorName = factorNameToVaryByLine, MaximumIndex = Enum.GetValues(typeof(LineType)).Length - 1, // minus 1 to avoid None type Setter = VisualElements.SetLineType }; } else if (FactorIndexToVaryMarkers != -1 && FactorIndexToVaryMarkers < FactorNamesForVarying.Count) { string factorNameToVaryByMarker = FactorNamesForVarying[FactorIndexToVaryMarkers]; painter = new SimulationZonePainter.SequentialPainter() { FactorName = factorNameToVaryByMarker, MaximumIndex = Enum.GetValues(typeof(MarkerType)).Length - 1, // minus 1 to avoid None type Setter = VisualElements.SetMarker }; } else { painter = new SimulationZonePainter.DefaultPainter() { Colour = Colour, LineType = Line, MarkerType = Marker } }; // Apply the painter to all simulation zone objects. foreach (SimulationZone simZone in simulationZones) { simZone.visualElement = new VisualElements(); simZone.visualElement.colour = Colour; simZone.visualElement.Line = Line; simZone.visualElement.LineThickness = LineThickness; simZone.visualElement.Marker = Marker; simZone.visualElement.MarkerSize = MarkerSize; painter.PaintSimulationZone(simZone); } }