Beispiel #1
0
        /// <summary>
        /// Handles drawing a vertical arrow pointing up on the screen
        /// </summary>
        /// <param name="arrowPoint">the location of the tip of the arrow</param>
        public void DrawArrow(PointF arrowPoint, PaintEventArgs e)
        {
            const int penThickness = 7;
            bool      Draw         = true;

            if (arrowPoint.X > GraphPane.XAxis.Scale.Max || arrowPoint.X < GraphPane.XAxis.Scale.Min ||
                arrowPoint.Y > GraphPane.YAxis.Scale.Max || arrowPoint.Y < GraphPane.YAxis.Scale.Min)
            {
                Draw = false;
            }

            if (Draw)
            {
                Graphics g         = e.Graphics;
                PointF   drawPoint = GraphPane.GeneralTransform(arrowPoint, CoordType.AxisXYScale);

                g.SmoothingMode = SmoothingMode.AntiAlias;

                Pen p = new Pen(Color.Black, penThickness);
                p.StartCap = LineCap.Square;
                p.EndCap   = LineCap.ArrowAnchor;

                //These are the coordinates on the screen of where the arrow will start and End
                Point pointStart = new Point((int)(drawPoint.X + .5), (int)(drawPoint.Y + 20.5));
                Point pointEnd   = new Point((int)(drawPoint.X + .5), (int)(drawPoint.Y + .5));

                g.DrawLine(p, pointStart, pointEnd);

                g.DrawString(arrowPoint.X.ToString("0.0"), new Font(FontFamily.GenericSerif, 8), Brushes.Black, new PointF(pointStart.X - penThickness, pointStart.Y + 3));
                //p.Dispose();
            }
        }
Beispiel #2
0
        /// <summary>
        /// Обработчик события нажатия на кнопку мыши
        /// </summary>
        /// <returns>Метод возвращает true, если нужно запретить дальнейшую встроенную обработку события (показ контекстного меню, начало выделения и т.п.), и false, если обработка события должна быть продолжена</returns>
        bool zedGraph_MouseDownEvent(ZedGraphControl sender, MouseEventArgs e)
        {
            GraphPane pane = zedGraph.GraphPane;

            // Координаты, которые переданы в событие
            Point eventPoint = new Point(e.X, e.Y);

            eventCoord.Text = string.Format("({0}; {1})", eventPoint.X, eventPoint.Y);

            // Координаты, пересчитанные в систему координат графика
            double graphX, graphY;

            // Пересчитать координаты из системы координат, связанной с контролом zedGraph
            // в систему координат, связанную с графиком
            pane.ReverseTransform(new PointF(e.X, e.Y), out graphX, out graphY);
            graphCoord.Text = string.Format("({0:F3}; {1:F3})", graphX, graphY);

            // Пересчитаем в обратную сторону из системы координат графика
            // в систему координат контрола.
            // Должны получить те же значения, что и в eventPoint
            // (с точностью до погрешности округления)
            // Последний параметр CoordType.AxisXYScale обозначает,
            // в какой системе координат заданы координаты, переданные в первых двух параметрах.
            PointF controlPoint = pane.GeneralTransform(new PointF((float)graphX,
                                                                   (float)graphY),
                                                        CoordType.AxisXYScale);

            controlCoord.Text = string.Format("({0}; {1})", controlPoint.X, controlPoint.Y);

            return(false);
        }
        /// <summary>
        /// 获取指定坐标点的速度值
        /// </summary>
        /// <param name="x"></param>
        /// <param name="z"></param>
        /// <returns>返回速度值</returns>
        private float GetV(int x, int z)
        {
            float     v               = 0;
            GraphPane myPane          = zedGraphControl.GraphPane;
            PointF    pointF          = myPane.GeneralTransform(x, z, CoordType.AxisXYScale);
            PointF    pointXYAxis_Min = zedGraphControl.GraphPane.GeneralTransform(myPane.XAxis.Scale.Min, myPane.YAxis.Scale.Min, CoordType.AxisXYScale);
            PointF    pointXYAxis_Max = zedGraphControl.GraphPane.GeneralTransform(myPane.XAxis.Scale.Max, myPane.YAxis.Scale.Max, CoordType.AxisXYScale);

            //if ((pointF.X - pointXYAxis_Min.X) < 3 || (pointF.Y - pointXYAxis_Min.Y) < 3)
            //{
            //    pointF.X += 10;
            //    pointF.Y += 10;
            //}
            // 如果点在Y轴上
            if (pointF.X == pointXYAxis_Min.X)
            {
                pointF.X += 10;
            }
            // 如果点在X轴上
            if (pointF.Y == pointXYAxis_Min.Y)
            {
                pointF.Y += 10;
            }
            Color color = GetColor((int)pointF.X, (int)pointF.Y);

            for (int i = 0; i < rockFormations.Count; i++)
            {
                if (rockFormations[i].Color.ToArgb() == color.ToArgb())
                {
                    v = float.Parse(rockFormations[i].Speed);
                    break;
                }
                if (LineColor.ToArgb() == color.ToArgb())
                {
                    if (rockFormations[i].Color.ToArgb() == GetColor((int)pointF.X + 2, ((int)pointF.Y + 2)).ToArgb())
                    {
                        v = float.Parse(rockFormations[i].Speed);
                        break;
                    }
                }
                if (AxisColor.ToArgb() == color.ToArgb())
                {
                    if (rockFormations[i].Color.ToArgb() == GetColor((int)pointF.X + 10, ((int)pointF.Y + 10)).ToArgb())
                    {
                        v = float.Parse(rockFormations[i].Speed);
                        break;
                    }
                }
                if (backColor.ToArgb() == color.ToArgb())
                {
                    v = -1;
                }
            }
            return(v);
        }
