Exemplo n.º 1
0
 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)));
     }
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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());
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        /// <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";
        }
Exemplo n.º 8
0
        /// <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");
        }
Exemplo n.º 9
0
        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());
        }
Exemplo n.º 10
0
        /// <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;
        }
Exemplo n.º 12
0
        // 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();
            }
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
 /// <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();
 }
Exemplo n.º 15
0
        /// <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);
        }
Exemplo n.º 16
0
        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;
        }
Exemplo n.º 17
0
 internal void ResetInternal()
 {
     Children.Clear();
     if (AxisX != null)
     {
         AxisX.Reset();
     }
     if (AxisY != null)
     {
         AxisY.Reset();
     }
     Axes.Clear();
 }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
        /// <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));
            }
        }
Exemplo n.º 21
0
 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());
 }
Exemplo n.º 22
0
        // 如果上一次的视图和当前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();
            }
        }
Exemplo n.º 23
0
        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);
            }
        }
Exemplo n.º 24
0
        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);
        }
Exemplo n.º 25
0
        /// <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);
        }
Exemplo n.º 26
0
        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();
            }
        }
Exemplo n.º 27
0
        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");
        }
Exemplo n.º 28
0
 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;
     }
 }
Exemplo n.º 29
0
        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);
            }
        }
Exemplo n.º 30
0
        /// <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);
        }
Exemplo n.º 31
0
        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();
        }