Cartesian chart: How to preserve the current zoom setting, redraw the chart, then reapply the zoom


Cartesian chart: How to preserve the current zoom setting, redraw the...
Author
Message
Kevin Harrison 1
Kevin Harrison 1
Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)
Group: Forum Members
Posts: 176, Visits: 1.9K

Hopefully the title is self-explanatory. We have several instances where:
1) A chart is rendered and the the DataZoom tool is used to expand a specific region.
2) There is some reason to redraw the chart
3) We want the original zoom setting to be reapplied, as though the user had reused the DataZoom tool; i.e. with the ability to zoom back out to see the full chart.
What is the easiest way to achieve this? I can see that I can probably use RulerRanges to read the current zoom settings and preserve them. However, how do I "reapply" the zoom in code after redrawing the chart? If I just apply the RulerRanges I do not have the ability to zoom back out.
Thanks
Kevin


Replies
Kevin Harrison 1
Kevin Harrison 1
Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)Supreme Being (79 reputation)
Group: Forum Members
Posts: 176, Visits: 1.9K
As an update for this, is there a way for me to know when a zoom event has completed, so I can read the ranges at this point and store them?

I tried adding code to OnEndDrag in an overridden NDataZoomTool class, but axis.Scale.RulerRange hasn't been updated at this stage. I couldn't see anything else to hook into in this class.

Thanks

Kevin
Nevron Support
Nevron Support
Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)
Group: Administrators
Posts: 3.1K, Visits: 4.2K
Hi Kevin,

The scale range is recalculated when the control is recalculated. You can force recalculation when you receive the EndZoom event and then retrieve the range - for example:

  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(20);
    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)
   {
    NDataZoomTool dataZoomTool = (NDataZoomTool)sender;

    nChartControl1.RecalcLayout();
    NRange1DD range = nChartControl1.Charts[0].Axis(StandardAxis.PrimaryX).Scale.RulerRange;

    Trace.WriteLine("X:" + range.Begin.ToString() + ", Y:" + range.End.ToString());
   }

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

Best Regards,
Nevron Support Team


GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...





Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search