Pre loader

CursorModifier and SciChartGroup without series

Welcome to the SciChart Forums!

  • Please read our Question Asking Guidelines for how to format a good question
  • Some reputation is required to post answers. Get up-voted to avoid the spam filter!
  • We welcome community answers and upvotes. Every Q&A improves SciChart for everyone

WPF Forums | JavaScript Forums | Android Forums | iOS Forums

0
0

Hi,

I’m using SciChartGroup with SciChartSurface to create a chart with multiple panes, each pane has a set of cursors including the CursorModifier with ShowAxisLabels=”True”. When mouse is over the panel where no any series I get an error:

Object reference not set to an instance of an object.

at Abt.Controls.SciChart.Visuals.Axes.TradeChartAxisLabelFormatter.c94f1c4a8b3176ab34988be02ae5c9853(IComparable cd9eb4abc8062a13034d7e1a95015cf34, Boolean c202464bb46bef74e568ab9e85eabcfae)
at Abt.Controls.SciChart.Visuals.Axes.TradeChartAxisLabelFormatter.FormatLabel(IComparable dataValue)
at Abt.Controls.SciChart.Visuals.Axes.AxisBase.FormatText(IComparable value, String format)
at Abt.Controls.SciChart.Visuals.Axes.AxisBase.HitTest(Point atPoint)
at Abt.Controls.SciChart.ChartModifiers.InspectSeriesModifierBase.HitTestAxis(IAxis axis, Point atPoint)
at Abt.Controls.SciChart.ChartModifiers.CursorModifier.c987c837b119aed1f35c1f0ac2cd58b4b.cf244cc494090613db790079d45f87bd9(IAxis c9602bd29fd5d7a98bc0428c28ceb8250)
at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1 source)
at Abt.Controls.SciChart.ChartModifiers.CursorModifier.GetAxesData(Point mousePoint)
at Abt.Controls.SciChart.ChartModifiers.CursorModifier.HandleMasterMouseMove(Point mousePoint)
at Abt.Controls.SciChart.ChartModifiers.InspectSeriesModifierBase.cf02abbb1e36d2956f3f92f4d796607cf(Point cfe7da3d2fb2c1ba75ba1814199d02354)
at Abt.Controls.SciChart.ChartModifiers.InspectSeriesModifierBase.HandleMouseEvent(Point mousePoint, Boolean isMaster)
at Abt.Controls.SciChart.ChartModifiers.InspectSeriesModifierBase.OnModifierMouseMove(ModifierMouseArgs e)
at Abt.Controls.SciChart.ChartModifiers.ModifierGroup.c07d1dcb1c7ba461bbcbf5a1dd47c58a5(IChartModifier c6b1effd112e5355cd5f051dd91cd4f67, ModifierMouseArgs cbb39038dde40bfc3fdcfa70f4bbf8778)
at Abt.Controls.SciChart.ChartModifiers.ModifierGroup.c9e8960a6a8527c20ac9e46e162c72b22(Action2 c4bd4ab823835cf92d221476b6fb65a17, ModifierMouseArgs c4c23d80d4d060e409c3479ef17d6c65e)
at Abt.Controls.SciChart.ChartModifiers.ModifierGroup.OnModifierMouseMove(ModifierMouseArgs e)
at Abt.Controls.SciChart.Utility.Mouse.MouseManager.ca5839647cb861fa726b3261de72c52c0(ModifierMouseArgs cbb39038dde40bfc3fdcfa70f4bbf8778, IReceiveMouseEvents c18509698be3f9366c690e7d2b107b62c, Boolean c3791a1b71c1577bde30b55c12b2a5583)
at Abt.Controls.SciChart.Utility.Mouse.MouseManager.cf88844ca415efe316ebbc6460c4d5477.c7ca7af35639f570327394b11001b543a.c5980502f76d6e282773f80c5da0f84e7(IReceiveMouseEvents c133657388cc0f6f6615e21e129ac4b3a)
at A.c19dd4d74f6373c95c517d29624d76e4b.cacf72b657252e3e73860afb89d70cb9f[c13c28af86f0b14202b9c7ef43b1bd11a](IEnumerable
1 c40a30a1bb6416cd164565919fdef15a9, Action`1 c885aac61bc9832561b7ff07903c88d5e)
at Abt.Controls.SciChart.Utility.Mouse.MouseManager.cf88844ca415efe316ebbc6460c4d5477.c6b7aec04ebfc28e092adf0e569761d15(Object cae49ecc8585f35e8dd5ce624f7fb7ab5, MouseEventArgs c4c23d80d4d060e409c3479ef17d6c65e)
at A.cd43732d305fa7b65b611005fdcef35d8.c769264f2530d8b47196e47cbbe58cb89(MouseEventArgs cbb39038dde40bfc3fdcfa70f4bbf8778)
at A.cd43732d305fa7b65b611005fdcef35d8.cbe8969038b3b47585f72b9c703cd47da(Object c5e18ac7ef25e3e9c51dc36756b25ed1e, MouseEventArgs c4c23d80d4d060e409c3479ef17d6c65e)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run()
at SciTest.App.Main() in d:\Projects\Test\SciChart\SciTest – копия\SciTest\obj\Debug\App.g.cs:line 0
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

I attached a sample project.

Attachments
  • You must to post comments
0
0

Hi Esper,

We will investigate further. To resolve this by workaround, you can try this:

    /// <summary>
    /// LabelFormatters are used to format cursor and axis labels from DataValues
    /// The DataValue will be an Integer index in the case of CategoryDateTimeAxis
    /// The DataValue will be a Double in the case of NumericAxis and a Double for DateTimeAxis
    /// For DateTimeAxis convert the Double to DateTIme like this: new DateTime((long)dataValue)
    /// </summary>
    public class CustomTradeChartAxisLabelFormatter : TradeChartAxisLabelFormatter
    {
        public override string FormatCursorLabel(IComparable dataValue)
        {
            if (dataValue == null) return "N/A";
            return base.FormatCursorLabel(dataValue);
        }

        public override string FormatLabel(IComparable dataValue)
        {
            if (dataValue == null) return "N/A";
            return base.FormatLabel(dataValue);
        }
    }

Create a custom LabelFormatter above that avoids the exception.

Then, use it like this

C#

    // Assumes XAxis is a CategoryDateTimeAxis
    sciChartSurface.XAxis.LabelFormatter = new CustomTradeChartAxisLabelFormatter();

or XAML

<!-- Assumes you have declared CustomTradeChartAxisLabelFormatter as a resource in your UserControl.Resources -->
<s:CategoryDateTimeAxis LabelFormatter="{StaticResource CustomTradeChartAxisLabelFormatter}"/>

Best regards,
Andrew

  • esper
    Hi, Thanks, it solved the problem for me.
  • Ian Carson
    Hi Guys This workaround does not seem to be effective when the chart surface is in a datatemplate. My DataTemplate looks like this [code title="ChartTemplate"] [/code] And I am using the CustomFormatter as described above. What happens is I get a dataValue of "1/01/0001 12:00AM" which is not null and then the base.FormatLabel(dataValue) call falls over with an "Object not set..." error
  • Ian Carson
    Sorry not used to your code tags. Here's the DataTemplate as text
  • You must to post comments
0
0

I am considering applying server-side licensing for my javerScript application.

In the document below, there is a phrase “Our server-side licensing component is written in C++.”
(https://support.scichart.com/index.php?/Knowledgebase/Article/View/17256/42/)

However, there is only asp.net sample code on the provided github.
(https://github.com/ABTSoftware/SciChart.JS.Examples/tree/master/Sandbox/demo-dotnet-server-licensing)

I wonder if there is a sample code implemented in C++ for server-side licensing.

Can you provide c++ sample code?
Also, are there any examples to run on Ubuntu?

  • You must to post comments
0
0

Hi Guys

I solved this one with a slight change to the CustomTradeChartAxisLabelFormatter in a post on this forum.

Here is the code for anyone who might find it useful.

Regards
Ian Carson

    public class CustomTradeChartAxisLabelFormatter : TradeChartAxisLabelFormatter
    {
        public override string FormatCursorLabel(IComparable dataValue)
        {
            if (dataValue == null)
            {
                return "N/A";
            }

            var date = Convert.ToDateTime(dataValue);

            if (date.Year == 1)
            {
                return "N/A";
            }

            return base.FormatCursorLabel(dataValue);
        }

        public override string FormatLabel(IComparable dataValue)
        {
            if (dataValue == null)
            {
                return "N/A";
            }

            var date = Convert.ToDateTime(dataValue);

            if (date.Year == 1)
            {
                return "N/A";
            }

            return base.FormatLabel(dataValue);
        }
    }
  • You must to post comments
Showing 3 results
Your Answer

Please first to submit.

Try SciChart Today

Start a trial and discover why we are the choice
of demanding developers worldwide

Start TrialCase Studies