What's New? > Breaking Changes in SciChart WPF SDK v6
Breaking Changes in SciChart WPF SDK v6

When upgrading SciChart WPF to v6 of the SDK we have taken great care to preserve the original API.

There are very few breaking changes in the SciChart WPF v6 SDK (vs. version 5.x). We are hoping that for most customers SciChart WPF v6 is a drop-in replacement.

In the majority of cases, SciChart WPF v6 should be a drop-in replacement for customers of SciChart WPF v5, with a very high proportion of backward compatible APIs.

 

A list of breaking changes that we know about are found below. If you find more and require assistance, simply contact-us and our team will be happy to help.

What Backward Compatibility Testing have we done?

At SciChart we make an SDK consumed by thousands of developers worldwide, and don’t have access to all of your code. We do however, have access to our own WPF Examples, Sandbox, Tutorials and Test-Cases. To that end, we have analysed backward compatibility by installing the SciChart WPF SDK v6 into SciChart WPF v5 examples/tutorials/test-cases to check for breaking changes. We have published the source code to show this upgrade here. Please read the readme to see details about where the commit is with breaking changes updated.

SciChart WPF SDK v6 is highly backward compatible with SciChart WPF v5, with some minor breaking changes listed below.

Licensing Changes

A change which will effect everyone is that the license keys for SciChart SDK v6 have changed from SciChart SDK v5. The reason for this is because of Microsoft’s introduction of .NET Core 3.0 and our reliance on a third party licensing component which is no longer supported / does not support .NET Core 3.0.

As a result, we have implement a completely new in-house licensing mechanism used across all our platforms (WPF, iOS, Android) and the license keys have had to change for all customers.

Licensing is completely different in SciChart WPF v6 vs. v5. All customers will need to update their license keys and re-activate using the Cross Platform Licensing Wizard to use the software.

Before

Customers of WPF v5 received an XML Runtime Key and activate using the SciChart WPF Licensing Wizard.

The Trial version works out-of-the-box for 30 days on a new PC, so if you install-package SciChart from NuGet, ‘It Just works’ for 30 days’

After

You will receive a JSON Runtime License Key and activate SciChart WPF v6 using the SciChart Cross-Platform Licensing Wizard, which now runs on Windows as well as MacOS for our mobile customers.

The trial version requires that you get a trial from our new Cross-Platform Licensing Wizard which requires sign-up to our website. This will work on your PC only. If you wish to transfer the application you build to another PC for demo purposes, that PC will have to use the Cross-Platform Licensing Wizard to start a trial on that PC.

We’re able to give trial-extensions as before and we’ve tried to be as easy-to-use as possible for new customers, while taking steps to protect our Intellectual Property and expand our licensing system to cross-platform, since that is where we are going as a company!

For all queries involving licensing, and how to update, see this FAQ.

Minimum .NET Framework Version raised to 4.5.2

SciChart WPF v6 now targets .NET Core 3.0 Desktop and .NET Framework. Microsoft has ended support for .NET Frameworks earlier than 4.5.2 several years ago. As a result, we have had to raise the minimum supported .NET Framework Version to v4.5.2 in SciChart WPF v6.

Changes in SciChart.Charting3D.Primitives.BaseSceneEntity derived types

You will only encounter these errors if you have overridden BaseSceneEntity to create your own custom geometry, such as CubeGeometry, or TextSceneEntity in 3D Charts. For normal usage of our 3D Chart types, there are no changes to the API.

A list of errors messages and the resolution are found below.

  • CubeGeometry.GetKind(): no suitable method found to override
  • CubeGeometry.UdpateScene(IRenderPassInfo3D): no suitable method found to override
  • CubeGeometry.PerformSelection(bool, List<VertexId>): no suitable method found to override.
  • Using the generic type BaseSceneEntity<T> requires 1 type arguments.
  • TextSceneEntity.IsTransparent(): no suitable method found to override
  • TextSceneEntity.RenderScene(IRenderPassInfo3D): no suitable method found to override
  • TextSceneEntity.Dispose(): no suitable method found to override
  • TextSceneEntity.UpdateScene(IRenderPassInfo3D): no suitable method found to override
  • TextSceneEntity.PerformSelection(bool, List<VertexId>): no suitable method found to override
  • TextSceneEntity.OnEngineRestart(): no suitable method found to override
  • TextSceneEntity.GetKind(): no suitable method found to override

