示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
            }
        }