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); } } }
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); } }
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); } } } }
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); } } } } } }
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) { }
/// <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; }