Profile Picture

OnDataZoom event for NChartControl

Posted By Manal Goyal 6 Years Ago
Author
Message
Manal Goyal
Question Posted 6 Years Ago
View Quick Profile
Forum Member

Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)

Group: Forum Members
Last Active: 5 Years Ago
Posts: 29, Visits: 405
Hi Team,
I am using zoom for both WPF(NChartControl) and Web application(NThinChartControl). Initially I have scale breaks in my chart with zooming enabled, as soon as user zoom into the chart I want to clear scale breaks, I found a way to do that for NThinChartControl in Nevron.Chart.ThinWeb.NDataZoomTool, I set DataZoomCallback and then in OnDataZoom method I have logic to clear scale breaks.

I wanted to know is it possible to have this functionality in NChartControl? Is there any other workaround to achieve what I want to achieve?

Thanks and regards
Manal


Nevron Support
Posted 6 Years Ago
View Quick Profile
Supreme Being

Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)

Group: Forum Members
Last Active: Last Week
Posts: 3,054, Visits: 4,009
Hi Manal,
You can achieve that by intercepting the EndDrag event - the following code shows how to do that:

  private void Form1_Load(object sender, EventArgs e)
  {
   NCartesianChart chart = (NCartesianChart)nChartControl1.Charts[0];
   chart.RangeSelections.Add(new NRangeSelection());

   NBarSeries bar = new NBarSeries();

   bar.Values.Add(10);
   bar.Values.Add(20);
   bar.Values.Add(30);
   bar.Values.Add(40);

   chart.Series.Add(bar);

   nChartControl1.Controller.Tools.Add(new NPanelSelectorTool());

   NDataZoomTool dataZoomTool = new NDataZoomTool();
   dataZoomTool.EndDrag += DataZoomTool_EndDrag;
   nChartControl1.Controller.Tools.Add(dataZoomTool);
  }

  private void DataZoomTool_EndDrag(object sender, EventArgs e)
  {
   MessageBox.Show("End drag");
  }

Hope this helps - let us know if you have any questions or meet any problems.


Best Regards,
Nevron Support Team



Manal Goyal
Posted 6 Years Ago
View Quick Profile
Forum Member

Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)

Group: Forum Members
Last Active: 5 Years Ago
Posts: 29, Visits: 405
Thanks, that worked for me,

I have one more question on this, when I try to zoom out of the chart I have to do it multiple times to get back to the orignal chart, is there any way I can zoom out on a single right to left mouse motion?


Nevron Support
Posted 6 Years Ago
View Quick Profile
Supreme Being

Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)

Group: Forum Members
Last Active: Last Week
Posts: 3,054, Visits: 4,009
Hi Manal,

Yes you need to set the ZoomOutResetAxis to false- for example:

NRangeSelection rangeSelection = new NRangeSelection();
rangeSelection.ZoomOutResetsAxis = true;
chart.RangeSelections.Add(rangeSelection);

Let us know if you meet any problems or have any questions.


Best Regards,
Nevron Support Team



Manal Goyal
Posted 6 Years Ago
View Quick Profile
Forum Member

Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)

Group: Forum Members
Last Active: 5 Years Ago
Posts: 29, Visits: 405
Hi Team,

Thank you for the solution, it worked for me. However I have one more thing to ask, while dragiing the mouse to zoom in, it shows a horizontal black line for the range on the axis that will be selected to zoom in. Is there any way I can get the pan like zooming that I have for web forms application.

Thanks
Manla


Nevron Support
Posted 6 Years Ago
View Quick Profile
Supreme Being

Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)

Group: Forum Members
Last Active: Last Week
Posts: 3,054, Visits: 4,009
Hi Manal,

We're not sure what is the problem - do you want to disable the range selection border? In this case you can turn off the ZoomInBorderStyle and ZoomOutBorderStyle:

   NDataZoomTool dataZoomTool = new NDataZoomTool();
   dataZoomTool.ZoomInBorderStyle.Width = new NLength(0);
   dataZoomTool.ZoomOutBorderStyle.Width = new NLength(0);
   nChartControl1.Controller.Tools.Add(dataZoomTool);

If that is not problem - can you send a screenshot of the problem along with the code that configures the control?



Best Regards,
Nevron Support Team



Manal Goyal
Posted 6 Years Ago
View Quick Profile
Forum Member

Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)

Group: Forum Members
Last Active: 5 Years Ago
Posts: 29, Visits: 405
Please find attached snaps describing my problem.

In the sample nevron app I found this nice rectangle that clearly shows the area I want to zoom in, which looks very good. I want something like that.




This is the code snippet that I have in my application to achieve zooming.


    var chartPlotter = new ChartPlotter(new NevronVisualEntityFactory());
    IScene scene = chartPlotter.CreateMeasuredDeviationsChart(deviations, measurementTime, correctionEvents);

    scene.Render(nChartControl);

    var chart = nChartControl.Charts[0];

    NRangeSelection rangeSelection = new NRangeSelection();
    rangeSelection.VerticalValueSnapper = new NAxisRulerMinMaxSnapper();
    ((NCartesianChart)chart).RangeSelections.Add(rangeSelection);
    
    nChartControl.Controller.Tools.Add(new NPanelSelectorTool());
    nChartControl.Controller.Tools.Add(new NAxisScrollTool());
    nChartControl.Controller.Tools.Add(new NDataZoomTool());
    nChartControl.Controller.Tools.Add(new NDataPanTool());


