Now supports optional rotation of axis tick labels (e.g. 90 degrees).<\/li>\n<\/ul>\nUsage:<\/p>\n
<s:DateTimeAxis>\n <s:DateTimeAxis.TickLabelStyle>\n <Style TargetType=\"s:DefaultTickLabel\">\n <Setter Property=\"Foreground\" Value=\"Blue\" \/>\n <Setter Property=\"FontSize\" Value=\"25\" \/>\n <Setter Property=\"LayoutTransform\">\n <Setter.Value>\n <RotateTransform Angle=\"45\" \/>\n <\/Setter.Value>\n <\/Setter>\n <\/Style>\n <\/s:DateTimeAxis.TickLabelStyle>\n<\/s:DateTimeAxis><\/pre>\nOr<\/p>\n
<s:NumericAxis>\n <s:NumericAxis.TickLabelStyle>\n <Style TargetType=\"s:NumericTickLabel\">\n <Setter Property=\"Foreground\" Value=\"Blue\" \/>\n <Setter Property=\"FontSize\" Value=\"25\" \/>\n <\/Style>\n <\/s:NumericAxis.TickLabelStyle>\n<\/s:NumericAxis><\/pre>\n <\/p>\n
7. Axis Tick Algorithm Improvements<\/h3>\n\n- AxisBase.TickProvider API to override in-built axis tick generation algorithms.<\/li>\n
- Improved axis culling \/ adjacency algorithm.<\/li>\n<\/ul>\n
Usage:<\/p>\n
\/\/ Tickprovider Declaration\npublic class CustomTickProvider : TickProvider<DateTime>\n{\n public override DateTime[] GetMinorTicks(IAxisParams axis)\n {\n return new DateTime[] \n { \n new DateTime(2014, 1, 5), \n new DateTime(2014, 1, 15), \n new DateTime(2014, 1, 25) \n };\n }\n\n public override DateTime[] GetMajorTicks(IAxisParams axis)\n {\n return new DateTime[] \n { \n new DateTime(2014, 1, 1), \n new DateTime(2014, 1, 10), \n new DateTime(2014, 1, 20) \n };\n }\n}\n\n\/\/ Using a TickProvider in code\nvar axis = new DateTimeAxis();\naxis.TickProvider = new CustomTickProvider();<\/pre>\nOr<\/p>\n
<!-- Where CustomTickProvider is declared as a Resource -->\n<s:DateTimeAxis TickProvider=\"{StaticResource CustomTickProvider}\"\/><\/pre>\n <\/p>\n
8. Static Axis<\/h3>\n\n- AxisBase.IsStaticAxis fixes all tick labels at static positions, and updates the text-values instead.<\/li>\n
- Perfect for static charts, or real-time charts where fixed-position labels are needed.<\/li>\n<\/ul>\n
Usage:<\/p>\n
<!-- Create Y Axis with IsStaticAxis flag -->\n<s:SciChartSurface.YAxes>\n <s:NumericAxis IsStaticAxis=\"True\" \/>\n<\/s:SciChartSurface.YAxes><\/pre>\n <\/p>\n
<\/p>\n
9. AxisBase.VisibleRangeLimit<\/h3>\n\n- Does now allow the axis to expand beyond the given AxisBase.VisibleRangeLimit<\/li>\n
- Provides a reset-point for double-click Zoom Extents, overriding the built-in auto-ranging mechanism.<\/li>\n<\/ul>\n
Usage:<\/p>\n
<!-- Bind X and Y Axis VisibleRangeLimit to ViewModel properties -->\n<s:SciChartSurface.XAxis>\n <s:NumericAxis VisibleRangeLimit=\"{Binding XLimit}\"\/>\n<\/s:SciChartSurface.XAxis>\n\n<s:SciChartSurface.YAxis>\n <s:NumericAxis VisibleRangeLimit=\"{Binding YLimit}\"\/>\n<\/s:SciChartSurface.YAxis><\/pre>\n <\/p>\n
\/\/ Viewmodel properties declared as\nprivate DoubleRange _xLimit;\n\npublic DoubleRange XLimit\n{\n get { return _xLimit; }\n set\n {\n if (_xLimit == value) return;\n _xLimit = value;\n OnPropertyChanged(\"XLimit\");\n }\n}\n\nprivate DoubleRange _yLimit;\n\npublic DoubleRange YLimit\n{\n get { return _yLimit; }\n set\n {\n if (_yLimit == value) return;\n _yLimit = value;\n OnPropertyChanged(\"YLimit\");\n }\n}<\/pre>\n <\/p>\n
10. XML Serialization Support<\/h3>\n\n- Serialize Chart Settings to\/from XML<\/li>\n
- Serialize Annotation Positions to\/from XML<\/li>\n<\/ul>\n
Usage:<\/p>\n
\/\/ Use this code to Serialize just annotations\nprivate string SerializeAnnotations(AnnotationCollection annotationCollection)\n{\n var stream = new MemoryStream();\n var serializer = new XmlSerializer(typeof (AnnotationCollection));\n serializer.Serialize(stream, annotationCollection);\n\n stream.Position = 0;\n string xmlText = new StreamReader(stream).ReadToEnd();\n return xmlText;\n}\n\n\/\/ Use this code to Deserialize just annotations\nprivate AnnotationCollection DeserializeAnnotations(string xmlText)\n{\n var stream = new MemoryStream(Encoding.ASCII.GetBytes(xmlText));\n var serializer = new XmlSerializer(typeof(AnnotationCollection));\n\n stream.Position = 0;\n var annotationCollection = (AnnotationCollection) serializer.Deserialize(stream);\n return annotationCollection;\n}\n\/\/ Use this code to Serialize\/Deserialize a SciChartSurface\nprivate void SerializeChart()\n{\n var beforeChart = new SciChartSurface();\n \/\/ ...\n var stream = new MemoryStream();\n var serializer = new XmlSerializer(typeof(SciChartSurface));\n serializer.Serialize(stream, beforeChart);\n\n var afterChart = (SciChartSurface)serializer.Deserialize(stream);\n\n}<\/pre>\n <\/p>\n
11. SciChartSurface.MaxFrameRate<\/h3>\n\n- Limit frame-rate to a maximum Hertz, or leave null for default (unlimited).<\/li>\n
- Useful for strip charts (e.g. CPU, Temperature monitoring) in process control.<\/li>\n
- Note low values, e.g. 1, will not only limit redrawing but frame-rate when responding to mouse\/zoom events.<\/li>\n<\/ul>\n
Usage:<\/p>\n
sciChartSurface.MaxFrameRate = 24;<\/pre>\nOr<\/p>\n
<SciChart:SciChartSurface MaxFrameRate=\"24\">\n<\/pre>\n <\/p>\n
12. Save Chart to Bitmap<\/h3>\n\n- Export to BitmapSource, File built in to SciChartSurface.<\/li>\n
- Supports file export to PNG, JPEG, BMP<\/li>\n<\/ul>\n
Usage:<\/p>\n
var surface = new SciChartSurface();\n\/\/...\n\n\/\/ Export to in-memory bitmap\nvar bitmapSource = surface.ExportToBitmapSource();\n\n\/\/ Export directly to file\nsurface.ExportToFile(\"Filename.png\",ExportType.Png);<\/pre>\n <\/p>\n
13. Heatmap Improvements<\/h3>\n\n- Implemented HitTest for Heatmap, allowing RolloverModifier, Cursors.<\/li>\n
- GradientBrush support for Hetamap Colour Maps.<\/li>\n
- New improved HeatmapColourMap control.<\/li>\n<\/ul>\n
Usage:<\/p>\n
<s:SciChartSurface.RenderableSeries>\n <s:FastHeatMapRenderableSeries x:Name=\"heatmapSeries\"\n Opacity=\"0.5\"\n Maximum=\"200\">\n <!-- Defining the Color Map using WPF LinearGradientBrush -->\n <s:FastHeatMapRenderableSeries.ColorMap>\n <LinearGradientBrush>\n <GradientStop Offset=\"0\" Color=\"DarkBlue\" \/>\n <GradientStop Offset=\"0.2\" Color=\"CornflowerBlue\" \/>\n <GradientStop Offset=\"0.4\" Color=\"DarkGreen\" \/>\n <GradientStop Offset=\"0.6\" Color=\"Chartreuse\" \/>\n <GradientStop Offset=\"0.8\" Color=\"Yellow\" \/>\n <GradientStop Offset=\"1\" Color=\"Red\" \/>\n <\/LinearGradientBrush>\n <\/s:FastHeatMapRenderableSeries.ColorMap>\n <!-- Defining the RolloverMarkerTemplate for use with Rollover -->\n <s:FastHeatMapRenderableSeries.RolloverMarkerTemplate>\n <ControlTemplate>\n <s:TemplatableControl>\n <s:TemplatableControl.ContentTemplate>\n <DataTemplate>\n <Ellipse Width=\"9\"\n Height=\"9\"\n Fill=\"Red\"\n Stroke=\"Blue\"\n StrokeThickness=\"2\" \/>\n <\/DataTemplate>\n <\/s:TemplatableControl.ContentTemplate>\n <\/s:TemplatableControl>\n <\/ControlTemplate>\n <\/s:FastHeatMapRenderableSeries.RolloverMarkerTemplate>\n <\/s:FastHeatMapRenderableSeries>\n<\/s:SciChartSurface.RenderableSeries>\n<!-- Defining the Heatmap Legend -->\n<s:HeatmapColourMap Margin=\"30\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Top\" \n FastHeatMapRenderableSeries=\"{Binding ElementName=heatmapSeries, Mode=OneWay}\"\n Opacity=\"0.5\"\n Orientation=\"Vertical\" \/>\n\n<\/pre>\n <\/p>\n
14. API Improvements to ViewportManager<\/h3>\n\n- New API Functions added to ViewportManager to directly control the SciChartSurface.<\/li>\n
- ViewportManagerBase implements ISciChartController, defined as<\/li>\n<\/ul>\n
\/\/\/ <summary>\n\/\/\/ An interface to a subset of methods on the SciChartSurface.\n\/\/\/ <\/summary>\npublic interface ISciChartController : ISuspendable, IInvalidatableElement\n{\n \/\/\/ <summary>\n \/\/\/ Zooms the chart to the extents of the data, plus any X or Y Grow By fraction set on the X and Y Axes\n \/\/\/ <\/summary>\n void ZoomExtents();\n\n \/\/\/ <summary>\n \/\/\/ Zooms to extents with the specified animation duration\n \/\/\/ <\/summary>\n \/\/\/ <param name=\"duration\">The duration of animation when zooming to extents<\/param>\n void AnimateZoomExtents(TimeSpan duration);\n\n \/\/\/ <summary>\n \/\/\/ Zooms the chart to the extents of the data in the Y-Direction, accounting for the current data in view in the X-direction\n \/\/\/ <\/summary>\n void ZoomExtentsY();\n\n \/\/\/ <summary>\n \/\/\/ Zooms the chart to the extents of the data in the Y-Direction, accounting for the current data in view in the X-direction\n \/\/\/ <\/summary>\n void AnimateZoomExtentsY(TimeSpan duration);\n\n \/\/\/ <summary>\n \/\/\/ Zooms the chart to the extents of the data in the X-Direction\n \/\/\/ <\/summary>\n void ZoomExtentsX();\n\n \/\/\/ <summary>\n \/\/\/ Zooms the chart to the extents of the data in the X-Direction\n \/\/\/ <\/summary>\n void AnimateZoomExtentsX(TimeSpan duration);\n}\n<\/pre>\nUsage:<\/p>\n
\n- Declare an instance of DefaultViewportManager in your ViewModel.<\/li>\n
- Bind SciChartSurface.ViewportManager to this.<\/li>\n
- Now you can control the SciChartSurface from the ViewModel via the ViewportManager methods above.<\/li>\n<\/ul>\n
<\/p>\n
15. Performance Tuning<\/h3>\n
With great power comes great responsibility! Every release of SciChart has more features, more bugs fixed, and therefore more potential to be slower than the last. In SciChart v3.0 we have made slight but important improvements to performance by:<\/p>\n
\n- Reducing the load of the Garbage Collector by reducing boxing\/unboxing deep inside the renderer core.<\/li>\n
- Reducing the load of the CPU by reducing redundant NaN \/ Null checks deep inside the renderer core.<\/li>\n<\/ul>\n
We aim to keep working in this area and like a race car, shave off the extra milliseconds wherever we find them!<\/p>\n
<\/p>\n
How to Get It!<\/h2>\n
Head over to www.scichart.com\/downloads where you can download the BETA installer, or as DLLs only. Both packages also include a PDF Release note with the above changes and some upgrade instructions for existing users.<\/p>\n
Source code customers, we will be sending out an update soon via email.<\/p>\n","protected":false},"excerpt":{"rendered":"
SciChart v3.0 is here! Wait a second, what happened to SciChart v2.5 which you announced last year? …SciChart v3.0 Is […]<\/p>\n","protected":false},"author":37,"featured_media":2115,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[200],"tags":[201],"acf":[],"yoast_head":"\n
Announcing SciChart v3.0 BETA - SciChart<\/title>\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\t\n\t\n\n\n\n\n\n\t\n\t\n\t\n