The resolution to all these errors can be seen in the CubeGeometry.cs and TextSceneEntity.cs files in the SciChart.Wpf.Examples for v6. By running a compare or diff over these files you will see what has changed, and how to best updated your own BaseSceneEntity derived types.

If you have a customized geometry based on BaseSceneEntity then our consultants are available to help you upgrade. Find out more about costs involved at the bottom of this article.

Changes in CustomRenderableSeries Hit-Test


If you have created a CustomRenderableSeries derived type and overridden Hit-Test you may see the following error message:

CustomRenderableSeries.HitTest(Point, double, bool)': no suitable method found to override.

The Hit-Test method has been removed and this part of the code refactored internally into IHitTestProvider derived classes (see also RenderableSeries.HitTestProvider property).

How we solve this can be seen in the SciChart WPF v6 Examples SplineLineRenderableSeries.cs, where we implement a SplineLineHitTestProvider which inherits DefaultHitTestProvider.

Changes in CustomRenderableSeries Drawing

If you have implemented CustomRenderableSeries and called some of the methods on BaseRenderableSeries such as BaseRenderableSeries.DrawPointMarkers, or BaseRenderableSeries.DrawLines, these have moved in the SciChart WPF SDK v6.

The name DrawPointMarkers does not exist in the current context

To solve this, look at the SplineLineRenderableSeries.cs in the SciChart WPF v6 Examples Suite. The base class method BaseRenderableSeries.DrawPointMarkers has been removed and instead replaced with LegacyPointMarkerRenderer. Usage is as follows.

BaseRenderableSeries.DrawPointMarkers replacement
Copy Code
protected override void Draw(IRenderContext2D renderContext, IRenderPassData renderPassData)
{
    base.Draw(renderContext, renderPassData);
    // Get the data from RenderPassData. See CustomRenderableSeries article which describes PointSeries relationship to DataSeries
    if (renderPassData.PointSeries.Count == 0) return;
    // Convert to Spline Series
    _splineSeries = ComputeSplineSeries(renderPassData.PointSeries, IsSplineEnabled, UpSampleFactor);
    // Get the coordinates of the first dataPoint
    var point = GetCoordinatesFor(_splineSeries[0].X, _splineSeries[0].Y);
    // Create a pen to draw the spline line. Make sure you dispose it!            
    using (var linePen = renderContext.CreatePen(this.Stroke, this.AntiAliasing, this.StrokeThickness))
    {
        // Create a line drawing context. Make sure you dispose it!
        // NOTE: You can create mutliple line drawing contexts to draw segments if you want
        //       You can also call renderContext.DrawLine() and renderContext.DrawLines(), but the lineDrawingContext is higher performance
        using (var lineDrawingContext = renderContext.BeginLine(linePen, point.X, point.Y))
        {
            for (int i = 1; i < _splineSeries.Count; i++)
            {
                point = GetCoordinatesFor(_splineSeries[i].X, _splineSeries[i].Y);
                lineDrawingContext.MoveTo(point.X, point.Y);
            }
        }
    }
    // Drawing pointmarkers has been moved to LegacyPointMarkerRenderer() class and refactored out of BaseRenderableSeries
    new LegacyPointMarkerRenderer(this, GetPointMarker(), SelectedPointMarker)
        .Draw(renderContext, renderPassData.PointSeries, renderPassData);
}

If you have a customized series based on on CustomRenderableSeries or have custom drawing routines then our consultants are available to help you upgrade. Find out more about costs involved at the bottom of this article.

