private void chart_exp_Paint(object sender, PaintEventArgs e) { if (pos_left_x >= 0) { double x = AxisX.ValueToPixelPosition(pos_left_x); double y = AxisY.ValueToPixelPosition(pos_left_y); Rectangle r = new Rectangle((int)x - 5, (int)y - 5, 10, 10); e.Graphics.DrawEllipse(Pens.Red, r); } if (pos_right_x >= 0) { double x = AxisX.ValueToPixelPosition(pos_right_x); double y = AxisY.ValueToPixelPosition(pos_right_y); Rectangle r = new Rectangle((int)x - 5, (int)y - 5, 10, 10); e.Graphics.DrawEllipse(Pens.Red, r); } //直線引きます if (pos_left_x >= 0 && pos_right_x >= 0) { if (pos_left_x > pos_right_x) { Swap(ref pos_left_x, ref pos_right_x); Swap(ref pos_left_y, ref pos_right_y); } double a = (pos_right_y - pos_left_y) / (pos_right_x - pos_left_x); double b = pos_left_y - a * pos_left_x; e.Graphics.DrawLine(Pens.Green , new Point((int)AxisX.ValueToPixelPosition(AxisX.Minimum), (int)AxisY.ValueToPixelPosition(AxisX.Minimum * a + b)) , new Point((int)AxisX.ValueToPixelPosition(AxisX.Maximum), (int)AxisY.ValueToPixelPosition(AxisX.Maximum * a + b))); } }
private void AxisY_RangeChanged(object sender, RangeChangedEventArgs e) { AxisY axisY = sender as AxisY; (axisY.Tag as SignalToken).UpperLimit = Math.Round(axisY.Maximum, 1); (axisY.Tag as SignalToken).LowerLimit = Math.Round(axisY.Minimum, 1); }
public List <AxisCore> MapYAxes(ChartCore chart) { if (Windows.ApplicationModel.DesignMode.DesignModeEnabled && AxisY == null) { AxisY = DefaultAxes.DefaultAxis; } if (AxisY.Count == 0) { AxisY.AddRange(DefaultAxes.DefaultAxis); } return(AxisY.Select(y => { if (y.Parent == null) { if (y.Separator != null) { chart.View.AddToView(y.Separator); } chart.View.AddToView(y); y.AxisOrientation = AxisOrientation.Y; } return y.AsCoreElement(Model, AxisOrientation.Y); }).ToList()); }
private void ChartInit() { //RuntimeHitTesting设为True时,才可从ChartHitInfo中取得SeriesPoint //chartControl1.RuntimeHitTesting = true; XYDiagram myDiagram = chartControl1.Diagram as XYDiagram; AxisX myAxisX = myDiagram.AxisX; myAxisX.WholeRange.AutoSideMargins = false; myAxisX.WholeRange.SideMarginsValue = 0; foreach (ConstantLine cLine in myAxisX.ConstantLines) { cLine.Name = string.Empty; } AxisY myAxisY = myDiagram.AxisY; myAxisY.WholeRange.AutoSideMargins = true; myAxisY.Tickmarks.Visible = false; myAxisY.Tickmarks.MinorVisible = false; SecondaryAxisY myRateAxisY = myDiagram.SecondaryAxesY[0]; myRateAxisY.WholeRange.AutoSideMargins = true; myRateAxisY.Tickmarks.Visible = true; myRateAxisY.Tickmarks.MinorVisible = false; }
private void ReDrawAxisY(ChartControl chart, RangeInfo newXRange) { try { if (string.IsNullOrEmpty(newXRange.MinValue.ToString()) || string.IsNullOrEmpty(newXRange.MaxValue.ToString())) { return; } var minValueX = CommonHelper.StringToDateTime(newXRange.MinValue.ToString()); var maxValueX = CommonHelper.StringToDateTime(newXRange.MaxValue.ToString()); var currentKLineData = _KLineData.AsEnumerable().Where(x => x.Field <DateTime>("TradeDate") >= minValueX && x.Field <DateTime>("TradeDate") <= maxValueX); if (currentKLineData.Any()) { decimal minValueY = currentKLineData.Select(x => x.Field <decimal>("Low")).Min(); decimal maxValueY = currentKLineData.Select(x => x.Field <decimal>("High")).Max(); AxisY myAxisY = (chart.Diagram as XYDiagram).AxisY; myAxisY.VisualRange.SetMinMaxValues(minValueY - (maxValueY - minValueY) / 10, maxValueY); } } catch (Exception ex) { DXMessage.ShowError(ex.Message); } }
/// <summary> /// 繪製 Layer 圖層 /// </summary> /// <param name="layer">Layer 圖層</param> /// <param name="property">Chart 屬性參數</param> /// <param name="onlyUpdateLastBar">是否僅更新最後一根Bar(Plot可以使用此旗標來判斷是否只繪製最後一根Bar, 也可以忽略此旗標全部的Bar都更新)</param> /// <returns>返回值:true=繪製 Layer 完成, false=繪製 Layer 未完成</returns> public override bool DrawLayer(Layer layer, ChartProperty property, bool onlyUpdateLastBar) { List <AbstractPlot> cPlots = layer.Plots; int iCount = cPlots.Count; if (iCount > 0) { AxisY cAxisY = layer.AxisY; bool bRefresh = cAxisY.Refresh; if (onlyUpdateLastBar || bRefresh) { for (int i = 0; i < iCount; i++) { AbstractPlot cPlot = cPlots[i]; if (cPlot.IsSubChart) { if (!cPlot.DrawPlot(layer, property, onlyUpdateLastBar)) { return(false); } } } if (bRefresh) { //繪製 Layer 邊框 Rectangle cRect = layer.LayerRectangleWithoutAxisY; IntPtr cOldPen = __cGDI.SelectPen(new PowerLanguage.PenStyle(property.ForeColor, 1)); __cGDI.DrawRectangle(0, cRect.Y, cRect.Width, cRect.Height); __cGDI.RemoveObject(__cGDI.SelectPen(cOldPen)); } } } return(true); }
protected void ASPxButton1_Click(object sender, EventArgs e) { // Create a WebChartControl instance. WebChartControl WebChartControl1 = new WebChartControl(); // Add the chart to the form. this.form1.Controls.Add(WebChartControl1); // Create a line series and add points to it. Series series1 = new Series("My Line Series", ViewType.Line); series1.Points.Add(new SeriesPoint("A", new double[] { 10 })); series1.Points.Add(new SeriesPoint("B", new double[] { 12 })); series1.Points.Add(new SeriesPoint("C", new double[] { 14 })); series1.Points.Add(new SeriesPoint("D", new double[] { 17 })); // Add the series to the chart. WebChartControl1.Series.Add(series1); // Add two strips to the axis' collection of strips, // with the immediately defined minValue and MaxValue range. AxisY myAxis = ((XYDiagram)WebChartControl1.Diagram).AxisY; myAxis.Strips.Add(new Strip("Strip 1", 0, 5)); myAxis.Strips.Add(new Strip("Strip 2", 5, 10)); // Customize the appearance of the strips. myAxis.Strips[0].Color = Color.Azure; myAxis.Strips[0].LegendText = "My First Strip"; myAxis.Strips[1].Color = Color.Coral; myAxis.Strips[1].LegendText = "My Second Strip"; }
/// <summary> /// Evaluates the stop condition, checking for EStop or a limit switch. Turns off all devices and sets an error message to be returned. /// </summary> private string GetEStopErrorMessage() { string limitSwitch; if (Program.OvertravelCondition) { if (AxisX.IsAtLimit(out limitSwitch)) { return("***E-STOP Activated: X Axis (" + limitSwitch + ") Limit reached"); } if (AxisY.IsAtLimit(out limitSwitch)) { return("***E-STOP Activated: Y Axis (" + limitSwitch + ") Limit reached"); } if (AxisZ.IsAtLimit(out limitSwitch)) { return("***E-STOP Activated: Z Axis (" + limitSwitch + ") Limit reached"); } } if (Program.EStopCondition) { return("***E-STOP Activated"); } return("Unknown reason for motion stop condition"); }
public List <AxisCore> MapYAxes(ChartCore chart) { if (DesignerProperties.GetIsInDesignMode(this) || AxisY == null) { AxisY = DefaultAxes.DefaultAxis; } //if (AxisY.Count == 0) // AxisY.AddRange(DefaultAxes.DefaultAxis); if (AxisY.Count == 0) { AxisY.Add(new Axis { Separator = new Separator() }); } return(AxisY.Select(y => { if (y.Parent == null) { y.AxisOrientation = AxisOrientation.Y; if (y.Separator != null) { chart.View.AddToView(y.Separator); } chart.View.AddToView(y); } return y.AsCoreElement(Model, AxisOrientation.Y); }).ToList()); }
/// <summary> /// 加入使用者繪製物件 /// </summary> /// <param name="name">繪製物件名稱</param> /// <param name="layer">繪製的目標 Layer 圖層</param> /// <param name="points">Point 繪製點陣列</param> /// <param name="pens">繪製筆刷陣列</param> public void AddDrawObject(string name, Layer layer, Point[] points, PenStyle[] pens) { AxisX cAxisX = layer.AxisX; AxisY cAxisY = layer.AxisY; int iMin = int.MaxValue, iMax = int.MinValue, iLength = points.Length; ChartPoint[] cPoints = new ChartPoint[iLength]; for (int i = 0; i < iLength; i++) { Point cPoint = points[i]; int iBarNumber = cAxisX.ConvertBarNumberFromX(cPoint.X); ChartPoint cChartPoint = new ChartPoint(iBarNumber, cAxisY.ConvertValueFromY(cPoint.Y)); cChartPoint.Time = cAxisX.ConvertBarNumberToTime(iBarNumber); cPoints[i] = cChartPoint; if (iMin > iBarNumber) { iMin = iBarNumber; } if (iMax < iBarNumber) { iMax = iBarNumber; } } AddDrawObjectFromRange(iMin, iMax, new DrawObject(name, layer.LayerIndex, cPoints, pens)); }
private void btnDisableLogarithm_Click(object sender, EventArgs e) { AxisY axis = ((XYDiagram)chartControl1.Diagram).AxisY; axis.Logarithmic = false; axis.WholeRange.AlwaysShowZeroLevel = true; }
// drawing axis title near arrows private void GraphArea_PostPaint(object sender, ChartPaintEventArgs e) { if (e.ChartElement is Chart && (axisX.TitleAlignment == TitleAlignment.NearAxisArrow || axisY.TitleAlignment == TitleAlignment.NearAxisArrow)) { Chart chart = (Chart)e.ChartElement; Graphics g = e.ChartGraphics.Graphics; Font drawFont = new Font("Verdana", 8); SolidBrush drawBrush = new SolidBrush(Color.Black); float x, y; // X AXIS if (axisX.TitleAlignment == TitleAlignment.NearAxisArrow) { x = chart.Width - 90 - g.MeasureString(axisX.TextToDisplay, drawFont).Width; y = (float)AxisY.ValueToPixelPosition(0) - 20; g.DrawString(axisX.TextToDisplay, drawFont, drawBrush, x, y); } // Y AXIS if (axisY.TitleAlignment == TitleAlignment.NearAxisArrow) { x = (float)AxisX.ValueToPixelPosition(0); y = chart.Location.X; g.DrawString(axisY.TextToDisplay, drawFont, drawBrush, x, y); } drawFont.Dispose(); drawBrush.Dispose(); } }
public Point Evaluate(Point parameter) { Vector vecX = AxisX.GetUnitVector() * parameter.X; Vector vecY = AxisY.GetUnitVector() * parameter.Y; Vector vecZ = AxisZ.GetUnitVector() * parameter.Z; return(Origin + vecX + vecY + vecZ); }
/// <summary> /// Clears all settings configured on the graph and resets all properties /// to default values (<see cref="CellSize"/>, <see cref="ScrollOffset"/> etc) /// </summary> public void Reset() { ScrollOffset = new PointF(0, 0); CellSize = new PointF(1, 1); AxisX.Reset(); AxisY.Reset(); Series.Clear(); Annotations.Clear(); GraphColor = null; SetNeedsDisplay(); }
/// <summary> /// Move up safely in Z, then move X and Y, then move to destination in Z /// </summary> /// <param name="mmX"></param> /// <param name="mmY"></param> /// <param name="mmZ"></param> public void MoveXYSafeZ(Millimeters mmX, Millimeters mmY, Millimeters mmZ) { // Temp //AxisX.MoveAbs(dest.X); //AxisY.MoveAbs(dest.Y); AxisZ.MoveAbs(SafeZHeight); AxisX.SetTarget(mmX); AxisY.SetTarget(mmY); _motionSystem.MoveLinearXY(this, AxisX.DefaultSpeed); AxisZ.MoveAbs(mmZ); }
private void OnChartMouseUp(object sender, MouseEventArgs e) { if (SelectButton == MouseButtons.None) { return; } HitTestResult htr = chart.HitTest(e.X, e.Y); if (htr.ChartElementType == ChartElementType.Nothing) { return; } var mousedx = e.X - StartSelect.X; var mousedy = e.Y - StartSelect.Y; var x = AxisX.PixelPositionToValue(StartSelect.X); var y = AxisY.PixelPositionToValue(e.Y); var dx = AxisX.PixelPositionToValue(e.X) - x; var dy = AxisY.PixelPositionToValue(StartSelect.Y) - y; if (SelectButton == MouseButtons.Left) { if (mousedx > 0 && mousedy > 0) { AxisX.ScaleView.Zoom(x, x + dx); AxisY.ScaleView.Zoom(y, y + dy); } else if (mousedx < 0 && mousedy < 0) { var szx = AxisX.ScaleView.ViewMaximum - AxisX.ScaleView.ViewMinimum; var szy = AxisY.ScaleView.ViewMaximum - AxisY.ScaleView.ViewMinimum; dx = szx * szx / -dx; dy = szy * szy / -dy; x = AxisX.ScaleView.Position + szx / 2 - dx / 2; y = AxisY.ScaleView.Position + szy / 2 - dy / 2; AxisX.ScaleView.Zoom(x, x + dx); AxisY.ScaleView.Zoom(y, y + dy); } else { AxisX.ScaleView.ZoomReset(); AxisY.ScaleView.ZoomReset(); } } if (SelectButton == MouseButtons.Right) { AxisX.ScaleView.Scroll(AxisX.ScaleView.Position - dx); AxisY.ScaleView.Scroll(AxisY.ScaleView.Position + dy); } SelectButton = MouseButtons.None; }
internal void ResetInternal() { Children.Clear(); if (AxisX != null) { AxisX.Reset(); } if (AxisY != null) { AxisY.Reset(); } Axes.Clear(); }
private void SetUpYAxisInput() { AxisY ramAxis = new AxisY(); ramAxis.AxisName = "Input"; ramAxis.Title = "Inputs"; ramAxis.AutoRange = false; ramAxis.MinValue = 0; ramAxis.MaxValue = 2; ramAxis.Step = 1; ramAxis.DefaultLabelFormat = "#VAL"; RadChart1.DefaultView.ChartArea.AdditionalYAxes.Add(ramAxis); }
/// <summary> /// 建立坐标系 /// </summary> public void CreateCoordinate() { switch (CoordinateType)//不同类型的坐标系 { case CoordinateInfoEnum.XY: AxisX.CreateAxis(); AxisY.CreateAxis(); break; default: throw new NotImplementedException(); } }
private void OnChannelRemoved(ChannelToken token) { try { m_chart.BeginUpdate(); var series = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).SingleOrDefault(); if (series != null) { series.Clear(); m_chart.ViewXY.PointLineSeries.Remove(series); } var yAxis = m_chart.ViewXY.YAxes.Where(o => o.Tag == token).SingleOrDefault(); if (yAxis != null) { int firstIndex = m_chart.ViewXY.YAxes.IndexOf(yAxis); m_chart.ViewXY.YAxes.Remove(yAxis); AnnotationXY annotation = m_chart.ViewXY.Annotations[1]; var branches = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); branches.RemoveRange(firstIndex, 2); StringBuilder sb = new StringBuilder(); foreach (var branch in branches) { sb.AppendLine(branch); } annotation.Text = sb.ToString().Trim(); } if (m_chart.ViewXY.YAxes.Count == 0) { m_chart.ViewXY.Annotations.Clear(); AxisY axisYnone = new AxisY(m_chart.ViewXY); axisYnone.Title.Font = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular); axisYnone.AxisThickness = 2; axisYnone.AxisColor = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238); axisYnone.Units.Text = "none"; m_chart.ViewXY.YAxes.Add(axisYnone); } m_chart.EndUpdate(); } catch (Exception ex) { m_chart.EndUpdate(); EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-功率谱密度-删除通道", ex)); } }
public List <AxisCore> MapYAxes(ChartCore chart) { if (AxisY.Count == 0) { AxisY.AddRange(DefaultAxes.DefaultAxis); } return(AxisY.Select(x => { if (x.Parent == null) { chart.View.AddToView(x); } return x.AsCoreElement(Model, AxisTags.Y); }).ToList()); }
// 如果上一次的视图和当前XY轴范围不匹配则取消缩放视图 private void CancelScaleViewIfRangeNotFit(double lastMaxX, double lastMinX, double lastMaxY, double lastMinY) { if (!AxisX.IsZoomed && !AxisY.IsZoomed) { return; } double currentMaxX = AxisX.Maximum; double currentMinX = AxisX.Minimum; double currentMaxY = AxisY.Maximum; double currentMinY = AxisY.Minimum; // double viewMaxX = plotArea.AxisX.ViewMaximum; // double viewMinX = plotArea.AxisX.ViewMinimum; // double viewMaxY = plotArea.AxisY.ViewMaximum; // double viewMinY = plotArea.AxisY.ViewMinimum; // 如果没有重合区域则取消缩放 if (double.IsNaN(lastMaxX) || double.IsNaN(lastMinX) || double.IsNaN(lastMaxY) || double.IsNaN(lastMinY) || double.IsNaN(currentMaxX) || double.IsNaN(currentMinX) || double.IsNaN(currentMaxY) || double.IsNaN(currentMinY) || currentMaxX <= lastMinX || currentMinX >= lastMaxX || currentMaxY <= lastMinY || currentMinY >= lastMaxY) { AxisX.CancelScaleView(); AxisX2.CancelScaleView(); AxisY.CancelScaleView(); AxisY2.CancelScaleView(); } double currentXRange = currentMaxX - currentMinX; double currentYRange = currentMaxY - currentMinY; double lastXRange = lastMaxX - lastMinX; double lastYRange = lastMaxY - lastMinY; double minXRange = currentXRange > lastXRange ? lastXRange : currentXRange; double minYRange = currentYRange > lastYRange ? lastYRange : currentYRange; // 如果X轴范围差比例超过最大维持系数则取消XY轴的缩放 if (Math.Abs(currentXRange - lastXRange) / minXRange > Constants.MaxDiffToKeepXScaleview) { AxisX.CancelScaleView(); AxisX2.CancelScaleView(); AxisY.CancelScaleView(); AxisY2.CancelScaleView(); } // 如果Y轴范围差比例超过最大维持系数则取消Y轴的缩放 else if (Math.Abs(currentYRange - lastYRange) / minYRange > Constants.MaxDiffToKeepYScaleview) { AxisY.CancelScaleView(); AxisY2.CancelScaleView(); } }
private void DisplayChart(DateTime startDate, DateTime endDate) { chartControl1.Cursor = Cursors.Default; _seriesDayKLine.Points.Clear(); chartControl1.Titles[0].Text = ""; string argument = string.Empty; double low, high, open, close; foreach (DataRow row in _KLineData.Rows) { argument = CommonHelper.StringToDateTime(row["TradeDate"].ToString()).ToShortDateString(); high = CommonHelper.StringToDouble(row["High"].ToString().Trim()); low = CommonHelper.StringToDouble(row["Low"].ToString().Trim()); open = CommonHelper.StringToDouble(row["Open"].ToString().Trim()); close = CommonHelper.StringToDouble(row["Close"].ToString().Trim()); SeriesPoint spDayMD = new SeriesPoint(argument, new double[] { low, high, open, close }); _seriesDayKLine.Points.Add(spDayMD); } XYDiagram myDiagram = chartControl1.Diagram as XYDiagram; AxisX myAxisX = myDiagram.AxisX; myAxisX.WholeRange.AutoSideMargins = false; myAxisX.WholeRange.SideMarginsValue = 0.8D; myAxisX.WholeRange.SetMinMaxValues(startDate.ToShortDateString(), endDate.ToShortDateString()); myAxisX.VisualRange.Auto = false; myAxisX.VisualRange.SetMinMaxValues(endDate.AddMonths(-3).ToShortDateString(), endDate.ToShortDateString()); AxisY myAxisY = myDiagram.AxisY; decimal minValueY = _KLineData.AsEnumerable().Select(x => x.Field <decimal>("Low")).Min(); decimal maxValueY = _KLineData.AsEnumerable().Select(x => x.Field <decimal>("High")).Max(); myAxisY.WholeRange.SetMinMaxValues(minValueY - (maxValueY - minValueY) / 10, maxValueY); myAxisY.VisualRange.Auto = false; var currentKLineData = _KLineData.AsEnumerable().Where(x => x.Field <DateTime>("TradeDate") >= endDate.AddMonths(-3) && x.Field <DateTime>("TradeDate") <= endDate); if (currentKLineData.Any()) { decimal curMinValueY = currentKLineData.Select(x => x.Field <decimal>("Low")).Min(); decimal curMaxValueY = currentKLineData.Select(x => x.Field <decimal>("High")).Max(); myAxisY.VisualRange.SetMinMaxValues(curMinValueY - (curMaxValueY - curMinValueY) / 10, curMaxValueY); } }
public Form1() { InitializeComponent(); Vector2 v1 = new Vector2(); Console.WriteLine(v1); Vector2 v2 = new Vector2(1, 2); Console.WriteLine(v2); Vector2 v3 = new Vector2(2, 6); Console.WriteLine(v3); Vector2 v4 = v2 + v3; Console.WriteLine(v4); // 3, 8 Matrix2 m1 = new Matrix2(); Console.WriteLine(m1); // 1, 0, 0, 1 Matrix2 m2 = new Matrix2( 2, 4, -1, 3 ); Console.WriteLine(m2); Console.WriteLine(m1 + m2); // 3, 4, -1, 4 Console.WriteLine(m1 - m2); // -1, -4, 1, -2 Console.WriteLine(m2 * m2); // 0, 20, -5, 5 Console.WriteLine(m2 * v3); // 28, 16 Width = 800; Height = 600; axisX = new AxisX(200); axisY = new AxisY(200); square = new Square(Color.Purple, 100); squareTransformed = new Square(Color.ForestGreen, 50); var transformation = new Matrix3(); transformation.Rotate(25); transformation.Translate(new Vector2(200, 200)); squareTransformed.ApplyMatrix(transformation); }
/// <summary> /// 轉換 PowerLanguage.ChartPoint 為 System.Drawing.Point 座標 /// </summary> /// <param name="layer">Layer 圖層</param> /// <returns>返回值: System.Drawing.Point 陣列</returns> public Point[] ConvertPoints(Layer layer) { AxisX cAxisX = layer.AxisX; AxisY cAxisY = layer.AxisY; int iTop = cAxisY.AxisRectangle.Top; int iLength = __cPoints.Length; Point[] cPoints = new Point[iLength]; for (int i = 0; i < iLength; i++) { ChartPoint cCPoint = __cPoints[i]; cPoints[i] = new Point(cAxisX.ConvertBarNumberToWidth(cCPoint.BarNumber.Value).CenterPoint, iTop + cAxisY.ConvertValueToHeight(cCPoint.Price)); } return(cPoints); }
private void ViewModel_SignalRemoved(SignalToken token) { try { _chart.BeginUpdate(); var series = _chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).SingleOrDefault(); if (series != null) { series.Clear(); _chart.ViewXY.PointLineSeries.Remove(series); } var axisY = _chart.ViewXY.YAxes.Where(o => o.Tag == token).SingleOrDefault(); if (axisY != null) { _chart.ViewXY.YAxes.Remove(axisY); if (_chart.ViewXY.YAxes.Count > 0) { _chart.ViewXY.Annotations[0].AssignYAxisIndex = -1; _chart.ViewXY.Annotations[0].AssignYAxisIndex = 0; AnnotationXY cursorValueDisplay = _chart.ViewXY.Annotations[0]; float fTargetYCoord = _chart.ViewXY.GetMarginsRect().Bottom; double dY; _chart.ViewXY.YAxes[0].CoordToValue(fTargetYCoord, out dY); cursorValueDisplay.TargetAxisValues.Y = dY; } else { AxisY axisYnone = new AxisY(_chart.ViewXY); axisYnone.Title.Font = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular); axisYnone.AxisThickness = 2; axisYnone.AxisColor = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238); axisYnone.Units.Text = "none"; _chart.ViewXY.YAxes.Add(axisYnone); } } _chart.EndUpdate(); } catch (Exception ex) { EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("趋势趋势-移除信号", ex)); _chart.EndUpdate(); } }
private void Testme_Click(object sender, RoutedEventArgs e) { NBDataReader reader = new NBDataReader(); List <NBDataItem> items = reader.GetDataItems(); MessageBox.Show(items.Count.ToString()); VM.ChartPointCollection = new System.Collections.ObjectModel.ObservableCollection <NBDataItem>(items); //Initialize chart myChart.BeginUpdate(); //Get XY view ViewXY chartView = myChart.ViewXY; //Get default x-axis and set the range and ValueType AxisX axisX = chartView.XAxes[0]; axisX.SetRange((double)items.Min(x => x.TimeStamp), (double)items.Max(x => x.TimeStamp)); axisX.ValueType = AxisValueType.Number; //Get default y-axis and set the range. AxisY axisY = chartView.YAxes[0]; axisY.SetRange((double)items.Min(x => x.Channels.Min()), (double)items.Max(x => x.Channels.Max())); //Add point line series for (int i = 0; i < reader.Channels; i++) { PointLineSeries pls = new PointLineSeries(chartView, axisX, axisY); pls.PointsVisible = false; SeriesPoint[] aPoints = new SeriesPoint[items.Count]; for (int iPoint = 0; iPoint < items.Count; iPoint++) { aPoints[iPoint].X = items[iPoint].TimeStamp; aPoints[iPoint].Y = items[iPoint].Channels[i]; } //Assign the data for the point line series pls.Points = aPoints; pls.Title = new Arction.WPF.LightningChartUltimate.Titles.SeriesTitle(); pls.Title.Text = "CHANNEL " + i; //Add series to the PointLineSeries container in the view chartView.PointLineSeries.Add(pls); } //Apply chart property changes, which causes chart to be painted myChart.EndUpdate(); MessageBox.Show("OK"); }
private void ChartOnMouseDown(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Right) { return; } try { StartMousePosition = new PointD( AxisX.PixelPositionToValue(e.X), AxisY.PixelPositionToValue(e.Y)); IsChartScroll = true; } catch (ArgumentException) { IsChartScroll = false; } }
private bool SolveValueAccurate(PointLineSeries series, double xValue, out double yValue) { AxisY axisY = _chart.ViewXY.YAxes[series.AssignYAxisIndex]; yValue = 0; LineSeriesValueSolveResult lssvs = series.SolveYValueAtXValue(xValue); if (lssvs.SolveStatus == LineSeriesSolveStatus.OK) { //PointLineSeries may have two or more points at same X value. If so, center it between min and max yValue = (lssvs.YMax + lssvs.YMin) / 2.0; return(true); } else { return(false); } }
/// <summary> /// 繪製 AxisY 座標軸 /// </summary> /// <param name="axis">AxisY 座標軸</param> /// <param name="property">Chart 屬性參數</param> public override void DrawAxisY(AxisY axis, ChartProperty property) { uint uPattern = 0xaaaaaaaa; //格線樣式(Gdi.cs 內的 SelectPen 方法有定義格式, 格式皆由 Plugin 設計者自由規劃) int iOldBKColor = __cGDI.SelectBackground(property.BackgroundColor); IntPtr cOldPen = __cGDI.SelectPen(new PowerLanguage.PenStyle(property.GridColor, 1, (int)uPattern)); IntPtr cGridPen = __cGDI.SelectPen(new PowerLanguage.PenStyle(property.AxisColor, 1)); IntPtr cOldFont = __cGDI.SelectFont(property.AxisFont); int iFontHeight = axis.FontMetrics.Height; List <double> cAxises = axis.CalculateAxisScale(); Rectangle cRect = axis.AxisRectangle; __cGDI.FillRectangle(property.BackgroundColor, cRect.Left, cRect.Top, cRect.Width, cRect.Height); __cGDI.DrawRectangle(cRect.Left, cRect.Top, cRect.Width, cRect.Height); int iCount = cAxises.Count; for (int i = 0; i < iCount; i++) { double dValue = cAxises[i]; int iHeight = axis.ConvertValueToHeight(dValue); if (iHeight + iFontHeight + 2 < cRect.Height) { int iAbsHeight = cRect.Top + iHeight; __cGDI.DrawLine(cRect.Left, iAbsHeight, cRect.Left + 5, iAbsHeight); __cGDI.DrawString(dValue.ToString(), property.ForeColor, cRect.Left + 5, iAbsHeight + 2); if (property.IsShowGrid) { //繪製格線(因為 AxisY 軸在最右方, 格線往左延伸即可) IntPtr cAxisPen = __cGDI.SelectPen(cGridPen); __cGDI.DrawLine(0, iAbsHeight, cRect.Left, iAbsHeight); __cGDI.SelectPen(cAxisPen); } } } __cGDI.RemoveObject(cGridPen); __cGDI.RemoveObject(__cGDI.SelectPen(cOldPen)); __cGDI.RemoveObject(__cGDI.SelectFont(cOldFont)); __cGDI.SelectBackground(iOldBKColor); }
private void InitializeChart() { this.RadChart1.LayoutUpdated += this.RadChart1_LayoutUpdated; var seriesMapping = GetLineSeries(); RadChart1.SeriesMappings.Add(seriesMapping); RadChart1.Background = new SolidColorBrush(Colors.Transparent); RadChart1.DefaultView.ChartLegend.Visibility = Visibility.Collapsed; RadChart1.DefaultView.ChartArea.Padding= new Thickness(0); AxisX axisX = new AxisX() { AutoRange = false, IsDateTime = true, Visibility = Visibility.Collapsed, MinValue = DateTime.Today.AddDays(-1).ToOADate(), MaxValue = DateTime.Today.AddDays(1).ToOADate() }; RadChart1.DefaultView.ChartArea.AxisX = axisX; AxisY axisY = new AxisY() { AutoRange = false, IsZeroBased = true, Visibility = Visibility.Collapsed, MinValue = 0, MaxValue = 4, StripLinesVisibility = Visibility.Collapsed }; RadChart1.DefaultView.ChartArea.AxisY = axisY; RadChart1.ItemsSource = GetData(); }