Search
Write a publication
Pull to refresh

LightningChart Ultimate — самая быстрая визуализация на .NET

В современном мире многие процессы и явления требуют постоянного контроля. И на производстве, и в химической лаборатории необходимо отслеживать различные параметры, будь то температура, плотность вещества или концентрация газа. Однако, недостаточно просто считывать показания с датчиков и измерительных приборов — требуется представить это в форме, простой для восприятия нашим мозгом. Для подобных целей используются графики, схемы и карты, построение которых происходит программным обеспечением в реальном времени. Именно об этом программном обеспечении и пойдет речь в этой статье, точнее, об одном из программных пакетов.



Чего же особенного может предложить этот конкретный программный пакет?
В среде, где требуется анализ и графическое представление данных в реальном времени, наиболее ценным качеством программы становится скорость работы. От оптимизации и производительности кода может зависеть точность измерений, отображаемая в графике, частота обработки данных и функциональность самой визуализации(карта высот или полетов гораздо нагляднее выглядит в трехмерном представлении, при этом ею проще пользоваться).



Итак, несколько лет назад на основе платформы .NET компания Arction Ltd представила LightningChart — результат многолетней работы по низкоуровневой оптимизации на DirectX, вплоть до уровня HLSL шейдеров.

Как описано выше, наиболее важным качеством API для визуализации является производительность. Насколько же быстрая LightningChart? Обратимся к бенчмаркам и сравним скорость LightningChart и кода, написанного на стандартных библиотеках GDI/GDI+ и System.Windows.Media:



Разница в скорости более чем значительная. Однако, LightningChart предоставляет также расширенные возможности по созданию 2D и 3D графиков и работе с картами. Существуют другие API с близким функционалом. Возможно, в гонке с LightningChart они хорошо себя покажут?





Впечатляющий результат, отрыв от конкурентов на порядки. Стоит также отметить, что многие подобные API используют даунсемплинг в процессе визуализации, то есть в то время как вы предоставляете к программе доступ к массиву из 50 000 точек, она берет средние значения соседних точек и отображает на графике всего лишь 25 000 (16 666, 12 500...) для ускорения рендеринга. LightningChart не использует даунсемплинг, и отображает все точки, при этом демонстрируя отличную производительность. С более подробными результатами тестов можно ознакомиться здесь.

Как же работать с LightningChart? LC является простой в освоении и работает как высокоуровневый графический движок, предоставляя удобный доступ к всевозможным методам отображения информации. Очень большое внимание разработчики уделили простоте и компактности кода. Рассмотрим простейший пример статичной диаграммы со случайными данными:



Пакет LC поддерживает как Windows Forms, так и WPF, однако первый вариант уже порядком устаревает, поэтому обратимся к WPF.
Выбрав в качестве среды разработки Visual Studio (раз уж мы пишем на .NET) и убедившись, что в систему установлен LightningChart SDK, который можно бесплатно попробовать здесь, создадим новый WPF-проект на C#. После этого добавим компонент «LightningChartUltimate» (в случае, если вы пользуетесь Ultimate версией) из тулбокса на пустую форму. Присутствует также возможность динамически создать объект LightningChartUltimate и прикрепить к форме, однако в данном туториале мы её не коснемся.




В первую очередь редактируем XAML-код, чтобы при масштабировании окна график также масштабировался. В результате код выглядит примерно так:

<Window x:Class="Arction_tutorial1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" xmlns:lcu="http://www.arction.com/schemas/">
    <Grid UseLayoutRounding="True">
        <lcu:LightningChartUltimate HorizontalAlignment="Stretch" Name="lightningChartUltimate1" VerticalAlignment="Stretch" Margin="0" />
    </Grid>
</Window>


Далее нам остается лишь настроить график и заполнить его случайными данными, отредактировав MainWindow.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

//Добавляем библиотеки нашего API, используемые в данном примере
using Arction.WPF.LightningChartUltimate;
using Arction.WPF.LightningChartUltimate.Views.ViewXY;
using Arction.WPF.LightningChartUltimate.SeriesXY;
using Arction.WPF.LightningChartUltimate.Axes;

//Не забудьте использовать namespace, аналогичный названию проекта в VS
namespace Arction_tutorial1
{
    /// <summary>
    /// Функционал MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
            InitializeChart();
        }

        private void InitializeChart()
        {
            //Инициализировать чарт
            lightningChartUltimate1.BeginUpdate();

            //Записываем двухмерный компонент LightningChart в отдельную переменную для простоты работы
            ViewXY chartView = lightningChartUltimate1.ViewXY;

            //Записываем объект стандартной X-оси в отдельную переменную для удобства
            AxisX axisX = chartView.XAxes[0];
            // Задаем диапазон отображаемых значений
            axisX.SetRange(0, 20);
            axisX.ValueType = AxisValueType.Number;

            //Проводим аналогичную операцию с Y - осью 
            AxisY axisY = chartView.YAxes[0];
            axisY.SetRange(0, 100);

            //Добавляем линейный график
            PointLineSeries pls = new PointLineSeries(chartView, axisX, axisY);
            pls.PointsVisible = true;

            //Получаем случайные данные
            Random rand = new Random();
            const double dInterval = 1;
            int iPointCount = (int)((axisX.Maximum - axisX.Minimum) / dInterval) + 1;
            SeriesPoint[] aPoints = new SeriesPoint[iPointCount];
            for (int iPoint = 0; iPoint < iPointCount; iPoint++)
            {
                aPoints[iPoint].X = (double)iPoint;
                aPoints[iPoint].Y = 100.0 * rand.NextDouble();
            }

            //присваиваем графику массив полученных данных
            pls.Points = aPoints;

            //Добавляем график в двухмерный компонент
            chartView.PointLineSeries.Add(pls);

            //Применяем изменения, перерисовывая график
            lightningChartUltimate1.EndUpdate();
        }
    }
}


Компилируем, запускаем и получаем желаемый результат:


Различные туториалы можно найти здесь.

На данный момент LightningChart применяется в самых разных сферах, начиная от химических лабораторий и тяжелой промышленности и заканчивая атомными станциями и аэрокосмическими исследованиями. Скорость обработки и вывода данных, недоступная с помощью любого другого программного продукта, позволяет увеличивать эффективность работы предприятий и повышать качество исследований.



Основные особенности LightningChart Ultimate:

  • Программные компоненты на платформе .NET
  • Поддержка WPF и Windows Forms
  • Наибольшая скорость визуализации среди конкурирующих продуктов
  • Простота в освоении
  • Использование низкоуровневой HLSL-оптимизации
  • Продвинутые инструменты 2D и 3D визуализации
  • Углубленная поддержка карт и геологических данных
  • Полная техническая поддержка клиентов


Для ознакомления есть бесплатная 30-дневная версия программного пакета, включающая в себя инструменты для разработки и демонстрационное приложение.

Каждому покупателю программного пакета из России и СНГ Arction предоставляет скидку 10% на продукцию компании.
Более подробная информация доступна на сайте lightningchart.com. В штате компании есть русскоязычные сотрудники, способные дать техническую консультацию.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.