public void DrawMarkers(ChartGraphics graph, ChartPicture chart)
 {
     if (this.array != null && this.array.Count != 0)
     {
         foreach (FinancialMarker item in this.array)
         {
             this.markers.DrawMarkers(graph, chart, item.MarkerType, this.series, item.FirstPointIndex, item.FirstYIndex, item.SecondPointIndex, item.SecondYIndex, item.LineColor, item.LineWidth, item.LineStyle, item.TextColor, item.Font);
         }
     }
 }
예제 #2
0
 internal void DrawMarkers(ChartGraphics graph, ChartPicture chart)
 {
     if (array == null || array.Count == 0)
     {
         return;
     }
     foreach (FinancialMarker item in array)
     {
         markers.DrawMarkers(graph, chart, item.MarkerType, series, item.FirstPointIndex, item.FirstYIndex, item.SecondPointIndex, item.SecondYIndex, item.LineColor, item.LineWidth, item.LineStyle, item.TextColor, item.Font);
     }
 }
예제 #3
0
 internal static void CalcInsideTitlePosition(ChartPicture chartPicture, ChartGraphics chartGraph, float elementSpacing)
 {
     if (chartPicture == null)
     {
         return;
     }
     foreach (Title title3 in chartPicture.Titles)
     {
         if (title3.IsVisible() && title3.DockToChartArea != "NotSet")
         {
             try
             {
                 _ = chartPicture.ChartAreas[title3.DockToChartArea];
             }
             catch
             {
                 throw new ArgumentException(SR.ExceptionChartTitleDockedChartAreaIsMissing(title3.DockToChartArea));
             }
         }
     }
     foreach (ChartArea chartArea in chartPicture.ChartAreas)
     {
         if (!chartArea.Visible)
         {
             continue;
         }
         RectangleF chartAreasRectangle = chartArea.PlotAreaPosition.ToRectangleF();
         float      elementSpacing2     = Math.Min(chartAreasRectangle.Height / 100f * elementSpacing, chartAreasRectangle.Width / 100f * elementSpacing);
         foreach (Title title4 in chartPicture.Titles)
         {
             if (title4.DockInsideChartArea && title4.DockToChartArea == chartArea.Name && title4.Position.Auto)
             {
                 RectangleF frameTitlePosition = RectangleF.Empty;
                 title4.CalcTitlePosition(chartGraph, ref chartAreasRectangle, ref frameTitlePosition, elementSpacing2);
             }
         }
     }
 }
예제 #4
0
 public static void CalcInsideTitlePosition(ChartPicture chartPicture, ChartGraphics chartGraph, float elementSpacing)
 {
     if (chartPicture != null)
     {
         foreach (Title title3 in chartPicture.Titles)
         {
             if (title3.IsVisible() && title3.DockToChartArea != "NotSet")
             {
                 try
                 {
                     ChartArea chartArea2 = chartPicture.ChartAreas[title3.DockToChartArea];
                 }
                 catch
                 {
                     throw new ArgumentException(SR.ExceptionChartTitleDockedChartAreaIsMissing(title3.DockToChartArea));
                 }
             }
         }
         foreach (ChartArea chartArea in chartPicture.ChartAreas)
         {
             if (chartArea.Visible)
             {
                 RectangleF rectangleF      = chartArea.PlotAreaPosition.ToRectangleF();
                 float      elementSpacing2 = Math.Min((float)(rectangleF.Height / 100.0 * elementSpacing), (float)(rectangleF.Width / 100.0 * elementSpacing));
                 foreach (Title title4 in chartPicture.Titles)
                 {
                     if (title4.DockInsideChartArea && title4.DockToChartArea == chartArea.Name && title4.Position.Auto)
                     {
                         RectangleF empty = RectangleF.Empty;
                         title4.CalcTitlePosition(chartGraph, ref rectangleF, ref empty, elementSpacing2);
                     }
                 }
             }
         }
     }
 }
