XYDiagram2D.PointToDiagram(Point) Method

Converts the chart control screen point's coordinates (in pixels) into an XY-Diagram plot area coordinates object.

Namespace: DevExpress.XtraCharts

Assembly: DevExpress.XtraCharts.v19.2.dll

Declaration

public DiagramCoordinates PointToDiagram(
    Point p
)
Public Function PointToDiagram(
    p As Point
) As DiagramCoordinates

Parameters

Name Type Description
p Point

A point within the Chart Control's area.

Returns

Type Description
DiagramCoordinates

An object that contains information about the point's argument and value, their scale types, associated axes and pane.

Remarks

Use the PointToDiagram method to convert a chart control screen point's coordinates that are indexed from its upper-left corner and measured in pixels to the diagram coordinates in axis measurement units.

To convert a screen coordinate point to a point with chart coordinates, use the ChartControl.PointToClient method.

private void chartControl_MouseMove(object sender, MouseEventArgs e) {
    DiagramCoordinates coords = ((XYDiagram2D)chartControl.Diagram).PointToDiagram(chartControl.PointToClient(Cursor.Position));
    label.Text = string.Format("X:{0}, Y:{1}", coords.NumericalArgument, coords.NumericalValue);
}
NOTE

Use the XYDiagram2D.DiagramToPoint method to convert diagram coordinates to chart coordinates with an overload appropriate to your axes' scale types.

With the Radar and Polar diagram types, use the RadarDiagram.PointToDiagram and RadarDiagram.DiagramToPoint methods.

Examples

The following example illustrates use of XYDiagram2D.PointToDiagram method for dragging the constant line with the mouse, and changing the series point values accordingly.

using System;
using System.Windows.Forms;
using DevExpress.XtraCharts;

namespace InteractiveConstantLine {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        Cursor defCursor;
        bool dragging = false;
        ChartControl chart;
        XYDiagram diagram;
        ConstantLine line;

        private void Form1_Load(object sender, EventArgs e) {
            this.chart = this.chartControl1;
            this.diagram = this.chart.Diagram as XYDiagram;
            this.line = this.diagram.AxisX.ConstantLines.GetConstantLineByName("ConstantLine1");

            // Add a title to the chart.
            ChartTitle chartTitle1 = new ChartTitle();
            chartTitle1.Text = "Drag the constant line...";
            this.chart.Titles.Add(chartTitle1);

        }

        private void chartControl1_MouseDown(object sender, MouseEventArgs e) {
            if (diagram == null)
                return;

            // Get the information about the clicked point.
            DiagramCoordinates coords = diagram.PointToDiagram(e.Location);

            // If the point is within the diagram and in the constant line ...
            if (!coords.IsEmpty && line.AxisValue is DateTime &&
                coords.DateTimeArgument.Equals((DateTime)line.AxisValue)) {

                // Allow dragging, catch the mouse and change the cursor.
                dragging = true;
                chart.Capture = true;
                SetCursor();
            }
        }

        private void chartControl1_MouseUp(object sender, MouseEventArgs e) {
            dragging = false;
            chart.Capture = false;
        }

        private void chartControl1_MouseMove(object sender, MouseEventArgs e) {
            if (diagram == null)
                return;

            if (dragging && (e.Button & MouseButtons.Left) == 0) {
                dragging = false;
                chart.Capture = false;
            }

            DiagramCoordinates coords = diagram.PointToDiagram(e.Location);
            if (coords.IsEmpty)
                RestoreCursor();
            else {
                if (dragging)
                    line.AxisValue = coords.DateTimeArgument;

                if (line.AxisValue is DateTime && coords.DateTimeArgument.Equals((DateTime)line.AxisValue))
                    SetCursor();
                else
                    RestoreCursor();
            }
        }
        void SetCursor() {
            if (defCursor == null)
                defCursor = Cursor.Current;
            Cursor.Current = Cursors.VSplit;
        }

        void RestoreCursor() {
            if (defCursor != null) {
                Cursor.Current = defCursor;
                defCursor = null;
            }
        }

    }
}
See Also