It’ s been just 6 weeks since the final release of SciChart v3.0, but we have another release for you packed with features and improvements to the SciChart WPF Charting library. Full details of the improvements are listed below:
New Features & Improvements
1. NEW DirectX10 RenderSurface (Pre-Release)
- DirectX10 (Hardware) Renderer Implementation
- Sub-pixel, floating-point quality with perfect alpha blending (like High Quality mode), but with speed comparable to / better than High Speed mode.
- Utilizes Direct3D10 and SharpDX. Smooth Anti-Aliased Line Algorithms implemented in pixel shaders.
- All features of SciChart 2D supported in D3D, including Band, Mountain fills, Bubble Charts, Point Markers, Candlestick Charts etc…
- Requires Windows Vista and up, D3D10 Graphics card and up.
- See below for licensing restrictions *
Usage:
[xml]
<!– Where s3D XML namespace is defined as –>
<!– xmlns:s3D=”http://schemas.abtsoftware.co.uk/scichart3D” –>
<s:SciChartSurface.RenderSurface>
<s3D:Direct3D10RenderSurface/>
</s:SciChartSurface.RenderSurface>
[/xml]
To find our more see our KB article High Speed vs. High Quality vs. DirectX Renderer Plugins.
2. NEW SciChart.Wpf.PerformanceDemo Examples
New PerformanceDemo highlights key areas of performance
The Performance Demo can be started from the Start Menu. Search for ‘SciChart Performance Demo’. The source-code is also included in the WPF Examples Suite Solution in the install directory.
3. Ability to Style Annotation Resize Grips
- Easy Control Templating of the annotation resize grips
- Style annotation grips to fit your application look & feel
Usage:
[xml]
<Style x:Key=”GripStyle” TargetType=”Thumb”>
<Setter Property=”Background” Value=”Red” />
<Setter Property=”Foreground” Value=”Black” />
<Setter Property=”BorderBrush” Value=”Purple” />
<Setter Property=”BorderThickness” Value=”2″ />
<Setter Property=”Width” Value=”20″ />
<Setter Property=”Height” Value=”15″ />
<Setter Property=”Template”>
<Setter.Value>
<ControlTemplate>
<Ellipse Fill=”{TemplateBinding Background}” Stroke=”{TemplateBinding Foreground}” />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<s:BoxAnnotation Background=”Green”
BorderBrush=”Black”
IsEditable=”True”
ResizingGripsStyle=”{StaticResource GripStyle}”
X1=”2″
X2=”7″
Y1=”2″
Y2=”7″ />
[/xml]
4. New Tooltip Trigger Modes (Cursor, Rollover, VerticalSliceModifier)
- Now possible to show Rollover, Cursor and VerticalSliceModifier Tooltips with a Variety of Triggers
- ShowToolTipOptions includes MouseHover, Always, MouseLeftButtonDown, MouseRightButtonDown
- Demonstrated by the RolloverModifier example
Usage:
[xml]
<s:SciChartSurface.ChartModifier>
<s:ModifierGroup>
<s:RolloverModifier ShowTooltipOn=”MouseHover”/>
</s:ModifierGroup>
</s:SciChartSurface.ChartModifier>
[/xml]
5. RolloverModifier added to the SciStockChart by default
- Controlled by the IsRolloverEnabled property
- Default templates for the rollover legend are applied
[xml]
<s:SciStockChart IsRolloverEnabled=”True”>
…
</s:SciStockChart>
[/xml]
6. Improved LegendModifier / Easy Legend Configuration
- Set LegendModifier.ShowLegend = True to enable the auto legend.
- Legend properties are exposed on the LegendModifier, such as Orientation, ShowVisibilityCheckboxes, ShowSeriesMarkers, LegendPlacement, LegendItemTemplate, LegendTemplate, also Foreground, Background and Margin are bound to corresponding properties of the LegendModifier (see the ChartLegend example)
- Legend can be attached to a surface, that allows printing it along with the parent surface. Enabled via the LegendModifier.LegendPlacement property – see the ChartLegend example, LegendPlacement combobox.
- Existing code with legends should continue to work. This will simplify code going forward.
[xml]
<SciChart:LegendModifier x:Name=”legendModifier”
ShowLegend=”True”
LegendPlacement=”Top”
Orientation=”Horizontal”
ShowSeriesMarkers=”True”
ShowVisibilityCheckboxes=”True”
Margin=”10″ />
[/xml]
7. PointMarkers now rendered in the Legend by Default
- PointMarkers are rendered in legend by default.
- This can be switched off by setting SciChartLegend.ShowSeriesMarkers or LegendModifier.ShowSeriesMarkers to False.
- Markers appearance is controlled by the BaseRenderableSeries.LegendMarkerTemplate property (the parent RenderableSeries is the DataContext)
[xml]
<DataTemplate x:Key=”DefaultLegendMarkerTemplate” DataType=”r:BaseRenderableSeries”>
<Line Stretch=”Fill” X1=”0″ X2=”1″ Y1=”0.5″ Y2=”0.5″ StrokeThickness=”2″ Stroke=”{Binding SeriesColor, Converter={StaticResource ColorToBrushConverter}}” VerticalAlignment=”Center”/>
</DataTemplate>
…
<s:FastLineRenderableSeries LegendMarkerTemplate=”{StaticResource DefaultLegendMarkerTemplate}”/>
[/xml]
8. SeriesValuesModifier Improvements
- SeriesValueModifier now allows binding to YAxisId
- AxisMarkers are bound to latest YValue in the viewport
- AxisMarkers dim (50% opacity) when the most recent YValue is not in the viewport
- Improvements to AxisMarker Color Bindings
Usage
[xml]
<s:SciChartSurface.ChartModifier>
<s:ModifierGroup>
<s:SeriesValueModifier YAxisId=”RightAxisId”/>
</s:ModifierGroup>
</s:SciChartSurface.ChartModifier>
[/xml]
9. VisibleRangeLimitMode Property
- Optionally ignore one side of the VisibleRangeLimit, e.g. Max or Min
- You can now clamp one side of the VisibleRange to zero (or arbitrary value)
Usage
[xml]
<s:SciChartSurface.XAxes>
<s:NumericAxis AxisTitle=”Min”
Id=”axis1″
VisibleRangeLimit=”8000,9000″
VisibleRangeLimitMode=”Min” />
<s:NumericAxis AxisTitle=”Max”
Id=”axis2″
VisibleRangeLimit=”8000,9000″
VisibleRangeLimitMode=”Max” />
<s:NumericAxis AxisTitle=”MinMax”
Id=”axis3″
VisibleRangeLimit=”8000,9000″ />
<s:NumericAxis AxisTitle=”NoLimit” Id=”axis4″ />
</s:SciChartSurface.XAxes>
[/xml]
10. Tooltip DataTemplate Selectors
- Now possible to style the Tooltips in CursorModifier, RolloverModifier, VerticalSliceModifier via control templates
- For additional control, a DataTemplateSelector may be used
Usage
[xml]
<!– Define a DataTemplate for the Tooltip, which binds to SeriesInfo –>
<DataTemplate x:Key=”DefaulDataTemplate” DataType=”s:SeriesInfo”>
<Border BorderBrush=”Black” BorderThickness=”2″>
<StackPanel>
<TextBlock Text=”{Binding Value}” />
<TextBlock Text=”{Binding SeriesName}” />
</StackPanel>
</Border>
</DataTemplate>
<!– Define a DataTemplate for LineSeries, also binds to SeriesInfo –>
<DataTemplate x:Key=”LineDataTemplate” DataType=”s:SeriesInfo”>
<Border BorderBrush=”Black” BorderThickness=”2″>
<TextBlock Text=”{Binding Value}” />
</Border>
</DataTemplate>
<!– Apply a template Selector to the TooltipModifier –>
<s:TooltipModifier>
<s:TooltipModifier.TooltipLabelTemplateSelector>
<dataTemplateSelectors:CustomTemplateSelector DefaultTemplate=”{StaticResource DefaulDataTemplate}” LineDataTemplate=”{StaticResource LineDataTemplate}” />
</s:TooltipModifier.TooltipLabelTemplateSelector>
</s:TooltipModifier>
[/xml]
where the CustomTemplateSelector is defined as follows:
[csharp]
public class CustomTemplateSelector : DataTemplateSelector
{
public static readonly DependencyProperty LineDataTemplateProperty =
DependencyProperty.Register(“LineDataTemplate”, typeof (DataTemplate), typeof (CustomTemplateSelector), new PropertyMetadata(default(DataTemplate),OnCustomDataTemplateChanged));
private static void OnCustomDataTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var selector = d as CustomTemplateSelector;
if (selector != null)
{
selector.UpdateControlTemplate();
selector.OnDataTemplateChanged();
}
}
public DataTemplate LineDataTemplate
{
get { return (DataTemplate) GetValue(LineDataTemplateProperty); }
set { SetValue(LineDataTemplateProperty, value); }
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
// Choose which template to serve depending on Series Type
var seriesInfo = item as SeriesInfo;
if (seriesInfo != null && seriesInfo.RenderableSeries.GetType() == typeof (FastLineRenderableSeries))
return LineDataTemplate;
return base.SelectTemplate(item, container);
}
}
[/csharp]
11. Axis Labels can now be Templated
Following on from the example above, the same technique can be applied to Axis Cursor Labels by creating a DataTemplate with DataType of AxisInfo.
Usage:
[xml]
<Style x:Key=”AxisInfoTemplateSelectorStyle” TargetType=”s:AxisInfoTemplateSelector”>
<Setter Property=”YAxisDataTemplate”>
<Setter.Value>
<DataTemplate />
</Setter.Value>
</Setter>
<Setter Property=”XAxisDataTemplate”>
<Setter.Value>
<DataTemplate DataType=”s:AxisInfo”>
<Border BorderBrush=”Black” BorderThickness=”2″>
<TextBlock Text=”{Binding AxisFormattedDataValue}” />
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
[/xml]
12. Modifiers are in the Visual Tree
- ChartModifiers now participate in the Visual Tree
- ElementName and RelativeSource bindings to properties will now work
13. NEW Community Forum (Q&A)
14. NEW Site Search Engine
We have built in-house a proprietary site-wide search engine known as ‘Sci-Search’. This is available at search.scichart.com.
15. Changes to Deployment of SciChart
- Controversial we know, but we have removed the version number from the SciChart DLL Filename. The vote was 60:40 in favour of removing, excluding our own bias (we wanted to remove).
- The v3.1 installer does not include .NET4.5 or x64 or x86 builds of SciChart. You can still continue to use .NET4.0 AnyCPU in almost all of these cases (.NET4.0 compiles fine in .NET4.5 or 4.5.1 projects, and x86/x64 builds can be generated if you have a source-code license to SciChart).
- This is to prepare for future streamlined deployment, e.g. we are releasing nightly builds of SciChart.
16. Many Many Bug Fixes
See the Release Notes for full details. We’ve fixed loads of bugs that you have reported to us over the past 6 weeks.
17. Nightly Build and NuGet Feed
Guess what? We have setup our Teamcity instance to deploy a nightly build to a private NuGet feed for SciChart v3.1. Every night at 1am UTC, if there are changes in our repository, all the tests pass and the build is green, our build server will deploy a nightly build of SciChart.WPF and SciChart.SL to a private NuGet feed.
For more information how to set this up, see the KB article Getting Nightly Builds with NuGet.**
What’s Next?
We are continuing to improve our products & services, starting with SciChart and moving on to SciChart 3D. We feel the library is quite mature now, but there is still so much we want to do with it. As you invest in us, we will continue to invest in you. So keep the feedback coming and we will keep the releases coming. Thanks for being with us so far! 🙂
*Licensing Restrictions for the DirectX10 Renderer
- The DirectX Renderer is will form part of SciChart 3D, not SciChart WPF. We are releasing it now as a pre-release but it won’t be licensed under your SciChart WPF or SciChart Source-Code license.
- Instead, it is licensed as an non-time limited, unrestricted trial of SciChart 3D, meaning, you can use this in commercial software, but at a later date, we will be licensing SciChart 3D separately to SciChart WPF. As a result, the Source-Code package does not include the DirectX Renderer
- Please feel free to use it in commercial projects and give us your feedback. As we improve the SciChart 3D Product we will release more DirectX powered features!
**Notes on the Nightly Build Feed
- We are only publishing critical bug fixes from our Stable v3.1 (or later) release branches. You can use the Nightly Build in production systems with confidence.
- Currently the NuGet feed is public, however, we reserve the right to make it private for our Professional & Source customers at a later date.
- We are only publishing SciChart WPF and Silverlight in .NET4.0 and SL5 configurations.
- Don’t forget you can use a .NET4.0 DLL in a .NET4.5 or 4.5.1 application without problems.
- We are not publishing x86 and x64, as NuGet does not support platform specific DLLs.
- The ABT.Controls.SciChart3D.Wpf DLL (containing the DirectX10 Renderer) is not yet included in the NuGet package, although we hope to include it soon.
Related Posts