예제 #5
0
        internal static void CalcOutsideTitlePosition(ChartPicture chartPicture, ChartGraphics chartGraph, ChartArea area, ref RectangleF chartAreasRectangle, float elementSpacing)
        {
            if (chartPicture == null)
            {
                return;
            }
            float num = Math.Min(chartAreasRectangle.Height / 100f * elementSpacing, chartAreasRectangle.Width / 100f * elementSpacing);

            foreach (Title title in chartPicture.Titles)
            {
                if (!title.IsVisible())
                {
                    continue;
                }
                if (title.DockToChartArea != "NotSet")
                {
                    try
                    {
                        _ = chartPicture.ChartAreas[title.DockToChartArea];
                    }
                    catch
                    {
                        throw new ArgumentException(SR.ExceptionChartTitleDockedChartAreaIsMissing(title.DockToChartArea));
                    }
                }
                if (title.DockInsideChartArea || !(title.DockToChartArea == area.Name) || !title.Position.Auto)
                {
                    continue;
                }
                RectangleF frameTitlePosition = RectangleF.Empty;
                RectangleF rectangleF         = chartAreasRectangle;
                title.CalcTitlePosition(chartGraph, ref chartAreasRectangle, ref frameTitlePosition, num);
                RectangleF rectangleF2 = title.Position.ToRectangleF();
                if (title.Docking == Docking.Top)
                {
                    rectangleF2.Y -= num;
                    if (!area.Position.Auto)
                    {
                        rectangleF2.Y     -= rectangleF2.Height;
                        rectangleF.Y      -= rectangleF2.Height + num;
                        rectangleF.Height += rectangleF2.Height + num;
                    }
                }
                else if (title.Docking == Docking.Bottom)
                {
                    rectangleF2.Y += num;
                    if (!area.Position.Auto)
                    {
                        rectangleF2.Y      = rectangleF.Bottom + num;
                        rectangleF.Height += rectangleF2.Height + num;
                    }
                }
                if (title.Docking == Docking.Left)
                {
                    rectangleF2.X -= num;
                    if (!area.Position.Auto)
                    {
                        rectangleF2.X    -= rectangleF2.Width;
                        rectangleF.X     -= rectangleF2.Width + num;
                        rectangleF.Width += rectangleF2.Width + num;
                    }
                }
                if (title.Docking == Docking.Right)
                {
                    rectangleF2.X += num;
                    if (!area.Position.Auto)
                    {
                        rectangleF2.X     = rectangleF.Right + num;
                        rectangleF.Width += rectangleF2.Width + num;
                    }
                }
                title.Position.SetPositionNoAuto(rectangleF2.X, rectangleF2.Y, rectangleF2.Width, rectangleF2.Height);
                if (!area.Position.Auto)
                {
                    chartAreasRectangle = rectangleF;
                }
            }
        }
        internal void Paint(ChartGraphics chartGraph, bool drawAnnotationOnly)
        {
            ChartPicture chartPicture = this.Chart.chartPicture;

            // Restore previous background using double buffered bitmap
            if (!chartPicture.isSelectionMode &&
                this.Count > 0 /*&&
                                * !this.Chart.chartPicture.isPrinting*/)
            {
                chartPicture.backgroundRestored = true;
                Rectangle chartPosition = new Rectangle(0, 0, chartPicture.Width, chartPicture.Height);
                if (chartPicture.nonTopLevelChartBuffer == null || !drawAnnotationOnly)
                {
                    // Dispose previous bitmap
                    if (chartPicture.nonTopLevelChartBuffer != null)
                    {
                        chartPicture.nonTopLevelChartBuffer.Dispose();
                        chartPicture.nonTopLevelChartBuffer = null;
                    }

                    // Copy chart area plotting rectangle from the chart's dubble buffer image into area dubble buffer image
                    if (this.Chart.paintBufferBitmap != null &&
                        this.Chart.paintBufferBitmap.Size.Width >= chartPosition.Size.Width &&
                        this.Chart.paintBufferBitmap.Size.Height >= chartPosition.Size.Height)
                    {
                        chartPicture.nonTopLevelChartBuffer = this.Chart.paintBufferBitmap.Clone(
                            chartPosition, this.Chart.paintBufferBitmap.PixelFormat);
                    }
                }
                else if (drawAnnotationOnly && chartPicture.nonTopLevelChartBuffer != null)
                {
                    // Restore previous background
                    this.Chart.paintBufferBitmapGraphics.DrawImageUnscaled(
                        chartPicture.nonTopLevelChartBuffer,
                        chartPosition);
                }
            }

            // Draw all annotation objects
            foreach (Annotation annotation in this)
            {
                // Reset calculated relative position
                annotation.ResetCurrentRelativePosition();

                if (annotation.IsVisible())
                {
                    bool resetClip = false;

                    // Check if anchor point assosiated with plot area is inside the scaleView
                    if (annotation.IsAnchorVisible())
                    {
                        // Set annotation object clipping
                        if (annotation.ClipToChartArea.Length > 0 &&
                            annotation.ClipToChartArea != Constants.NotSetValue &&
                            Chart != null)
                        {
                            int areaIndex = Chart.ChartAreas.IndexOf(annotation.ClipToChartArea);
                            if (areaIndex >= 0)
                            {
                                // Get chart area object
                                ChartArea chartArea = Chart.ChartAreas[areaIndex];
                                chartGraph.SetClip(chartArea.PlotAreaPosition.ToRectangleF());
                                resetClip = true;
                            }
                        }

                        // Start Svg Selection mode
                        string url = String.Empty;
                        chartGraph.StartHotRegion(
                            annotation.ReplaceKeywords(url),
                            annotation.ReplaceKeywords(annotation.ToolTip));

                        // Draw annotation object
                        annotation.Paint(Chart, chartGraph);


                        // End Svg Selection mode
                        chartGraph.EndHotRegion( );

                        // Reset clipping region
                        if (resetClip)
                        {
                            chartGraph.ResetClip();
                        }
                    }
                }
            }
        }
 public int Add(FinancialMarkerType markerName, int firstPointIndex, int secondPointIndex, int firstYIndex, int secondYIndex, Color lineColor, int lineWidth)
 {
     return(this.Add(markerName, firstPointIndex, secondPointIndex, firstYIndex, secondYIndex, lineColor, lineWidth, Color.Black, new Font(ChartPicture.GetDefaultFontFamilyName(), 8f)));
 }
 public void Insert(int index, FinancialMarkerType markerName, int firstPointIndex, int secondPointIndex)
 {
     this.Insert(index, markerName, firstPointIndex, secondPointIndex, 0, 0, Color.Gray, 1, Color.Black, new Font(ChartPicture.GetDefaultFontFamilyName(), 8f));
 }
 public void Insert(int index, FinancialMarkerType markerName, int firstPointIndex, int secondPointIndex, int firstYIndex, int secondYIndex, Color lineColor, int lineWidth)
 {
     this.Insert(index, markerName, firstPointIndex, secondPointIndex, firstYIndex, secondYIndex, lineColor, lineWidth, Color.Black, new Font(ChartPicture.GetDefaultFontFamilyName(), 8f));
 }
 public int Add(FinancialMarkerType markerName, int firstPointIndex, int secondPointIndex)
 {
     return(this.Add(markerName, firstPointIndex, secondPointIndex, 0, 0, Color.Gray, 1, Color.Black, new Font(ChartPicture.GetDefaultFontFamilyName(), 8f)));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ChartAreaCollection"/> class.
 /// </summary>
 /// <param name="chartPicture">Parent chart picture.</param>
 internal ChartAreaCollection(ChartPicture chartPicture) : base(chartPicture)
 {
 }
예제 #12
0
        /// <summary>
        /// Paints all annotation objects in the collection.
        /// </summary>
        /// <param name="chartGraph">Chart graphics used for painting.</param>
        /// <param name="drawAnnotationOnly">Indicates that only annotation objects are redrawn.</param>
        internal void Paint(ChartGraphics chartGraph, bool drawAnnotationOnly)
        {
            ChartPicture chartPicture = Chart.chartPicture;

            // Restore previous background using double buffered bitmap
            if (!chartPicture.isSelectionMode &&
                Count > 0 /*&&
                           *    !this.Chart.chartPicture.isPrinting*/)
            {
                chartPicture.backgroundRestored = true;
                if (chartPicture.nonTopLevelChartBuffer == null || !drawAnnotationOnly)
                {
                    // Dispose previous bitmap
                    if (chartPicture.nonTopLevelChartBuffer != null)
                    {
                        chartPicture.nonTopLevelChartBuffer.Dispose();
                        chartPicture.nonTopLevelChartBuffer = null;
                    }
                }
                else if (chartPicture.nonTopLevelChartBuffer != null)
                {
                    // Restore previous background
                }

                // Draw all annotation objects
                foreach (Annotation annotation in this)
                {
                    // Reset calculated relative position
                    annotation.ResetCurrentRelativePosition();

                    if (annotation.IsVisible())
                    {
                        bool resetClip = false;

                        // Check if anchor point assosiated with plot area is inside the scaleView
                        if (annotation.IsAnchorVisible())
                        {
                            // Set annotation object clipping
                            if (annotation.ClipToChartArea.Length > 0 &&
                                annotation.ClipToChartArea != Constants.NotSetValue &&
                                Chart != null)
                            {
                                int areaIndex = Chart.ChartAreas.IndexOf(annotation.ClipToChartArea);
                                if (areaIndex >= 0)
                                {
                                    // Get chart area object
                                    ChartArea chartArea = Chart.ChartAreas[areaIndex];
                                    chartGraph.SetClip(chartArea.PlotAreaPosition.ToSKRect());
                                    resetClip = true;
                                }
                            }

                            // Draw annotation object
                            annotation.Paint(Chart, chartGraph);

                            // Reset clipping region
                            if (resetClip)
                            {
                                chartGraph.ResetClip();
                            }
                        }
                    }
                }
            }

            #endregion Painting
        }
        internal void DrawMarkers(ChartGraphics graph, ChartPicture chart, FinancialMarkerType markerName, Series series, int firstPoint, int firstYValue, int secondPoint, int secondYValue, Color lineColor, int lineWidth, ChartDashStyle lineStyle, Color textColor, Font textFont)
        {
            this.lineStyle = lineStyle;
            if (textColor == Color.Empty)
            {
                drawText = false;
            }
            else
            {
                this.textColor = textColor;
                drawText       = true;
            }
            if (lineColor == Color.Empty)
            {
                this.lineColor = Color.Gray;
            }
            else
            {
                this.lineColor = lineColor;
            }
            if (lineWidth == 0)
            {
                this.lineWidth = 1;
            }
            else
            {
                this.lineWidth = lineWidth;
            }
            if (textFont == null)
            {
                this.textFont = new Font(ChartPicture.GetDefaultFontFamilyName(), 8f);
            }
            else
            {
                this.textFont = textFont;
            }
            ChartArea chartArea = chart.ChartAreas[series.ChartArea];

            if (chartArea.Area3DStyle.Enable3D || chartArea.chartAreaIsCurcular || !chartArea.requireAxes)
            {
                return;
            }
            Axis   axis  = chartArea.GetAxis(AxisName.X, series.XAxisType, series.XSubAxisName);
            Axis   axis2 = chartArea.GetAxis(AxisName.Y, series.YAxisType, series.YSubAxisName);
            double position;
            double position2;
            double position3;
            double position4;

            try
            {
                if (chartArea.Common.ChartTypeRegistry.GetChartType(series.ChartTypeName).SwitchValueAxes)
                {
                    axesSwitched = true;
                    Axis axis3 = axis2;
                    axis2     = axis;
                    axis      = axis3;
                    position  = axis.GetPosition(series.Points[firstPoint].YValues[firstYValue]);
                    position2 = axis2.GetPosition(series.Points[firstPoint].XValue);
                    position3 = axis.GetPosition(series.Points[secondPoint].YValues[secondYValue]);
                    position4 = axis2.GetPosition(series.Points[secondPoint].XValue);
                }
                else
                {
                    axesSwitched = false;
                    position     = axis.GetPosition(series.Points[firstPoint].XValue);
                    position2    = axis2.GetPosition(series.Points[firstPoint].YValues[firstYValue]);
                    position3    = axis.GetPosition(series.Points[secondPoint].XValue);
                    position4    = axis2.GetPosition(series.Points[secondPoint].YValues[secondYValue]);
                }
            }
            catch (Exception)
            {
                throw new InvalidOperationException(SR.ExceptionFinancialMarkersSeriesPointYValueIndexInvalid);
            }
            PointF relative  = new PointF((float)position, (float)position2);
            PointF relative2 = new PointF((float)position3, (float)position4);

            relative  = graph.GetAbsolutePoint(relative);
            relative2 = graph.GetAbsolutePoint(relative2);
            bool flag = false;

            foreach (DataPoint point in series.Points)
            {
                flag = true;
                if (point.XValue != 0.0)
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
            {
                throw new InvalidOperationException(SR.ExceptionFormulaDataZeroIndexedXValuesUnsupported);
            }
            graph.SetClip(chartArea.PlotAreaPosition.ToRectangleF());
            SmoothingMode smoothingMode = graph.SmoothingMode;

            if ((graph.AntiAliasing & AntiAliasingTypes.Graphics) == AntiAliasingTypes.Graphics)
            {
                graph.SmoothingMode = SmoothingMode.AntiAlias;
            }
            switch (markerName)
            {
            case FinancialMarkerType.FibonacciArcs:
                FibonacciArcs(graph, relative, relative2);
                break;

            case FinancialMarkerType.TrendLine:
                TrendLine(graph, relative, relative2);
                break;

            case FinancialMarkerType.FibonacciFans:
                FibonacciFans(graph, relative, relative2, chartArea);
                break;

            case FinancialMarkerType.FibonacciRetracements:
                FibonacciRetracements(graph, relative, relative2, chartArea);
                break;

            case FinancialMarkerType.SpeedResistanceLines:
                SpeedResistanceLines(graph, relative, relative2, chartArea);
                break;

            case FinancialMarkerType.QuadrantLines:
                QuadrantLines(graph, relative, relative2, chartArea);
                break;

            default:
                throw new InvalidOperationException(SR.ExceptionFinancialMarkersFormulaNotFound);
            }
            graph.ResetClip();
            graph.SmoothingMode = smoothingMode;
        }