corelibraries-devexpress-dot-xtracharts-25d8812b.md
Represents an object that contains descriptive information about a geometrical point within the diagram.
Namespace : DevExpress.XtraCharts
Assembly : DevExpress.XtraCharts.v25.2.dll
NuGet Package : DevExpress.Charts
[RuntimeObject]
public sealed class DiagramCoordinates
<RuntimeObject>
Public NotInheritable Class DiagramCoordinates
The following members return DiagramCoordinates objects:
The DiagramCoordinates class contains the argument and value (as well as their scale types) of the series point to which the geometrical point corresponds.
An object of the DiagramCoordinates type is returned by the XYDiagram2D.PointToDiagram and RadarDiagram.PointToDiagram methods.
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;
}
}
}
}
Imports System
Imports System.Windows.Forms
Imports DevExpress.XtraCharts
Namespace InteractiveConstantLine
Partial Public Class Form1
Inherits Form
Public Sub New()
InitializeComponent()
End Sub
Private defCursor As Cursor
Private dragging As Boolean = False
Private chart As ChartControl
Private diagram As XYDiagram
Private line As ConstantLine
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
Me.chart = Me.chartControl1
Me.diagram = TryCast(Me.chart.Diagram, XYDiagram)
Me.line = Me.diagram.AxisX.ConstantLines.GetConstantLineByName("ConstantLine1")
' Add a title to the chart.
Dim chartTitle1 As New ChartTitle()
chartTitle1.Text = "Drag the constant line..."
Me.chart.Titles.Add(chartTitle1)
End Sub
Private Sub chartControl1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles chartControl1.MouseDown
If diagram Is Nothing Then
Return
End If
' Get the information about the clicked point.
Dim coords As DiagramCoordinates = diagram.PointToDiagram(e.Location)
' If the point is within the diagram and in the constant line ...
If (Not coords.IsEmpty) AndAlso TypeOf line.AxisValue Is Date AndAlso coords.DateTimeArgument.Equals(CDate(line.AxisValue)) Then
' Allow dragging, catch the mouse and change the cursor.
dragging = True
chart.Capture = True
SetCursor()
End If
End Sub
Private Sub chartControl1_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles chartControl1.MouseUp
dragging = False
chart.Capture = False
End Sub
Private Sub chartControl1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles chartControl1.MouseMove
If diagram Is Nothing Then
Return
End If
If dragging AndAlso (e.Button And MouseButtons.Left) = 0 Then
dragging = False
chart.Capture = False
End If
Dim coords As DiagramCoordinates = diagram.PointToDiagram(e.Location)
If coords.IsEmpty Then
RestoreCursor()
Else
If dragging Then
line.AxisValue = coords.DateTimeArgument
End If
If TypeOf line.AxisValue Is Date AndAlso coords.DateTimeArgument.Equals(CDate(line.AxisValue)) Then
SetCursor()
Else
RestoreCursor()
End If
End If
End Sub
Private Sub SetCursor()
If defCursor Is Nothing Then
defCursor = Cursor.Current
End If
Cursor.Current = Cursors.VSplit
End Sub
Private Sub RestoreCursor()
If defCursor IsNot Nothing Then
Cursor.Current = defCursor
defCursor = Nothing
End If
End Sub
End Class
End Namespace
Object DiagramCoordinates
See Also