|
private void XySegmentDraggingBase_OnDragStart(object sender, ChartDragStartEventArgs e)
{
//Only dots are moveable
e.Cancel = !(string.Equals(e.BaseXValue.ToString(), "0")
|| string.Equals(e.BaseXValue.ToString(), "10")
|| string.Equals(e.BaseXValue.ToString(), "20")
|| string.Equals(e.BaseXValue.ToString(), "30")
|| string.Equals(e.BaseXValue.ToString(), "40")
|| string.Equals(e.BaseXValue.ToString(), "50")
|| string.Equals(e.BaseXValue.ToString(), "60")
|| string.Equals(e.BaseXValue.ToString(), "70")
|| string.Equals(e.BaseXValue.ToString(), "80")
|| string.Equals(e.BaseXValue.ToString(), "90")
|| string.Equals(e.BaseXValue.ToString(), "100")
);
foreach (SplineSegment segment in splineSeries.SeriesSegments)
{
var intermediatePoint1 = chart.PointToValue(chart.PrimaryAxis, segment.Q1);
var intermediatePoint2 = chart.PointToValue(chart.PrimaryAxis, segment.Q2);
}
} |
|
<charts:SfChart.PrimaryAxis>
<charts:NumericalAxis RangePadding="Additional"
Header="Growth(In Years)"
AxisLineStyle="{StaticResource axisStyle1}"
MajorTickLineStyle="{StaticResource axisStyle}"/>
</charts:SfChart.PrimaryAxis> |
|
private ObservableCollection<SalesAnalysisModel> GetRandomData()
{
ObservableCollection<SalesAnalysisModel> datas = new ObservableCollection<SalesAnalysisModel>();
datas.Add(new SalesAnalysisModel(0, 824));
datas.Add(new SalesAnalysisModel(10, 1057));
datas.Add(new SalesAnalysisModel(20, 1319));
datas.Add(new SalesAnalysisModel(30, 1764));
datas.Add(new SalesAnalysisModel(40, 2544));
datas.Add(new SalesAnalysisModel(50, 3813));
datas.Add(new SalesAnalysisModel(60, 5725));
datas.Add(new SalesAnalysisModel(70, 8432));
datas.Add(new SalesAnalysisModel(80, 12088));
return datas;
} |
|
public partial class MainWindow
{
…
private void XySegmentDraggingBase_OnDragStart(object sender, ChartDragStartEventArgs e)
{
//Only dots are moveable
…
foreach (SplineSegment segment in splineSeries.SeriesSegments)
{
var intermediatePoint1 = chart.PointToValue(chart.PrimaryAxis, segment.Q1);
var intermediatePoint2 = chart.PointToValue(chart.PrimaryAxis, segment.Q2);
var middleXValue = segment.X1 + Math.Abs(segment.X2 - segment.X1) / 2;
var middleYValue = segment.Y1 + Math.Abs(segment.Y2 - segment.Y1) / 2; }
}
}
|
|
public partial class MainWindow
{
private void XySegmentDraggingBase_OnDragStart(object sender, ChartDragStartEventArgs e)
{
…
foreach (SplineSegment segment in splineSeries.SeriesSegments)
{
var q1X = chart.PointToValue(chart.PrimaryAxis, segment.Q1);
var q2X = chart.PointToValue(chart.PrimaryAxis, segment.Q2);
var q1Y = chart.PointToValue (chart.SecondaryAxis, segment.Q1);
var q2Y = chart.PointToValue(chart.SecondaryAxis, segment.Q2);
var point = GetMiddleBezierPoint(new Point(q1X,q1Y), new Point(q2X,q2Y), new ChartPoint(segment.X1, segment.Y1),
new ChartPoint(segment.X2, segment.Y2));
TextBox_1.AppendText("X-value: " + point.X.ToString() + ", " + "Y-value: " + point.Y.ToString() + Environment.NewLine);
}
}
private ChartPoint GetMiddleBezierPoint(Point q1, Point q2, ChartPoint point1, ChartPoint point2)
{
const double One_half = 1 / 2.0d;
double x1 = point1.X + Math.Abs(point2.X - point1.X) / 2;
double y1 = (1 - One_half) * (1 - One_half) * (1 - One_half) * point1.Y + 3 * (1 - One_half) * (1 - One_half) * One_half * q1.Y + 3 * (1 - One_half) * One_half * One_half * q2.Y + (One_half * One_half * One_half) * point2.Y;
var controlPoint1 = new ChartPoint(x1, y1);
return controlPoint1;
}
} |
Hi Ivan,We have analyzed your requirement of getting intermediate values and you can achieve this by using segment properties X1,X2,Y1 and Y2 values as per the below code snippet.Code Snippet
public partial class MainWindow{…private void XySegmentDraggingBase_OnDragStart(object sender, ChartDragStartEventArgs e){//Only dots are moveable…foreach (SplineSegment segment in splineSeries.SeriesSegments){var intermediatePoint1 = chart.PointToValue(chart.PrimaryAxis, segment.Q1);var intermediatePoint2 = chart.PointToValue(chart.PrimaryAxis, segment.Q2);var middleXValue = segment.X1 + Math.Abs(segment.X2 - segment.X1) / 2;var middleYValue = segment.Y1 + Math.Abs(segment.Y2 - segment.Y1) / 2; }}}We have modified our sample based on this, please find the sample from the following location.Please let us know if you have any queries.Regards,
Samuel
|
private void XySegmentDraggingBase_OnDragStart(object sender, ChartDragStartEventArgs e)
{
…
foreach (Syncfusion.UI.Xaml.Charts.LineSegment segment in lineSeries.SeriesSegments)
{
var middleXValue = segment.X1Value + Math.Abs(segment.X2Value - segment.X1Value) / 2;
var middleYValue = segment.Y1Value + Math.Abs(segment.Y2Value - segment.Y1Value) / 2;
}
}
|
|
private void AddDataButton_Click(object sender, RoutedEventArgs e)
{
var model = new Model() { XValue = counter * 10, YValue = random.Next(100, 150) };
var dataSource = (this.LineSeries1.ItemsSource as ObservableCollection<Model>);
dataSource.Add(model);
counter++;
}
|
|
private void ChangeDataButton_Click(object sender, RoutedEventArgs e)
{
var model = new Model() { XValue = 10, YValue = random.Next(100, 150) };
var dataSource = (this.LineSeries1.ItemsSource as ObservableCollection<Model>);
dataSource[0] = model;
}
|
|
<chart:SfChart Margin="20">
…
<chart:LineSeries XBindingPath="XValue"
YBindingPath="YValue"
ItemsSource="{Binding Data}"
x:Name="LineSeries1"
ListenPropertyChange="True"/>
</chart:SfChart>
|
|
public class Model : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private double yValue { get; set; }
…
public double YValue
{
get
{
return yValue;
}
set
{
yValue = value;
OnPropertyChanged("YValue");
}
}
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if(handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
|
|
private void ChangeValueButton_Click(object sender, RoutedEventArgs e)
{
var dataSource = (this.LineSeries1.ItemsSource as ObservableCollection<Model>);
dataSource[2].YValue = random.Next(100,150);
}
|