Nevron Support
Posted 6 Years Ago
View Quick Profile
Supreme Being

Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)

Group: Forum Members
Last Active: Last Week
Posts: 3,054, Visits: 4,009
Hi Manal,
This code looks ok however it is unclear whether you use a single chart panel or multiple chart panels. In case you use a single chart panel with many docked Y axes you also need to specify the vertical axis for the range selection. For example:
rangeSelection.VerticalAxisId = someAxis.AxisId;
You can also send us a snapshot of the chart state:
nChartControl1.Serializer.SaveControlStateToFile("c:\\temp\\chartstate.xml", Nevron.Serialization.PersistencyFormat.CustomXML, null);
(you need to send us the generaed chartstate.xml file) so that we can investigate further.

Hope this helps - let us know if you meet any problems or have any questions.

Best Regards,
Nevron Support Team



Manal Goyal
Posted 6 Years Ago
View Quick Profile
Forum Member

Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)Forum Member (44 reputation)

Group: Forum Members
Last Active: 5 Years Ago
Posts: 29, Visits: 405
Hi,

I have used a similar way that is present in exmaples->RealTime->RealTimeLine
like this:
NAxis axis1 = chart.Axis(StandardAxis.PrimaryY);
ConfigureAxis(axis1, 0, 30, "Signal 1");

NAxis axis2 = chart.Axis(StandardAxis.SecondaryY);
ConfigureAxis(axis2, 35, 65, "Signal 2");

NAxis axis3 = ((NCartesianAxisCollection)chart.Axes).AddCustomAxis(AxisOrientation.Vertical, AxisDockZone.FrontRight);
ConfigureAxis(axis3, 70, 100, "Signal 3");

I want the range selection box to appear across whole y axis.

I tried what you suggested like:
    NRangeSelection rangeSelection = new NRangeSelection();
    rangeSelection.VerticalValueSnapper = new NAxisRulerMinMaxSnapper();
    ((NCartesianChart)chart).RangeSelections.Add(rangeSelection);
    rangeSelection.VerticalAxisId = 1;

but that did not make any difference.


Nevron Support
Posted 6 Years Ago
View Quick Profile
Supreme Being

Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)Supreme Being (4,435 reputation)

Group: Forum Members
Last Active: Last Week
Posts: 3,054, Visits: 4,009
Hi Manal,
We were not able to replicate the problem - we tested with the following code:
using Nevron.Chart;
using Nevron.Chart.Windows;
using System;
using System.Windows.Forms;

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


private void Form1_Load(object sender, EventArgs e)
{
NCartesianChart chart = (NCartesianChart)nChartControl1.Charts[0];
chart.Axis(StandardAxis.PrimaryX).ScrollBar.Visible = true;

NAxis axis1 = chart.Axis(StandardAxis.PrimaryY);
ConfigureAxis(axis1, 0, 30, "Signal 1");

NAxis axis2 = chart.Axis(StandardAxis.SecondaryY);
axis2.Visible = true;
ConfigureAxis(axis2, 35, 65, "Signal 2");

NAxis axis3 = ((NCartesianAxisCollection)chart.Axes).AddCustomAxis(AxisOrientation.Vertical, AxisDockZone.FrontRight);
ConfigureAxis(axis3, 70, 100, "Signal 3");

NRangeSelection rangeSelection = new NRangeSelection();
rangeSelection.VerticalValueSnapper = new NAxisRulerMinMaxSnapper();
rangeSelection.VerticalAxisId = axis2.AxisId;
chart.RangeSelections.Add(rangeSelection);

NLineSeries line1 = new NLineSeries();
FillData(line1);
chart.Series.Add(line1);

NLineSeries line2 = new NLineSeries();
FillData(line2);
chart.Series.Add(line2);
line2.DisplayOnAxis(StandardAxis.PrimaryY, false);
line2.DisplayOnAxis(axis2.AxisId, true);

NLineSeries line3 = new NLineSeries();
FillData(line3);
chart.Series.Add(line3);
line3.DisplayOnAxis(StandardAxis.PrimaryY, false);
line3.DisplayOnAxis(axis3.AxisId, true);

nChartControl1.Controller.Tools.Add(new NPanelSelectorTool());
nChartControl1.Controller.Tools.Add(new NAxisScrollTool());
nChartControl1.Controller.Tools.Add(new NDataZoomTool());

}

private void FillData(NLineSeries line)
{
Random rand = new Random();
line.DataLabelStyle.Visible = false;
for (int i = 0; i < 100; i++)
{
line.Values.Add(rand.Next(100));
}
}

private void ConfigureAxis(NAxis axis, float beginPercent, float endPercent, string text)
{
axis.Anchor = new NDockAxisAnchor(AxisDockZone.FrontLeft, false, beginPercent, endPercent);

NLinearScaleConfigurator scale = new NLinearScaleConfigurator();
scale.Title.Text = text;
axis.ScaleConfigurator = scale;
}
}
}

and the control was working properly. Can you sends us a small application that replicates this problem?

Best Regards,
Nevron Support Team





Similar Topics


Reading This Topic