Beispiel #4
0
        private void setAxisEqualScale()
        {
            GraphPane pane = zedGraph.GraphPane;

            double Xmin = pane.XAxis.Scale.Min;
            double Xmax = pane.XAxis.Scale.Max;

            double Ymin = pane.YAxis.Scale.Min;
            double Ymax = pane.YAxis.Scale.Max;

            PointF PointMin = pane.GeneralTransform(Xmin, Ymin, CoordType.AxisXYScale);
            PointF PointMax = pane.GeneralTransform(Xmax, Ymax, CoordType.AxisXYScale);
            double dX       = Math.Abs(Xmax - Xmin);
            double dY       = Math.Abs(Ymax - Ymin);

            double Kx = dX / Math.Abs(PointMax.X - PointMin.X);
            double Ky = dY / Math.Abs(PointMax.Y - PointMin.Y);

            double K = Kx / Ky;

            //MessageBox.Show(K.ToString());
            if (K > 1.0)
            {
                pane.YAxis.Scale.Min = pane.YAxis.Scale.Min - dY * (K - 1.0) / 2.0;
                pane.YAxis.Scale.Max = pane.YAxis.Scale.Max + dY * (K - 1.0) / 2.0;
            }
            else
            {
                K = 1.0 / K;
                pane.XAxis.Scale.Min = pane.XAxis.Scale.Min - dX * (K - 1.0) / 2.0;
                pane.XAxis.Scale.Max = pane.XAxis.Scale.Max + dX * (K - 1.0) / 2.0;
            }

            // Обновим данные об осях
            zedGraph.AxisChange();
            // Обновляем график
            zedGraph.Invalidate();
        }
        private void xxxGraph_KeyUp(object sender, KeyEventArgs e)
        {
            ZedGraphControl zgc  = (ZedGraphControl)sender;
            GraphPane       pane = zgc.GraphPane;

            double xaxis_min = volatility_xaxis_min;
            double xaxis_max = volatility_xaxis_max;
            double xaxis_maj = volatility_xaxis_maj;
            double xaxis_mor = volatility_xaxis_mor;
            double yaxis_min = volatility_yaxis_min;
            double yaxis_max = volatility_yaxis_max;
            double yaxis_maj = volatility_yaxis_maj;
            double yaxis_mor = volatility_yaxis_mor;

            switch (e.KeyCode)
            {
            case Keys.Up:
                pane.YAxis.Scale.Min += pane.YAxis.Scale.MajorStep;
                pane.YAxis.Scale.Max += pane.YAxis.Scale.MajorStep;
                xxxGraph_ZoomEvent(zgc, null, null);
                break;

            case Keys.Down:
                if (pane.YAxis.Scale.Min > pane.YAxis.Scale.MajorStep)
                {
                    pane.YAxis.Scale.Max -= pane.YAxis.Scale.MajorStep;
                    pane.YAxis.Scale.Min -= pane.YAxis.Scale.MajorStep;
                }
                else
                {
                    pane.YAxis.Scale.Max -= pane.YAxis.Scale.Min;
                    pane.YAxis.Scale.Min  = 0;
                }
                xxxGraph_ZoomEvent(zgc, null, null);
                break;

            case Keys.Left:
                if (pane.XAxis.Scale.Min > pane.XAxis.Scale.MajorStep)
                {
                    pane.XAxis.Scale.Max -= pane.XAxis.Scale.MajorStep;
                    pane.XAxis.Scale.Min -= pane.XAxis.Scale.MajorStep;
                }
                else
                {
                    pane.XAxis.Scale.Max -= pane.XAxis.Scale.Min;
                    pane.XAxis.Scale.Min  = 0;
                }
                xxxGraph_ZoomEvent(zgc, null, null);
                break;

            case Keys.Right:
                if (pane.XAxis.Scale.Max + pane.XAxis.Scale.MajorStep < xaxis_max)
                {
                    pane.XAxis.Scale.Min += pane.XAxis.Scale.MajorStep;
                    pane.XAxis.Scale.Max += pane.XAxis.Scale.MajorStep;
                }
                else
                {
                    pane.XAxis.Scale.Min += xaxis_max - pane.XAxis.Scale.Max;
                    pane.XAxis.Scale.Max  = xaxis_max;
                }
                xxxGraph_ZoomEvent(zgc, null, null);
                break;

            case Keys.PageUp:
            case Keys.PageDown:
                PointF centerP = pane.GeneralTransform((pane.XAxis.Scale.Min + pane.XAxis.Scale.Max) / 2, (pane.YAxis.Scale.Min + pane.YAxis.Scale.Max) / 2, CoordType.AxisXYScale);
                zgc.ZoomPane(pane, (1 + (e.KeyCode == Keys.PageUp ? 1.0 : -1.0) * zgc.ZoomStepFraction), centerP, true);
                if (pane.XAxis.Scale.Min < 0)
                {
                    pane.XAxis.Scale.Min = 0;
                }
                if (pane.XAxis.Scale.Max > xaxis_max)
                {
                    pane.XAxis.Scale.Max = xaxis_max;
                }
                if (pane.YAxis.Scale.Min < 0)
                {
                    pane.YAxis.Scale.Min = 0;
                }
                xxxGraph_ZoomEvent(zgc, null, null);
                break;

            case Keys.Space:
                xxxGraph_ScaleToDefault(sender, null);
                xxxGraph_ZoomEvent(zgc, null, null);
                break;
            }
        }
Beispiel #6
0
 public PointF TransformCoordinates(double x, double y, CoordType coordType = CoordType.AxisXYScale)
 {
     return(GraphPane.GeneralTransform(new PointF((float)x, (float)y), coordType));
 }