CustomUniformHeatmapDataSeries.FormatValue

Another Minor API change can be found in FastUniformHeatmapRenderableSeries where the FormatDataValue signature has changed. If you see this message, this is how to solve it.

'CustomUniformHeatmapRenderableSeries.FormatDataValue(double, int, int)': cannot change access modifiers when overriding 'public' inherited member 'BaseHeatmapRenderableSeries.FormatDataValue(double, int, int)'

The fix for this is very simple, the method FormatDataValue has been changed from protected to public, so now you have to override it like this:

Heatmap.FormatDataValue changes
Copy Code
public class CustomUniformHeatmapRenderableSeries : FastUniformHeatmapRenderableSeries
{
    public override string FormatDataValue(double dataValue, int xIndex, int yIndex)
    {
        IPointMetadata[,] metaDatas = ((IHeatmapDataSeries)DataSeries).Metadata;
        if (metaDatas != null)
        {
            var metaData = (UniformHeatmapMetaData)metaDatas[yIndex, xIndex];
            return metaData.IsBody ? base.FormatDataValue(dataValue, xIndex, yIndex) : string.Empty;
        }
        return base.FormatDataValue(dataValue, xIndex, yIndex); ;
    }
}

Changes to IRenderableSeries.HitTest API

'IRenderableSeries' does not contain a definition for 'HitTest' and no accessible extension method 'HitTest' accepting a first argument of type 'IRenderableSeries' could be found (are you missing a using directive or an assembly reference?)

 

The HitTest function on BaseRenderableSeries / IRenderableSeries has been moved. All Hit-Test code has been refactored into classes called HitTestProviders. If you have used the API to hit-test a series in SciChart then all you need to do is to call hit-test on the HitTestProvider, like this:

Calling RenderableSeries.HitTest in v6
Copy Code
private void SciChartSurfaceMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    // Perform the hit test relative to the GridLinesPanel
    var hitTestPoint = e.GetPosition(sciChartSurface.GridLinesPanel as UIElement);
    // Show info for series, which HitTest operation was successful for only
    foreach(var renderableSeries in sciChartSurface.RenderableSeries)
    {
        // Get hit-test the RenderableSeries using interpolation
        var hitTestInfo = renderableSeries.HitTestProvider.HitTest(hitTestPoint, true);
        if (hitTestInfo.IsHit)
        {
            // Convert the result of hit-test operation to SeriesInfo
            var seriesInfo = renderableSeries.GetSeriesInfo(hitTestInfo);
            // Output result
            var formattedString = SeriesInfoToFormattedString(seriesInfo, hitTestPoint);
            // Show result
            Console.WriteLine(formattedString);
            AddOnView(formattedString);
        }
    }
}

DirectXMode Namespace Change

The enum DirectXMode used to be found in the namespace SciChart.Drawing.DirectX.Context.D3D11, however this has been moved to SciChart.Drawing.VisualXcceleratorRasterizer.DirectXMode.

Upgrade Consultancy Services Available

As a paid customer of SciChart WPF if you are within your support subscription, then you will get access to SciChart WPF v6 for free.

What your support subscription covers is:

  • Access to (ability to develop applications with all major/minor versions of SciChart)
  • Bug fixes, updates
  • Technical support ‘how do I do X’ questions as well as assistance on best-practice implementing the software.
  • Best practice advice on getting the best performance out of SciChart.

What we don’t include is:

  • Custom work such as new features or enhancements or workarounds to the chart.
  • Performance analysis of your applications to improve application speed with SciChart (or wider performance analysis)
  • Upgrading your applications to the latest versions when you have lots of customisation.

For these ‘not included’ aspects of technical support, our consultants are available to help you on a one-to-one basis, coding or advising over Skype/Zoom/Webconference and assisting you to upgrade to the latest version, and performance profile or tune your applications to be the best they can be.

If you require these services, then get in contact with sales, and we can provide a quote for hourly work.

See Also