| Библиотека деловой и научной графики ChartLib Версия 1.3, июль 2006, © , FORECSYS

| Библиотека функций ChartLib предназначена для построения графиков по таблицам данных. ChartLib строит графики различных типов. Среди них двумерные графики, содержащие точки, линии и многоугольники; графики с разрывной горизонтальной осью; многодневные графики; биржевые свечные графики; вертикальные и горизонтальные гистограммы; сетевые и древовидные схемы.
| Библиотека ChartLib имеет собственный формат входных данных CHD (CHart Description). Файлы формата CHD представляют собой обычный табулированный текст с «вкраплением» командных строк, задающих структуру и внешний вид графика (см. примеры). Поддерживается более 150 команд (см. также Глоссарий команд), более 50 свойств точек графика, имеется встроенный калькулятор арифметических выражений.
| ChartLib позволяет выводить графики в окно прикладной программы, на принтер и в файлы графических форматов BMP, EMF, PNG, JPEG, GIF. Графические изображения могут быть импортированы в офисные документы через буфер обмена. ChartLib имеет богатые возможности для работы с цветами, заливками, рамками, формой объектов, и т.д., позволяя создавать профессиональный дизайн графиков.
| При выводе графика в окно ChartLib позволяет масштабировать и сдвигать изображения, выделять точки и просматривать дополнительную информацию о них, выбирать подмножества точек и выводить по ним отдельную информационную таблицу. В режиме трехмерной графики поддерживаются произвольные перемещения по сцене.
| Несколько графиков могут быть отображены на одном слайде. При этом поддерживается возможность синхронного масштабирования осей. Несколько слайдов могут быть собраны в фильм. При выводе графика в окно можно включить режим просмотра фильма, когда слайды будут сменять друг друга автоматически.
| Библиотека ChartLib может использоваться для генерации часто обновляемых графиков в Интернете (биржевой информации, голосования, серверной статистики). Она позволяет генерировать PNG, JPEG или GIF изображения с частотой до нескольких раз в секунду (в зависимости, конечно, от сложности изображения). Библиотека ChartLib переносима под UNIX.

На основе библиотеки ChartLib разработан пакет программ ChartLive для MS Windows, в состав которого входят:

- Приложение chdView.exe для просмотра файлов формата CHD.
- Утилита chdConv.exe для преобразования файлов формата CHD в графические изображения форматов BMP, EMF, PNG, JPEG или GIF.
- Утилита ttf2clf.exe для формирования растровых шрифтов собственного формата CLF, используемых при генерации графических изображений.
- Компонент SliChart.pas
для встраивания графиков в собственные приложения, разрабатываемые в среде DELPHI.
- Примеры CHD-файлов.

В свободно распространяемую демо-версию пакета ChartLive входит только программа chdView.exe и примеры CHD-файлов. Демо-версия исключает любые коммерческие применения программы. Можно свободно использовать её для учебных и научных целей.

# Введение: входной формат CHD

Введение

- Строки данных
- Объекты: фильмы, слайды, панели, области
- Области на панелях 2D, pie, text и на слайдах
- Строки управляющих команд
- Пример 1: Достаточно всего двух команд
- Пример 2: И всё-таки двух команд не достаточно
- Пример 3: Несколько графиков на слайде
- Пример 4: Биржевые торги — необычный ракурс
- Пример 5: Можно обходиться без данных

## Синтаксис формата CHD

Библиотека ChartLib ориентирована на приём входных данных в виде потока строк формата CHD (CHart Description).

Строки могут быть двух видов: управляющие команды и данные.

Управляющие команды начинаются символом # в первой позиции. Пустые строки игнорируются. Строки, начинающиеся с ##, воспринимаются как комментарии и также игнорируются. Если в конце строки стоит многоточие "...", то она продлевается на следующую строку.

## Введение: Синтаксис строк данных

По мере поступления строки данных дописываются снизу к текущей матрице. Слайд может иметь любое количество матриц, но текущей в каждый момент времени является только одна. Поток данных можно переключать с одной матрицы на другую с помощью команды Data. Значения внутри текстовой строки данных разделяются запятыми или символами табуляции. Значения, содержащие текущий разделитель, необходимо заключать в кавычки.

Даты задаются в формате YY[YY]/M[M]/D[D] или D[D]/M[M]/YYYY. Время задаётся в формате hh[:mm[:ss]]. Дата и время отделяются пробелом или знаком подчёркивания. Если задана только дата, время полагается равным 00:00:00. Если задано только время, в качестве даты берётся значение параметра SystemDate или системная (сегодняшняя) дата, если этот параметр не задан. Значения типа дата/время можно также задавать целыми числами, совместимыми с типом time_t языка С, обычно такое число интерпретируется как число секунд, прошедших с полуночи 1 января 1970 года.

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

Синтаксис строк данных можно настроить с помощью команды Syntax. Она позволяет изменить допустимые разделители, символы кавычек и кодировку пустых значений.

## Введение: Объекты

Библиотека ChartLib оперирует объектами четырёх уровней:

- фильмами
- слайдами
- панелями
- областями

Слайды
Основным рабочим объектом является слайд. Слайд — это изображение, которое целиком выводится в пользовательское окно или графический файл.

Слайд создаётся командой NewSlide. Созданный слайд сразу становится активным — именно к нему будут относиться все последующие команды и строки данных. Переключить активный слайд можно в любой момент с помощью команды Slide.

Фильмы
Фильм — это последовательность слайдов. При просмотре слайда в окне пользователь имеет возможность переключаться с одного слайда на другой внутри одного фильма.

Слайд вставляется в фильм командой SetFilm. Слайд не может принадлежать нескольким фильмам одновременно. Внутри фильма слайды располагаются в порядке их создания.

Задать имя фильма можно также при создании слайда командой NewSlide. По умолчанию, если имя фильма не задано, слайд вставляется в фильм с именем default.

Панели на слайдах
Слайд может содержать один или несколько графиков, текстовые поля и легенду. График вместе с примыкающими к нему вспомогательными областями (заголовками, осями и их названиями) образует панель. Каждая панель имеет уникальное имя, которое даётся ей при создании командой NewPanel. Созданная панель сразу становится активной, и в неё направляется входной поток команд. Любую панель можно активизировать по имени или порядковому номеру на слайде командой Panel.

Если на слайде создано несколько панелей, их размещение и относительные размеры задаются командой Group. Без этой команды панели имеют одинаковый размер и размещаются друг под другом.

Использовать команды SetFilm, NewSlide и NewPanel в явном виде не обязательно. Если их не использовать, будет автоматически создан фильм default с единственным слайдом default, содержащий единственную панель с именем default.

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

### Области на панелях 2D

Chart | Двумерный график — основной объект на панели
Title | Заголовок графика, выводимый над графиком
TitleBelow | Заголовок графика, выводимый под графиком
XAxis | Горизонтальная ось
YAxis | Основная вертикальная ось
ZAxis | Вторая вертикальная ось. Не изображается, если ни одна точка графика не имеет параметра Z
XName | Название горизонтальной оси, размещается внизу
YName | Название основной вертикальной оси, размещается вверху слева
ZName | Название второй вертикальной оси, размещается вверху справа
TextNear | Текстовое поле для надписей рядом с точками
TextInner | Текстовое поле для надписей внутри точек
TextRight | Текстовое поле для надписи рядом с активной точкой

### Области на панелях pie

Chart | Круговая диаграмма — основной объект
Title | Заголовок над графиком
TitleBelow | Заголовок под графиком
TextNear | Текстовое поле для надписей рядом с секторами
TextInner | Текстовое поле для надписей внутри секторов
TextRight | Текстовое поле для надписи рядом с активным сектором

### Области на панелях text

Text | Текстовое поле — основной объект

### Области на слайдах

StatusBar | Панель 0 — статусная строка

## Введение: Синтаксис управляющих команд

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

Управляющие команды бывают трёх видов:

    # имя_объекта . имя_параметра = значение
    # имя_параметра = значение
    # имя_объекта = значение

В первом случае команда присваивает значение параметру указанного объекта на текущем слайде. Текущий слайд также является объектом. К нему можно обратиться по имени Slide или по имени, данному ему при создании командой NewSlide.

Во втором случае имя объекта опущено, и команда относится к текущему объекту на слайде. Для всех графиков это объект Chart. Если на слайде несколько панелей с графиками, то текущим считается объект Chart на панели, активизированной последней командой Panel или NewPanel. Текущая панель также является объектом, и к ней можно обратиться по имени Panel или по имени, данному ей при создании командой NewPanel.

В третьем случае имя параметра опущено, и команда относится к основному свойству объекта. Для заголовков, названий осей и других текстовых объектов основным свойством является Text, для легенды — Line. Например, следующие команды эквивалентны:

    #Title.Text = график зависимости
    #Title = график зависимости

При поиске объекта по имени сначала просматриваются все объекты текущей панели, затем все объекты текущего слайда. Если объект не найден, команда игнорируется. Описанные правила служат для сокращения записи и позволяют в большинстве случаев обходиться командами "без точки".

Некоторые команды не относятся ни к одному из объектов. Они служат для управления слайдами и установки глобальных параметров.

Знак равенства можно заменять пробелом. Имена команд чувствительны к регистру. Например, команда Visible=on верна, а команда visible=on — ошибочна и будет проигнорирована.

## Введение: Пример 1
Достаточно всего двух команд

Формат CHD очень прост, если не заниматься дизайном графика. Для описания графика вполне хватает двух команд NewData и Series, за которыми следуют строки данных.

Команда NewData создаёт новую матрицу данных с заданными столбцами и делает её текущей. Число значений в каждой последующей строке данных должно равняться количеству столбцов в матрице.

Команда Series создаёт серию точек на графике и описывает её свойства, такие как X-координата, Y-координата, цвет, форма точки, и т.д. Каждое свойство может быть либо константой, либо именем столбца данных из какой-либо матрицы текущего слайда. Cвойства точек подробно описаны в разделе Серии.

Следующий график показывает динамику цен и объёмов торгов акциями компании ЛУК ОЙЛ на ММВБ с февраля по ноябрь 1999 года.

График был построен по входному потоку данных, содержавшему по 3 значения в каждой строке: дату, цену и объём. Каждая строка соответствовала одному дню. Ниже приводится начальный отрывок входного потока:

    #NewData day, price, value
    #Series X=day Y=price S=0 LC=1
    #Series X=day Z=value S=0 LC=3
    28/01/99 25.35 216335
    29/01/99 25.68 124938
    01/02/99 25.57 10226
    ...

У этого графика много недостатков: даты отображаются числами, отсутствует заголовок и названия осей, слишком много нулей в метках правой вертикальной оси, и так далее... Таково форматирование графика по умолчанию.

## Введение: Пример 2
И всё-таки двух команд не достаточно

Тот же график можно сделать существенно более понятным и привлекательным, если задать фоновую заливку, установить русскую локализацию, добавить заголовки и ещё несколько команд форматирования:

    #Locale= rus
    #Slide.Background = 17 17 7 7, bidir
    #Slide.GradMaxSize = 2
    #Title Торги акциями ЛУК ОЙЛ, 1999 год
    #YName = цена
    #ZName= объём, млн. руб
    #XAxis.Type = date
    #YAxis.Color = 1
    #ZAxis.Color = 3
    #NewData day, price, value
    #Let vmill= value / 1000000
    #Series X=day Y=price S=0 LP=2 LW=2 LC=1
    #Series X=day Z=vmill S=0 LP=2 LW=1 LC=3 FD=1 FP=2 FC=15
    #Series X=day Z=0 S=0

    28/01/99 25.35 216335
    29/01/99 25.68 124938
    01/02/99 25.57 10226
    ...

## Введение: Пример 3
Несколько графиков на одном слайде

Продолжим пример с графиком хода торгов. Биржевые графики часто рисуют друг под другом: сверху цены, снизу объёмы. Ход цены изображают с помощью интервальных гистограмм или японских подсвечников:

Данные для этого графика те же самые, что и в примерах 1 и 2. Слайд разбивается на две панели командами NewPanel. Команда Group размещает эти панели друг под другом и говорит, что верхняя панель в три раза выше. Команда CandleWidth задаёт ширину подсвечников в секундах (в данном случае одна неделя).

    ## определяем данные
    #NewData day, price, value
    #Let vmill= value / 1000000
    #Slide.Background = 17 17 7 7, bidir
    #Slide.GradMaxSize = 2

    ## определяем верхнюю панель цен
    #NewPanel price
    #Title Торги акциями ЛУК ОЙЛ, 1999 год
    #YName = цена
    #XAxis.Type = date
    #XAxis.Visible off
    #Series X=day MC=price MS=2 C=7
    #CandleWidth 1 weeks

    ## определяем нижнюю панель объёмов
    #NewPanel volume
    #Title.Border 0, 1, 0, 1
    #Title.IndentVert = 0
    #XAxis.Type = date
    #XAxis.SpaceVert = 1
    #XAxis.IndentVert = 0
    #Series X=day MC=vmill ML=0 MS=3 C=15
    #CandleWidth = 1 weeks

    ## располагаем панели друг под другом, синхронизируем оси
    #Group (3,1)(1) main = price, volume
    #SyncAxis price.XAxis, volume.XAxis

    27/01/99 24.85 66913
    28/01/99 25.35 216335
    29/01/99 25.68 124938
    ...

## Введение: Пример 4
Биржевые торги — необычный ракурс

Можно пойти дальше и построить третий график по тем же колонкам данных. Например, это могла бы быть гистограмма распределения объёмов торгов по ценам, дающая нестандартное представление биржевых торгов.

Создадим ещё одну панель и разместим на ней гистограммную серию. Для построения гистограммы распределения необходимы две дополнительных команды. HorizHist говорит, что гистограмма горизонтальная и каждая точка отображается отдельно внутри столбца. Команда ColWidth задаёт ширину колонки гистограммы.

    ## определяем данные
    #NewData day, price, value
    #Let vmill= value / 1000000
    #Slide.Background = 17 17 7 7, bidir
    #Slide.GradMaxSize = 2

    ## определяем верхнюю панель цен
    #NewPanel price
    #Title Торги акциями ЛУК ОЙЛ, 1999 год
    #YName = цена
    #XAxis.Type = date
    #XAxis.SpaceVert = 1
    #XAxis.IndentVert = 0
    #XAxis.RulePose both
    #Series X=day MC=price MS=2 C=7
    #CandleWidth 1 weeks

    ## определяем нижнюю панель объёмов
    #NewPanel volume
    #Title.IndentVert = 0
    #XAxis.Type = date
    #XAxis.Visible off
    #Series X=day MC=vmill ML=0 MS=3 C=15
    #CandleWidth = 1 weeks

    ## определяем правую панель с гистограммой объёмов
    #NewPanel hist
    #HorizHist = detailed
    #ColWidth = 5
    #YAxis.Visible off
    #Series Y=price HW=vmill HS=time C=15

    ## располагаем панели друг под другом, синхронизируем оси
    #Group (3,1)(2,1) main = price, hist, volume
    #SyncAxis price.XAxis, volume.XAxis
    #SyncAxis price.YAxis, hist.YAxis

    27/01/99 24.85 66913
    28/01/99 25.35 216335
    29/01/99 25.68 124938
    ...

## Введение: Пример 5
Можно обходиться без данных

Точнее, данные можно вычислять по формулам. Например, чтобы построить график функции номального распределения, достаточно всего четырёх строк описания:

    #Let x= pointno/5-4
    #Let y= FNorm(x)
    #ResizeData 40
    #Series X=x Y=y

Команда Let создаёт новый столбец данных, значения в котором вычисляются по указанной формуле. Встроенная переменная pointno даёт порядковый номер текущей точки, а команда ResizeData устанавливает число строк в столбцах x и y, то есть число точек на графике.

Вот что в итоге получается:

# Управляющие команды

Команды

- Общие свойства, применимые ко всем объектам
- Свойства текстовых полей
- Свойства легенды
- Свойства осей
- Управление потоком данных
- Свойства графиков и гистограмм
- Свойства гистограмм
- Параметры трёхмерных изображений
- Команды управления слайдами и фильмами
- Панели на слайдах
- Команды интерактивного режима
- Глобальные команды
- Файловые команды
- Отладочные команды
- Анахронизмы
- Палитра цветов

Условные обозначения в описаниях команд:

- Допустимые значения параметров выделяются полужирным. Как и команды, они чувствительны к регистру. Поэтому команда Visible=on верна, а команда Visible=On — нет.
- Необязательные параметры команд заключаются в квадратные скобки [...]
- Свойства со значением b являются булевскими (логическими) и принимают значения on, yes, true или 1, обозначающие "да", и off, no, false или 0, обозначающие "нет".
- Свойства со значением color являются номером цвета в палитре цветов.

## Команды: Общие свойства, применимые ко всем объектам

В этом разделе описаны свойства, которыми обладают все объекты без исключения: слайды, панели, графики, оси, тексты.

### Visible = b

Отображать объект. Visible=off скрывает объект.

Совет:
Применяйте команду #Slide.Visible=off, если хотите, чтобы слайд пропускался при прокрутке фильма.

### Color = color

Основной цвет объекта. Параметр color задаёт номер цвета в палитре.

### BorderColor = color

Цвет рамки объекта. Параметр color задаёт номер цвета в палитре.

### Border = wL [ , wT, wR, wB ]

Толщина рамки объекта. Команда с четырьмя аргументами задаёт толщину 4-х сторон рамки: левой, верхней, правой и нижней соответственно. По умолчанию рамок нет.

### Border3D = we, wi

Ширина внешней we и внутренней wi фаски рамки для объёмного эффекта. Если перед шириной поставить минус, то фаска вдавленная, иначе — выпуклая. Сумма we и wi не должна превышать значение Border. По умолчанию объёмный эффект отсутствует: we = wi = 0.

### Background = color

Цвет фона объекта. Параметр color задаёт номер цвета в палитре.

### Background = LT, TR, RB, BL [ , bidir ]

Отображать фон объекта градиентной заливкой.

Первые четыре параметра задают цвета левого верхнего, правого верхнего, правого нижнего и левого нижнего углов закрашиваемой области соответственно. Эффективность прорисовки выше для вертикального (LT=TR, RB=BL) и горизонтального (TR=RB, BL=LT) градиента.

Необязательный параметр bidir задаёт двустороннюю заливку.

### Background = off

Отключить прорисовку фона. Объект изображается поверх имеющегося фона.

### Transparency = n

Прозрачность фона; n может принимать вещественные значения от 0 (прозрачный фон) до 1 (непрозрачный). По умолчанию 1. Если для фона задана градиентная заливка, параметр Transparency игнорируется.

Совет:
Применяйте эту команду к объекту TextRight, чтобы задать полупрозрачный транспарант для вывода текстового комментария рядом с активной точкой.

### GradMaxSize = n
GradMinCells = n

Параметры эффективности градиентной заливки. Заливка рисуется сеткой из прямоугольных ячеек различных цветов. GradMaxSize задаёт максимальный размер ячейки в пикселах (по умолчанию 20). GradMinCells задаёт минимальное число ячеек (по умолчанию 20).

### FontStyle = style

Стиль шрифта текста, style может принимать одно из имён, описанных командой DefFont. По умолчанию стиль шрифта устанавливается в соответствии с назначением текстового поля и принимает одно из предопределённых значений: title, name, label, info, inside, near, right, status.

### IndentHoriz = n

Горизонтальный отступ слева и справа от основного содержимого объекта.

### IndentLeft = n
IndentRight = n

Горизонтальный отступ соответственно слева и справа от основного содержимого объекта.

### IndentVert = n

Горизонтальный отступ слева и справа от основного содержимого объекта.

### IndentTop = n
IndentBottom = n

Вертикальный отступ соответственно слева и справа от основного содержимого объекта.

### SpaceHoriz = n

Горизонтальный промежуток между отдельными элементами внутри объекта.

### SpaceVert = n

Вертикальный промежуток между отдельными элементами внутри объекта.

### MinWidth = len
MinHeight = len

Минимальная ширина и высота области в пикселах. Используется для тонкой настройки расположения осей и текстов на графиках.

Совет:
С помощью команды #ZAxis.MinWidth=10 можно слегка отодвинуть правый край графика от границы слайда.

### Style = style_name

Применить к объекту стиль с именем style_name, ранее определёный командой DefStyle.

Пример: последовательность команд

    #DefStyle bsty
        #Background 17
        #Border 2
    #EndStyle
    #XAxis.Style bsty

эквивалентна командам

    #XAxis.Background 17
    #XAxis.Border 2

Поскольку все команды по умолчанию направляются на текущий слайд, установка стиля для самого слайда Slide.Style действует как макрос. При этом содержимое стиля исполняется в точности так, как если бы оно было записано вместо этой команды.

Невозможно определить стиль, с помощью которого можно было бы задавать общие свойства как слайду, так и другим объектам. Например, команда

    #Slide.Style bsty

изменит свойства Background и Border не для самого слайда, а для объекта Chart, так как для слайда он является текущей областью и все команды "без точки" направляеются именно ему.

### Button oper = butt

Переопределить функционирование кнопок мыши при выполнении операции oper над объектом. Имя операции oper может принимать следующие значения:
Shift — сдвиг (графика или оси);
Zoom — масштабирование (графика или оси);
Select — выбор (точки на графике);
Activate — активизация (точки на графике);
Execute — запуск команды (соответствующей точке на графике);
Ignore — игнорировать нажатие.
Комбинация кнопок butt может принимать следующие значения (при совмещении нескольких кнопок значения отделяются запятой или плюсом): shift, alt, ctrl, left, right, middle, double. Стандартное функционирование кнопок устанавливается аналогичной командой DefaultButton.

Совет: При использовании возможности запуска точек (свойство TE) рекомендуется переопределить #Button Activate=right, чтобы избежать одновременного выполнения функций Activate и Execute.

## Команды: Свойства текстовых полей

К текстовым полям относятся: заголовки графика Title и TitleBelow; названия осей XName, YName, ZName; текстовые поля TextInner, TextRight и TextNear; панели типа text, легенды и статусная строка StatusBar. Текстовые поля могут быть многострочными с заранее заданным разбиением на строки.

### Text = text

Выводимый текст. Строки разделяются символом \n. Является основным свойством для текстовых объектов, поэтому следующие команды эквивалентны:

    #Title.Text = график синуса
    #Title = график синуса

### Justify = s

Горизонтальное выравнивание строк текста, s может принимать значения left, center, right.

### Shadow = x, y, t, s

Текст отбрасывает тень. Параметры x и y задают смещение тени, число t в диапазоне от 0 до 1 — прозрачность тени (0 соответствует невидимой тени, 1 — полностью непрозрачной). число s — размытость тени в пикселах. По умолчанию t = 0.5, s = 0.

Если x = y = 0 или t = 0, то тень не изображается.

## Команды: Свойства легенды

Легенда представляет собой отдельную панель с комментариями. Слева от каждого комментария находится пиктограмма.

Легенда создаётся командой NewPanel с указанием типа панели legend. После этого легенду необходимо сгруппировать командой Group с остальными панелями слайда.

### Line = name : list -text

Задать очередную строку легенды. Строка состоит из пиктограммы, задаваемой списком параметров list и комментария text. В списке list указываются свойства C, W, S, O, TC, LC, LW, LS, LA, FC, FS, FD и их числовые значения аналогично команде Series.

Строке легенды можно присвоить имя name. Если имя не указано, по умолчанию будет установлено имя "LineN", где N — порядковый номер данной строки в легенде. Повторное описание строки легенды с уже существующим именем не создаёт новую строку, а модифицирует старую.

Свойство Line является основным свойством панели легенды, поэтому ключевое слово Line вместе с предшествующей ему точкой можно опускать.

Пример:

    #NewPanel MainChart
    #NewPanel Legend: legend
    #Legend.Line C=5 S=3 W=8 LC=3 LW=2 -Первый тренд
    #Legend W=0 LC=13 LW=1 -Второй тренд
    #Group (1,0)(1) AllPanels = MainChart, Legend
    ## далее следует формирование графика
    #Panel MainChart

### Clear

Очистить панель легенды, удалив все строки. Команда Clear применяется в тех случаях, когда легенду нужно сформировать заново.

### PlacingStyle = s

Способ размещения строк легенды:
table — горизонтальная таблица фиксированной ширины;
vtable — вертикальная таблица фиксированной высоты;
column — в одну колонку, не поместившиеся строки игнорируются;
lines — плотно в несколько строк.
Способы table и lines лучше подходят для размещения легенды под графиком. Способы vtable и column лучше подходят для размещения легенды сбоку от графика. По умолчанию PlacingStyle = table.

### PatternWidth = n
PatternHeight = n

Ширина и высота пиктограмм в пикселах, по умолчанию 23 и 8 соответственно.

## Команды: Свойства осей

Оси изображаются сбоку от графика, содержат линейку и текстовые метки. Оси могут быть горизонтальными и вертикальными. Горизонтальные оси могут быть разрывными.

### Type = type

Тип оси:
date — по оси откладываются даты;
time — по оси откладывается время;
real — числовая ось (по умолчанию).
Тип оси влияет на формат вывода меток и цену деления линейки.

### DateTimeRange = date1, date2, time1, time2

Разрывная горизонтальная ось дат-времени с диапазоном дат date1-date2 и диапазоном времени time1-time2 внутри каждой даты. Тип такой оси автоматически устанавливается в time, поэтому команду Type можно не задавать.

Если свойство графика Chart.EmptyIntervals выключено, то будет произведён анализ данных и все интервалы, не содержащие данных, удалятся из оси. По умолчанию это свойство выключено.

### Ranges = min1 , max1 [, per1 , n1] | ... | minN , maxN [, perN , nN]

Разрывная горизонтальная ось, составленная из N диапазонов. Каждый диапазон — это либо один интервал [min, max], либо серия из n интервалов равной длины, отстоящих друг от друга на величину периода per:
[min, max],
[min + per, max + per],
... и так далее до ...
[min + (n-1) per, max + (n-1) per].
Диапазоны обязаны идти в порядке возрастания, не перекрывая друг друга (значение max + (n-1) per для i-го диапазона не должно превосходить min для (i+1)-го диапазона).

Если свойство графика Chart.EmptyIntervals выключено, то будет произведён анализ данных и все интервалы, не содержащие данных, удалятся из оси. По умолчанию это свойство выключено.

Для оси дат-времени тип Type=time должен быть установлен перед командой Ranges.

### RangesStyle = s

Стиль выделения диапазонов при отображении разрывной горизонтальной оси, s принимает значения:
off — диапазоны не выделяются;
wired — диапазоны отделяются линиями;
solid — диапазоны выделяются фоном.
По умолчанию wired.

### Back = b

Направить ось в противоположную сторону (для горизонтальных осей справа налево, для вертикальных осей сверху вниз). По умолчанию #Back=off.

### SyncMaster = b

Если off, то масштаб оси является зависимым от масштабов синхронизированных осей. По умолчанию on.

Совет:
Применяйте эту команду в том случае, когда оси двух графиков синхронизированы, но определяющим при выборе масштаба является только один график. Чтобы точки второго графика не учитывались при автоматическом масштабировании, задайте для него #SyncMaster=off.

### Rule = width, depth, tickext, tickint
Rule = off

Параметры линейки, изображающей шкалу оси. Если один, два или три последних параметра опущены, их значения не меняются. В скобках приводятся значения по умолчанию:
width (3) — ширина линейки, если width<0, то рисуются только деления шкалы;
depth (0) — отступ от поля графика до линейки, если отрицательный, то линейка налезает на график;
tickext (2) — внешний (направленный к полю графика) выступ тиков;
tickint (3) — внутренний (направленный от поля графика) выступ тиков.
Второй вариант команды убирает линейку.

### RulePose = s

С какой стороны оси изображать линейку, s принимает значения:
left — слева;
right — справа;
top — сверху;
bottom — снизу;
both — с обеих сторон.
Для вертикальных осей по умолчанию right, для горизонтальных — top.

### RuleColor = color

Цвет линейки. Параметр color задаёт номер цвета в палитре. Цвет текстовых надписей около делений линейки устанавливается командой Color.

### IntervSpace = p

Только для разрывной горизонтальной оси. Максимальная суммарная толщина всех разделителей интервалов в процентах относительно ширины оси. По умолчанию 4%. Кроме того, толщина разделителя не превышает значения SpaceHoriz для данной оси.

### LabelDist = s

Оптимальное расстояние между соседними текстовыми метками, по умолчанию 6.

### Labels = b

Отображать на оси текстовые метки.

### AlignTicks = b

Выравнивать (расширять) диапазон оси так, чтобы крайние ячейки помещались на график целиком. По умолчанию off.

### Justify = s

Горизонтальное выравнивание текстовых меток:
left — влево;
right — вправо;
center — по центру;
auto — оптимальное (по умолчанию).

### LabelFormat = format

Формат вывода меток оси. Если не задан, оптимальный формат подбирается автоматически. Для оси типа real форматная строка format должна содержать одну из спецификаций f, e, E, g, G. Для оси типа time формат задаётся с помощью спецификации вывода дат и времени.

Пример:
Команда LabelFormat=%.2f ограничивает вывод чисел двумя знаками после запятой.

### DateFormat = format

Формат вывода дат для оси типа date или разрывной многодневной оси. По умолчанию %#d%b %y. Форматная строка format задаётся с помощью спецификации вывода дат и времени.

### ThousandsSep = s

Вставлять разделители тысяч в числовые метки на оси, s принимает значения:
off — не вставлять;
on — вставлять;
auto — применять локальную установку в операционной системе (по умолчанию).

## Команды: Управление потоком данных

Все команды, управляющие потоком данных, являются свойствами слайда. Слайд имеет одну или несколько матриц. Входные строки данных поступают в ту матрицу, которая в данный момент объявлена текущей. Матрицы являются основным источником данных для построения графиков.

Свойство графика Series позволяет установить соответствие между столбцами данных в матрицах и свойствами серий точек.

### NewData n = [type1] name1 , ... , [typeN] nameN

Создать новую матрицу данных с именем или номером n, состоящую из N столбцов. Созданная матрица становится текущей. Все строки данных, следующие за этой командой, должны содержать по N значений. Каждый столбец задаётся своим именем name, перед которым через пробел может быть указан тип хранимых в столбце данных type:
byte — целые,
real — вещественные,
text — текстовые.
Если тип type опущен, предполагается real.

Имя матрицы n может быть опущено, но тогда к ней нельзя будет обратиться по имени в командах Data, ClearData, DeleteData и ResizeData.

### Data = n

Сделать текущей матрицу данных с именем или номером n. Число значений во всех строках данных, следующих за этой командой, должно быть равно числу столбцов в матрице n.

Совет:
Если на Вашем слайде несколько матриц, и строки данных поступают вперемежку, используйте команду Data.

### ClearData = n

Очистить матрицу с именем или номером n. Число строк в матрице становится равным нулю, число и типы столбцов сохраняются. Если имя опущено, очищается текущая матрица.

### DeleteData = n

Удалить все столбцы данных (включая выражения, заданные командой Let) в матрице с именем или номером n. Данный способ очистки является более радикальным по сравнению с ClearData. Если имя опущено, очищается текущая матрица.

### Let [type] name = expr

Создать в текущей матрице столбец данных с именем name и типом type, вычисляющийся по выражению expr. Выражения могут содержать в качестве переменных имена столбцов из одной или нескольких матриц данных. Тип данных type может принимать одно из трёх значений:
byte — целые,
real — вещественные,
text — текстовые.
Если тип type опущен и не определяется однозначно по типу выражения, то предполагается real.

Вычислимый столбец не содержится в исходных данных и не хранится в памяти, а вычисляется для каждой точки по заданному выражению expr.

Если имя name совпадает с именем уже существующего в текущей матрице столбца, то команда Let создаст ещё один столбец с тем же именем. В последующих выражениях и сериях будет использоваться второй столбец, а первый станет недоступен. Для переопределения столбца следует пользоваться командой Relet, имеющей аналогичный синтаксис.

Если знак равенства и выражение expr опущены, то создается столбец хранимых данных. Такие данные можно использовать в свойстве DS для синхронного выделения точек на нескольких сериях.

Совет:
Чтобы взять столбец данных из другого слайда, используйте в качестве имени переменной конструкцию slide.name, где slide — имя слайда.

Альтернативный способ: после команды #DataSlide=slide к столбцам указанного слайда можно обращаться без явного указания имени слайда и точки.

### Relet [type] name = expr

Создать в текущей матрице столбец данных с именем name и типом type, вычисляющийся по выражению expr. Команда аналогична команде Let за исключением того, что при попытке повторно определить столбец c тем же именем, предыдущий столбец заменяется новым везде, где он был использован.

### LetBounds name = [min; max]

Установить минимальное и максимальное значение для столбца данных с именем name. По умолчанию максимум и минимум вычисляются автоматически в процессе формирования данных. Необходимость изменить эти значения возникает в редких случаях, например, для явного задания диапазона интенсивностей цвета в свойствах I, LI, FI. Команда действует только на столбцы типа real, для остальных столбцов она игнорируется.

Если значения min и max не указаны, команда восстанавливает стандартные (автоматические) значения минимума и максимума.

### ResizeData [n] rows

Задать число строк в матрице с именем или номером n равным rows. Обычно число строк в матрице определяется автоматически по мере поступления строк данных. Команда ResizeData необходима только в том случае, когда все векторы в матрице были созданы командой Let и являются вычислимыми.

Если имя матрицы n опущено, команда применяется к текущей матрице.

## Команды: Файловые команды

### Include filename

Включить во входной поток строк содержимое текстового файла формата CHD с именем filename.

### SetReload [all | below | last] [data] [commands]

Программа просмотра CHD-файлов может автоматически отслеживать изменения в исходных файлах и соответствующим образом обновлять слайды. Это полезно в тех случаях, когда одно приложение, обрабатывая поток данных, формирует один или несколько CHD-файлов, а другое приложение (например, chdView) отображает текущее состояние графиков.

Команда SetReload указывает, какие действия производить после обнаружения модификации файла.

all — заново прочитать весь файл целиком;
below — заново прочитать содержимое файла ниже данной команды;
last — прочитать только новые добавленные строки;
data — загружать данные;
commands — выполнять команды.
Если команда SetReload в файле не встречается, автоматисеские обновления не производятся.

## Команды: Свойства двумерных графиков и гистограмм

График состоит из серий. Серия состоит из точек. Каждая точка имеет около 50 свойств. Обычно большинство свойств задаются константами или вообще опускаются. В таком случае они являются свойствами серии.

Серия не является самостоятельным объектом. Все команды, перечисленные в настоящем разделе, являются свойствами объекта Chart на панелях типа 2D.

### Series name : property1=value1 , ... , propertyN=valueN

Создать на графике новую серию точек с именем name и набором свойств property1, ... , propertyN. Каждое свойство серии задаётся одно- или двух-буквенным именем property и значением value. Значением может быть либо имя столбца данных, либо числовая константа. Можно указывать имя столбца данных с другого слайда с помощью конструкции slide.name, где slide — имя слайда, из которого берётся столбец данных. Имя серии name может быть опущено. <з> Подробное описание команды Series с полным перечнем свойств см. здесь.

### SeriesModify name : property1=value1 , ... , propertyN=valueN

Изменение одного или нескольких свойств ранее определённой серии. Список свойств имеет такой же синтаксис, как и в команде Series. Если имя name опущено, подразумевается последняя созданная серия.

### SeriesOn = name
SeriesOff = name

Две команды соответственно включают и отключают отображение серии с именем n. Если имя опущено, подразумевается последняя созданная серия.

### ExtraX = min [, max]
ExtraY = min [, max]
ExtraZ = min [, max]

Дополнительные отступы от края области графика вдоль осей X, Y и Z соответственно. Числа min и max задаются в процентах от ширины графика. Если max опущен, полагается max = min. По умолчанию отступы у горизонтальных осей отсутствуют, у вертикальных равны 3%.

### CandleWidth = n

Ширина свечей на биржевых графиках (в секундах). Значение n может задаваться в форматах времени:
чч:мм:сс
чч:мм
а также в виде числа дней, недель, месяцев или лет:
n days
n weeks
n months
n years
По умолчанию CandleWidth=00:05:00.

### CandleBase = n

Базовая точка отсчёта свечей на биржевых графиках. Значение n может задаваться в формате дат-времени. По умолчанию 0.

Совет:
Задавайте этот параметр равным произвольному понедельнику на недельных свечных графиках, иначе все свечи будут начинаться в четверг.

Задавайте этот параметр равным первому дню произвольного месяца при построении месячных графиков.

### ZoomX = x1; x2
ZoomX = min; x
ZoomX = max; x
ZoomX = max

Задать интервал оси X, в котором просматривается график, одним из 4 способов соответственно:
[x1; x2] — заданы обе границы интервала;
[min; min+x] — задана длина начальной части;
[max-x; max] — задана длина конечной части;
[min; max] — вместить все точки графика.
Координаты x1, x2, x можно задавать в процентах относительно длины (max-min). Для этого перед координатой ставится символ %.

Пример: команда ZoomX = %33; %67 устанавливает отображение средней трети графика.

После загрузки слайда для всех графиков по умолчанию устанавливается ZoomX = %0; %100.

### ZoomY
ZoomZ

Команды для осей Y и Z, аналогичные ZoomX.

### SyncYZ = y0, z0
SyncYZ = max
SyncYZ = off

Синхронизировать масштабирование по осям Z и Y. Если AutoScaleZ>0, то параметр SyncZY игнорируется. По умолчанию max.

В первом варианте команды координата y0 по оси Y совмещается с координатой z0 по оси Z.

Во втором варианте совмещаются максимальные интервалы, в которых находятся все точки графика.

Третий вариант отключает синхронизацию.

### EmptyIntervals = b

Включать пустые интервалы, не содержащие точек, в разрывную ось X (разрывные оси формируются командами Ranges и DateTimeRange). Игнорируется, если ось X не является разрывной. По умолчанию off.

### AutoScaleX = s
AutoScaleY = s
AutoScaleZ = s

Режим автоматического масштабирования по осям X, Y и Z соответственно. В режиме автомасштабирования масштаб по оси устанавливается так, чтобы видны были все или почти все (за исключеним "далёких выбросов") точки графика. Параметр s принимает значения:
off — без автомасштабирования (по умолчанию);
max — интервал, в котором видны все точки;
robust — интервал, в котором могут быть не видны далеко отстоящие точки, см. RobustPoints и RobustLimit;
var — интервал равен среднему квадратичному отклонению, помноженному на RobustFactor.
Автомасштабирование производится по всем точкам со свойством U=8 и по всем точкам с U=16, имеющим размер. Автомасштабирование не может производиться по вертикальной и горизонтальной оси одновременно.

Для гистограмм с вертикальными столбцами работает только AutoScaleX, с горизонтальными — только AutoScaleY.

### RobustPoints = n
RobustLimit = n

Параметры, используемые при отбрасывании точек в режиме масштабирования AutoScale = robust. Далеко отстоящими считаются не более RobustPoints точек при условии, что они отстоят от ближайшей точки на расстояние не менее (Max-Min)*RobustLimit. Параметр распространяется на все оси.

По умолчанию RobustPoints=2, RobustLimit=0.5.

### RobustFactor = n

Параметр, используемый при отбрасывании точек в режиме масштабирования AutoScale = var. Далеко отстоящими считаются точки, находящиеся от среднего арифметического, вычисленного по всем точкам, на расстоянии более Var * RobustFactor, где Var — среднее квадратичное отклонение. Действие параметра распространяется на все оси. По умолчанию 2.

### VGrid = n

Вид вертикальной сетки. Если n<0, сетка не изображается. Если n=0, сетка рисуется сплошными линиями. Если n>0, сетка рисуется штрихами длины n в узлах сетки. По умолчанию 0.

### HGrid = n

Вид горизонтальной сетки. Команда аналогична VGrid.

### GridOverFills = b

Рисовать линии сетки поверх заливок. По умолчанию on.

### GridColor = color

Цвет линий сетки. Параметр color задаёт номер цвета в палитре.

### GridStyle = n

Стиль линий сетки. Параметр n задаёт номер цвета в палитре.

### SelectColor = color

Цвет выделенных точек, по умолчанию белый. Параметр color задаёт номер цвета в палитре.

### HighlightColor = color

Цвет подсветки точки при указании на неё курсором мыши, по умолчанию жёлтый. Параметр color задаёт номер цвета в палитре.

### ActiveColor = color

Цвет активной точки, по умолчанию жёлтый. Параметр color задаёт номер цвета в палитре.

### ActiveTransparency = n

Прозрачность выделителя активной точки, заданная числом от 0 (прозрачный) до 1 (непрозрачный). По умолчанию 0.85.

### ShowTN = s

Режим вывода текстов TN рядом с точками:
never — не выводятся для всех точек;
always — выводятся для всех точек;
last — только для последней точки серии;
select — только для выделенных точек.
По умолчанию в интерактивном режиме select, в не интерактивном — always.

### PoseTN = s

Расположение текста TN рядом с точками:
off — не выводить;
left — слева от точки;
right — справа от точки;
up — сверху от точки;
down — снизу от точки.
По умолчанию right. Если комментарий не влезает в область графика, расположение текста может быть автоматически изменено.

### ShowLN = s

Режим вывода текстов LN рядом с линиями. Принимает те же значения, что и параметр ShowTN. По умолчанию never.

### ShowTR = s

Режим вывода текстов TR рядом с точками:
off — вывод комментариев TR отключён;
onclick — при нажатии кнопки мыши на точке (по умолчанию);
onmove — при наведении курсора мыши на точку;

### TableTitle = text

Заголовок сводной таблицы выделенных точек, состоящий из заголовков столбцов, разделяемых символом ";". По умолчанию ";Info". Если заголовок начинается с символа-разделителя ";", то в первую колонку таблицы выводятся номера строк.

### ArrowSize = n
ArrowAngle = n

Параметры стрелок для отрезков со свойством LA. Задают размер и угол (в градусах) крыльев стрелки соответственно. По умолчанию 10 и 10.

### StatusOnMouseMove = expr

Статусная строка, выводимая при перемещении курсора мыши на графике. Строка со вставками expr может содержать имена столбцов данных, а также переменные CoordX, CoordY, CoordZ, CoordXText, CoordYText, CoordZText, обозначающие текущее положение курсора в реальных координатах.

По умолчанию

    #StatusOnMouseMove = "[CoordXText];[CoordYText]"

Команда StatusOnMouseMove должна идти непосредственно после описания серии (командой Series), к X-координатам точек которой привязывается выводимая информация.

### StatusOnMouseDrag = expr

Статусная строка, выводимая при выделении мышью прямоугольной области на графике. Строка со вставками expr может содержать имена столбцов данных, те же переменные, что и в команде StatusOnMouseMove, а также переменные CoordXStart, CoordYStart, CoordXStartText, CoordYStartText, обозначающие начальное положение курсора в реальных координатах.

По умолчанию

    StatusOnMouseDrag = "[CoordXStartText] -- [CoordXText]; [CoordYStartText] -- [CoordYText]"

Команда StatusOnMouseDrag должна идти непосредственно после описания серии (командой Series), к X-координатам точек которой привязывается выводимая информация.

## Команды: Свойства гистограмм

Все команды, перечисленные в настоящем разделе, так же, как и в предыдущем, являются свойствами объекта Chart на панелях типа 2D. Они работают только в том случае, если на графике присутствуют гистограммные серии точек.

### VertHist = type

Тип вертикальной гистограммы, значение type должно быть одним из следующих:
simple — простая гистограмма со столбцами одного или разных цветов;
detailed — детальная гистограмма, столбцы состоят из отдельных точек разного цвета;
pie — круговая диаграмма;
piedetailed — круговая диаграмма с секторами, состоящими из отдельных точек разного цвета.

### HorizHist = type

Тип горизонтальной гистограммы. Параметр аналогичен VertHist.

### nCols = n
nPointsPerCol = n
ColWidth = n

Три альтернативных способа задать разбиение диапазона значений на колонки. По умолчанию используется nCols=15.
nCols — число колонок гистограммы;
nPointsPerCol — среднее число точек в колонке;
ColWidth — ширина колонок.

### DiscreteStyle = b

Если включено, то тики оси выравниваются по середине колонок. Рекомендуется включать, когда значения дискретны с шагом ColWidth. По умолчанию выключено.

### ColumnsThickness = n

Толщина колонок в процентах относительно расстояния между соседними колонками.

### AverageColors = b

Если включено, цвет каждой колонки гистограммы вычисляется как среднее взвешенное цветов составляющих её точек.

### OutlineColumns = b

Если включено, то для гистограмм типа detailed и piedetailed каждая колонка (сектор) гистограммы обводится рамкой.

## Команды: Параметры трёхмерных изображений

Все команды данного раздела являются свойствами панели типа 3D.

### ViewTheta = f

Параметр исходного расположения сцены. Угол взгляда (в градусах от -180 до +180) вдоль меридиана.

### ViewFi = f

Параметр исходного расположения сцены. Угол взгляда (в градусах от -180 до +180) вдоль параллели.

### ViewPersp = f

Параметр исходного расположения сцены. Перспектива взгляда, расстояние от наблюдателя до изображения.

### ViewScaleX = f
ViewScaleY = f
ViewScaleZ = f

Параметры исходного расположения сцены. Коэффициенты растяжения сцены по трём осям.

## Команды: Управление слайдами и фильмами

Команды, работающие со слайдами и фильмами, не являются свойствами какого-либо объекта. Это глобальные команды.

По умолчанию сначала существует фильм с именем default, который имеет единственный слайд с именем default. Слайды с именем default имеют статус временных. Команда #NewSlide может заменять их на слайды с нормальными (отличными от default) именами.

### CreateSlide = name

Создать новый пустой слайд с именем name и вставить его в конец текущего фильма. Если имя опущено, то создаётся слайд с именем default.

### NewSlide = name

Создать новый пустой слайд с именем name.

Если имя опущено, то создаётся новый слайд с именем default и вставляется в конец текущего фильма.

Внимание! В отличие от команды CreateSlide, которая всегда создаёт новый слайд, команда NewSlide может заменять уже существующий слайд новым пустым слайдом. Это происходит в следующих случаях:

1. Если имя задано и текущий слайд имеет имя default, то он заменяется созданным слайдом.
2. Если имя задано и уже существует слайд с таким именем, либо с именем default, то он заменяется созданным слайдом.
Во всех остальных случаях созданный слайд добавляется в конец текущего фильма.

### Slide = nslide

Активизировать (сделать текущим) слайд, указанный параметром nslide. Последующие команды и строки данных будут относиться именно к этому слайду. Слайд должен быть предварительно создан командой NewSlide. Если указанный слайд не существует, команда игнорируется.

Параметр nslide принимает следующие значения:

`name @ film` слайд с именем name в фильме film;
`n @ film` слайд с номером n;
`<< @ film` первый слайд;
`>> @ film` последний слайд;
`< n` слайд с номером, на n меньшим номера текущего слайда;
`> n` слайд с номером, на n большим номера текущего слайда;
`<` предыдущий слайд;
`>` следующий слайд;
Имя фильма можно опускать. Если оно не указано, имеется в виду текущий фильм. Невозможно перемещаться по слайдам в фильме с именем default, так как от отведён под отдельные слайды.

### SlideMove = nslide

Поставить текущий слайд перед слайдом, расположение которого задано параметром nslide. Этот параметр принимает все те же значения, что и параметр команды Slide.

### DataSlide = nslide
DataSlide off

Установить связь с источником данных на другом слайде. После этого команды Let и Series могут обращаться к столбцам данных на слайде nslide как к своим собственным, не используя имён с точкой. Параметр nslide принимает все те же значения, что и параметр команды Slide.

Второй вариант команды разрывает связь с источником данных.

### ClearSlide

Очистить текущий слайд, уничтожив все его данные, панели и параметры форматирования. Не изменяется только имя фильма, которому принадлежит слайд.

### DeleteSlide

Удалить текущий слайд, уничтожив все его данные, панели, параметры форматирования, и исключив его из текущего фильма. Эта команда действует более радикально, чем ClearSlide.

### SetFilm = name

Изъять слайд из текущего фильма и включить его в фильм с именем name. По умолчанию до команды SetFilm слайд принадлежит фильму default.

### DeleteFilm = name

Удалить фильм с именем name и все его слайды, кроме текущего. Если имя name опущено, удаляется фильм, которому принадлежит текущий слайд. Если фильма с именем name не существует, команда игнорируется.

## Команды: Панели на слайдах

Команды, описанные в этом разделе, применяются к слайду. Они позволяют компоновать слайд из отдельных панелей с графиками или текстовыми комментариями.

### NewPanel n [ : type ]

Создать на слайде панель типа type с именем или номером n. Допустимые типы панелей:
2D — двумерный график или гистограмма;
3D — трёхмерный точечный график;
pie — круговая диаграмма;
text — текстовый комментарий;
legend — легенда.
Если тип опущен, предполагается 2D.

По умолчанию на слайде есть одна панель с именем default, номером 1 и типом 2D. Первая команда NewPanel заменяет её новой панелью.

Если панель с именем n уже существует, то она уничтожается и заменяется новой.

### Panel = n

Активизировать на слайде панель с именем или порядковым номером n. Все последующие команды и строки данных будут формировать указанную панель.

Панели нумеруются начиная с 0 в порядке их создания на текущем слайде. Панели с номерами 0 и 1 зарезервированы для статусной строки и легенды.

### Group (hrows) (wcols) group = panels

Сгруппировать панели и группы, перечисленные в списке panels, в группу с именем group. Панели располагаются прямоугольной таблицей слева направо, сверху вниз. Строки таблицы имеют относительные высоты, указанные в списке чисел hrows. Столбцы имеют относительные ширины, указанные в списке wcols.

Пример: команда

    #Group (2,1)(2,1,1) gr5 = p1, p2, p3, p4, p5

группирует панели p1, p2, p3, p4, p5 в группу gr5:

p1 | p2 | p3
p4 | p5 |

Если слайд имеет несколько панелей, а команда Group отсутствует, то по умолчанию применяется вертикальное группирование Group (1,...,1)(1).

### SyncAxis = panel1.axis1 , ... , panelN.axisN

Синхронизировать N осей, находящихся на панелях panel1 , ... , panelN. Именами осей axis1 , ... , axisN могут быть XAxis, YAxis или ZAxis. После синхронизации масштабирование одного из графиков автоматически масштабирует остальные. Команды Zoom и Type действуют на все синхронизированные оси; остальные команды воспринимаются синхронизированными осями индивидуально. Нельзя синхронизировать горизонтальную ось с вертикальной.

### TitlePose = s

Положение верхнего заголовка на текущей панели:
normal — над названиями осей Y и Z,
econom — экономно (между названиями осей).

### TitleBelowPose = s

Положение нижнего заголовка на текущей панели:
normal — под названием оси X,
econom — экономно (рядом с названием оси X).

### XNamePose = s

Положение названия оси X на текущей панели:
left — слева,
right — справа,
left-econom — слева рядом с делениями оси Х,
right-econom — экономно справа (по умолчанию).

## Команды: Параметры интерактивного режима

Параметры интерактивного режима не являются свойствами какого-либо объекта. Это глобальные команды.

### SelectShape = s

Форма выделителя точек, s принимает значения:
no — нельзя выделять области, только отдельные точки
rect — прямоугольник (по умолчанию);
ellipse — эллипс;
half — полуплоскость;
strip — полоса.

### SelectMode = s

Режим выделения:
no — нельзя выделять ни области, ни отдельные точки;
add — выделять точки;
sub — снимать выделение точек;
xor — менять выделение точек (по умолчанию).

### SelectOutside = b

Выделять точки, находящиеся за пределами видимой области. По умолчанию off.

### Cursor = s

Форма курсора, отмечающего текущее положение мыши:
off — курсор не выводится (по умолчанию);
cross — пунктирный крест;
ticks — отметки по бокам графика.

### DrawBlockSize = n

Размер блока при фоновой прорисовке. По умолчанию 100.

Совет: Если прорисовка графика в окне замедляет работу других приложений, значение этого параметра надо уменьшить.

## Команды: Глобальные параметры

Глобальные параметры не являются свойствами какого-либо объекта. Их действие распространяется на все объекты, в том числе на все слайды.

### DefColor color = rgb
DefColor color = rgb [ .. color2 = rgb2 ]

Добавить в палитру цвет с номером color, заданный описанием rgb.

Описание цвета rgb представляет собой либо список трёх чисел R,G,B через запятую (R-красный, G-зелёный, B-синий), либо целочисленный код, заданный десятичным числом или шестнадцатиричным в формате 0xBBGGRR (как в языке С). Если color<27, команда изменяет стандартный предопределённый цвет.

Вторая форма команды определяет в палитре диапазон ячеек с номерами от color до color2 включительно, заполняя их цветами, равномерно переходящими от rgb до rgb2.

### DefColorHSV color = hsv
DefColorHSV color = hsv [ .. color2 = hsv2 ]

Команда аналогична DefColor, но цвет задаётся триплетом hue, saturation, value.

### DefFont style = library : family , width `x` height , flags , charset

Создание или модификация стиля шрифта style. По умолчанию в палитре определены 8 стандартных шрифтов:
1 = title — шрифт для заголовка,
2 = name — шрифт для названий осей,
3 = label — шрифт для меток осей,
4 = info — шрифт для надписей на графике,
5 = inside — шрифт для надписей внутри точек TI,
6 = near — шрифт для надписей около точек TN,
7 = right — шрифт для комментария TR,
8 = status — шрифт для статусной строки,

library
Имя шрифтовой библиотеки, зависящее от операционной системы и текущей реализации ChartLib. Каждому стилю style должен соответствовать определённый шрифт в каждой библиотеке library. Параметр не может быть опущен. В настоящей версии поддерживаются две библиотеки шрифтов:

Win — шрифты Windows, используемые при рисовании в окне и файле EMF или BMP;
Clf — шрифты собственного внутреннего формата CLF (ChartLive Font), используемые при формировании файлов PNG или JPEG. Это растровые шрифты с антиалиасингом, которые должны быть предварительно сгенерированы с помощью утилиты ttf2clf, входящей в состав дистрибутива ChartLive. Директория, в которой находятся эти шрифты, должна быть прописана в переменной среды CLFONTSDIR или установлена командой CLFontsDir.

family
Название семейства шрифта, принятое в данной шрифтовой библиотеке library. Для библиотеки Clf это имя файла, содержащего шрифт (расширение обязательно, возможно также указать полный путь).

width
Ширина символов в пикселах. Если параметр width опущен или равен нулю, выбирается пропорциональный шрифт.

height
Высота символов в пикселах.

flags
Флаги дополнительных свойств шрифта, кодируемые буквами:

N — нормальный,
B — жирный,
b — полужирный,
I — наклонный,
U — подчёркнутый,
S — перечёркнутый,
L — вертикальная надпись, читаемая слева,
R — вертикальная надпись, читаемая справа,
V — вертикальная надпись, читаемая сверху вниз.
Если параметр flags опущен, выбирается нормальный шрифт.

charset
Символьный набор, из списка: ANSI, DEFAULT, OEM, MAC, SYMBOL, BALTIC, CHINESEBIG5, EASTEUROPE, GB2312, GREEK, HANGUL, RUSSIAN, SHIFTJIS, TURKISH, JOHAB, HEBREW, ARABIC, THAI.
Если параметр charset опущен, предполагается ANSI.

Пример:

    #DefFont title = Win: Arial Narrow, 0x16, b, RUSSIAN
    #DefFont title = Clf: Courier9x15BI.clf, 9x15, BI

### CLFontsDir = path

Имя директории, в которой находятся CLF-шрифты. Имя обязано заканчиваться разделителем \ или /.

По умолчанию при инициализации библиотеки делается попытка прочитать это имя из переменной среды CLFONTSDIR. Если такая переменная не установлена, то CLF-шрифты будут считываться из текущей директории. Если в текущей директории CLF-шрифты отсутствуют, то надписи на формируемых изображениях формата PNG и JPEG будут отсутствовать.

### DefStyle = style_name

Начать определение стиля с именем style_name. Все последующие команды вплоть до первой EndStyle или DefStyle будут не исполняться, а запоминаться в списке команд стиля.

Запомненный список команд (стиль) может быть применён в дальнейшем к любой области, в том числе к слайду, с помощью команды Style.

### EndStyle

Закончить определение стиля.

Совет: Важно не забыть эту команду в конце определения стиля. Иначе все последующие команды будут не выполняться, а запоминаться в стиле.

### DefaultButton oper = butt

Переопределить стандартное функционирование кнопок мыши при выполнении операции oper со всеми объектами. Имя операции oper может принимать следующие значения:
Shift — сдвиг (графика или оси);
Zoom — масштабирование (графика или оси);
Select — выбор (точки на графике);
Activate — активизация (точки на графике);
Execute — запуск команды (соответствующей точке на графике);
Ignore — игнорировать нажатие.
Комбинация кнопок butt может принимать следующие значения (при совмещении нескольких кнопок значения отделяются запятой или плюсом): shift, alt, ctrl, left, right, middle, double.

Стандартное функционирование кнопок для всех объектов:

    #DefaultButton Shift = right
    #DefaultButton Zoom = left
    #DefaultButton Select = shift+left
    #DefaultButton Activate = left
    #DefaultButton Execute = left
    #DefaultButton Ignore = ctrl,alt,middle

Стандартное функционирование кнопок может быть изменено для каждого объекта в отдельности аналогичной командой Button.

Совет: При использовании возможности запуска точек (свойство TE) рекомендуется переопределить #Button Activate=right, чтобы избежать одновременного выполнения функций Activate и Execute.

### Syntax = usage1 {symbols1} ... usageN {symbolsN}

Установить синтаксис входного потока данных. Каждому символу строки symbolsi назначается роль usagei. Роли задаются однобуквенными кодами:
C — допустимые символы начала управляющей команды;
N — допустимые символы-разделители десятичных знаков в числах;
T — допустимые символы-разделители часов-минут-секунд;
D — допустимые символы-разделители дня-месяца-года;
F — допустимые символы-разделители полей в строках данных;
Q — два символа для левой и правой кавычки в строках данных;
E — обозначение пустого поля (empty) во входных данных;
Разделители N, T, D, F и Q должны быть различными.

В строках symbolsi разрешается указывать непечатные спецсимволы.

По умолчанию входной синтаксис задан командой

    #Syntax = C{#} N{.} T{:} D{/} Q{""} F{\t,} E{???}

### Locale = text

Установить локализацию (установки страны и языка) по правилам функции setlocale языка C. Строка описания text может принимать значения eng, rus, american, deu, fra, и другие. Данная команда влияет только на формат вывода чисел и дат. Формат ввода устанавливается командой Syntax.

### Encoding = char

Указывает кодировку входного потока строк. Символ char может принимать следуюшие значения:
W — кодировка Windows CP-1251,
D — кодировка DOS альтернативная,
K — кодировка KOI-8,
I — кодировка ISO-8859-5.
Если параметр не задан, строки входного потока не перекодируются.

### OutEncoding = char

Указывает выходную кодировку при формировании таблиц и выдаче информации о точках графика. По умолчанию W.

### SystemDate = date
SystemDate = today

Дата, устанавливаемая автоматически для значений типа дата/время, если указано только время. Если параметр SystemDate не задан, по умолчанию берётся системная (сегодняшняя) дата. Тот же эффект достигается второй формой команды.

### About = text

Текст, выводимый в статусную строку по окончании размещения слайда.

## Команды: Средства отладки

Отладочные команды предназначены для сброса служебной информации в файлы. В процессе работы библиотека может генерировать файлы трёх типов:

- Лог-файл. Содержит протокол всех сообщений об ошибках в порядке их поступления.
- Дамп-файл. Используется для получения служебной и отладочной информации командами Dump***. Включается/отключается командой DumpFile, по умолчанию отключён.
- Эхо-файл. Содержит точную копию входного потока строк. Включается/отключается командой EchoFile, по умолчанию отключён.

### DumpFile [ filename ]

Устанавливает имя отладочного файла, в который выводится вся информация отладочными командами Dump***. Если имя файла опущено, все последующие отладочные команды будут игнорироваться. Имя отладочного файла может совпадать с именем лог-файла.

### DumpData expr

Выводит в отладочный файл вектор данных, заданный с помощью выражения expr.

Обычно в качестве выражений используются текстовые строки со вставками.

### DumpDataStructure

Выводит в отладочный файл информацию о всех векторах во всех матрицах данных на текущем слайде.

### DumpSeriesStructure

Выводит в отладочный файл информацию о всех векторах во всех сериях точек текущего графика.

### DumpSlideStructure

Выводит в отладочный файл информацию о всех областях на текущем слайде.

### DumpSlidesList

Выводит в отладочный файл список всех доступных слайдов.

### DumpPcode expr

Выводит в отладочный файл результат компиляции (псевдокод) выражения expr.

### EchoFile [ filename ]

Включить копирование входного потока строк в файл с именем filename. Если имя файла опущено, эхо будет отключено.

### Echo str

Выводит в файл-протокол строку str. Строку не надо заключать в кавычки.

## Команды: Устаревшие команды

Эти команды являются свойствами объекта Chart на панелях типа 2D. Они связаны с командой Format, работавшей в ранних версиях библиотеки. Эти команды, а также свойства серий DR, DB, DT в дальнейшем могут не поддерживаться.

### Format = format

Форматная строка format задаёт структуру одной или нескольких серий точек и определяет состав столбцов матрицы данных. Если текущая матрица данных уже содержит столбцы, то создаётся новая матрица.

Управляющая команда Format совмещает в себе команды NewData, Let и Series. По причине своей крайней перегруженности она не будет поддерживаться в следующих версиях библиотеки. С ней связаны команды Matrix, MatrixClear, MatrixEnable и SeriesSize, также считающиеся устаревшими. Вместо них рекомендуется использовать команды NewData, Data, ClearData, ResizeData, SeriesOn и SeriesOff.

Команда Format задаёт свойства серий с помощью списка свойств так же, как это делает команда Series, но со следующими отличиями:

- можно задать сразу несколько серий в одной команде, отделив их символами / или \;
- в качестве значений свойств разрешается задавать не только числовые константы, имена столбцов данных и переменных, но и произвольные выражения, заключённые в круглые скобки, а также строковые константы со вставками;
- у свойства может быть не указано вообще никакого значения (знак равенства в этом случае также опускается);
- команда определяет новую матрицу данных, столбцы которой соответствуют всем свойствам всех серий, для которых не указано никакого значения;
- если свойство X у серии опущено, оно будет взято у предыдущей серии.

Команда Format сокращает число необходимых команд, но делает описание графика менее удобочитаемым. Например, следующие два описания строят один и тот же график:

Описание 1

    #Let x= pointno/10-4
    #Let y= exp(-x^2/2)
    #Let z= FNorm(x)
    #Series p: X=x Y=y S=0 LC=13 LW=2
    #Series f: X=x Z=z S=0 LC=33 LW=2
    #SeriesSize 80: f, p

Описание 2

    #Format X=(pointno/10-4) Y=(exp(-X^2/2)) S=0 LC=13 LW=2 ...
        \ Z=(FNorm(X)) S=0 LC=33 LW=2
    #SeriesSize 80

### SeriesSize = size : name1 , ... , nameN

Установить число точек в сериях с именами name1 , ... , nameN равным size. Обычно число точек определяется автоматически при чтении входного потока данных. Команда нужна только в том случае, когда все свойства указанных серий заданы константами или вычислимыми столбцами данных.

Если список серий опущен, берётся последняя созданная серия.

### Matrix = n
Matrix = name

Активизировать матрицу данных с номером n или именем name. Если такой матрицы ещё нет, она будет создана. Все последующие строки данных вплоть до другой команды Matrix или Format будут направляться в данную матрицу. Нумерация матриц начинается с нуля. Имя команды Matrix можно сокращать до одной буквы M.

### MatrixClear [ = n]

Очистить матрицу данных с номером или именем n. Если имя или номер не указаны, очищается активная на данный момент матрица. Команда удаляет только данные, не затрагивая форматы. Используется для переформирования графика.

Команда MatrixClear действует только на имеющиеся в данный момент серии, поэтому она должна даваться после команды Format.

### MatrixEnable = [ n, ] b

Показать или спрятать все серии точек, хранящиеся в матрице с номером или именем n. Если имя или номер не указаны, команда относится к активной матрице. В отличие от MatrixClear, установка MatrixEnable = off не уничтожает данные, а только убирает соответствующие серии точек с графика. По умолчанию on.

Команда MatrixEnable действует только на имеющиеся в данный момент серии, поэтому она должна даваться после команды Format.

## Команды: Палитра цветов

Цвет любого объекта на слайде задаётся номером в палитре. Примерами команд, задающих цвет, являются Color и BorderColor. Цвета точек в команде Series также задаются номерами в палитре с помощью цветовых свойств серий C, G, LC, LG, FC, FG.

Стандартная палитра библиотеки ChartLib содержит 27 цветов с номерами от 0 до 26. Команда DefColor позволяет добавлять новые цвета и переопределять уже имеющиеся. Изменения, сделанные в палитре цветов, глобальны, и влияют на все слайды и фильмы.

# Свойства серий

Серии

- Свойства точек
- Свойства боксов
- Свойства точек в гистограммах
- Свойства точек в биржевых графиках
- Свойства линий, соединяющих точку с соседними
- Свойства линий парных соединений
- Свойства заливок
- Столбцы данных (анахронизм)

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

Серия создаётся командой Series. Каждое свойство серии задаётся одно- или двухбуквенным именем, за которым следует знак равенства и значение. Значением должна быть либо числовая константа, либо имя столбца данных, определённого командами NewData или Let. Свойства разделяются запятыми или пробелами.

Например, следующая команда образует новую серию с именем priceline:

    #Series priceline: X=time Y=price S=0 LP=2 LC=1

В этой серии координаты точек X и Y задаются столбцами данных time и price соответственно. Свойства S, LP и LC одинаковы для всех точек серии. Все остальные свойства имеют стандартные значения.

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

    #Series priceline: X=time Y=price S=0 LP=2 LC=3

Тот же результат достигается более короткой командой:

    #SeriesModify priceline: LC=3

Команда SeriesModify имеет тот же синтаксис, что и Series, но в отличие от последней не создаёт серию заново, а только изменяет указанные свойства.

Имя серии можно опускать при создании серии. Однако если после этого определить ещё одну серию, то доступ к первой для команд Series, SeriesOn, SeriesOff, SeriesModify и SeriesSize будет закрыт навсегда.

Число точек в серии равно максимальной длине столбцов данных, указанных в свойствах серии. Обычно все столбцы имеют одинаковую длину, однако это условие не является обязательным. Недостающие значения интерпретируются как пустые.

Если свойства серии не ссылаются ни на один столбец данных, определённый командой NewData, то число точек в такой серии по умолчанию равно нулю. Чтобы явным образом задать число точек, следует использовать команду SeriesSize или ResizeData.

## Свойства серий: Параметры точек

Точки изображаются на графике фигурами фиксированного размера в пикселах.

### X

Xcoord; X-координата точки. Если для данной серии параметр X не указан, он берётся из предыдущей серии. Если при этом данная серия является первой в матрице, то X полагается равным номеру точки (нумерация точек начинается с 0). Свойство X несовместимо с TX.

### Y

Ycoord; Y-координата точки. Свойство Y несовместимо с TY, Z и MC.

### Z

Zcoord; альтернативная Y-координата точки, ось которой отображается справа. Если точка имеет параметр Z, то параметр Y игнорируется.

### TX

TextX; Метка точки, выводимая на горизонтальной оси вместо X-координаты. Свойство X игнорируется, точки располагаются по оси X с равномерным шагом в порядке поступления, начиная с нуля.

### TY

TextY; Метка точки, выводимая на вертикальной оси вместо Y-координаты. Свойства Y, Z, MC игнорируются, точки располагаются по оси Y с равномерным шагом в порядке поступления, начиная с 0.

### C

Color; номер цвета точки. В палитре предопределены 27 цветов с номерами от 0 до 26, и можно определять другие с помощью команды DefColor. По умолчанию C равно номеру серии.

### G

Gradient; второй цвет точки, также задаётся номером в палитре. Игнорируется, если параметр I не задан. По умолчанию G=0 — чёрный.

### I

Intensity; интенсивность. Если параметр I не указан, то цвет точек в серии определяется только параметром C. Иначе цвет вычисляется таким образом, чтобы при минимальном значении параметра I он был равен C, а при максимальном — G. При промежуточных значениях I цвет C плавно переходит в G.

### O

OutlineColor; цвет обводки точки, задаётся номером в палитре. Если не задано, то берётся значение свойства Color текущего графика, по умолчанию 0.

### W

Weight; размер точки в пикселах. Если не задан, берётся W=5. Если W=0, точка не изображается.

### S

Shape; форма точки. Если S=0, точка не изображается. Допустимые значения приведены в таблице:

Если точка имеет свойство TI, то её размер устанавливается по тексту TI, который изображается внутри точки. При этом свойство S регулирует форму фигуры, заключающей этот текст:

### K

Key; ключевой номер точки. Любые две точки на графике можно соединить линией, называемой парным соединением (см. ниже). Для этого обе точки должны иметь ключевые номера. Соединять можно точки, находящиеся как в одной серии, так и в разных. Никакие две точки на одном графике не должны иметь одинаковых номеров K. По умолчанию точка не имеет ключевого номера и может соединяться только с соседней точкой.

### U

Usage; режимы использования точки, задаваемые суммой следующих значений (по умолчанию 16):
U=1 — обязательная предварительная прорисовка точки;
U=2 — обязательная предварительная прорисовка линии;
U=4 — обязательная предварительная прорисовка заливки;
U=8 — обязательный учёт точки при автомасштабировании;
U=16 — учёт точки при автомасштабировании, если она имеет размер;
U=32 — не отображать обводку точки.

### TI

TextInside; текст внутри точки. При выводе текста точка расширяется до размера минимального прямоугольника, вмещающего текст. Допускаются многострочные тексты, разделителем строк является пара символов "\n". Несколько меняется смысл свойств S (форма точки) и W (размер точки). Свойство S модифицирует контур прямоугольника, добавляя к нему выступы различной формы (см. таблицу). Свойство W задаёт величину выступов.

### TN

TextNear; текст рядом с точкой. Допускаются многострочные тексты, разделителем строк является пара символов "\n".

### TR

TextRight; текст, выводимый при активизации точки правой клавишей мыши. Допускаются многострочные тексты, разделителем строк является пара символов "\n". Cвойство работает только при выводе графика в окно.

### TB

TextStatusBar; текст, выводимый в статусную строку, когда курсор мыши останавливается на точке. Cвойство работает только при выводе графика в окно.

### TT

TextTable; текст, выводимый в сводную таблицу выбранных точек. Разделителем колонок является символ ";". Если точка не имеет поля TT, по умолчанию в таблицу выводятся координаты точки. Cвойство работает только при выводе графика в окно.

### TC

TextColor; цвет текстов TN, TR и TI, задаётся номером в палитре. По умолчанию чёрный.

## Свойства серий: Параметры боксов

Если заданы свойства BX, BY, BZ, точка изображается не фигурой фиксированного размера в пикселах, а боксом. Бокс — это прямоугольник на двумерном графике или параллелепипед на трёхмерном графике. Свойства X, Y, (Z) и BX, BY, (BZ) задают координаты двух противоположных углов бокса. К боксам применимы все свойства точек кроме W.

Если у бокса задать S=1, то он становится невыделяемым и неактивизируемым. С помощью таких боксов можно "замостить" фоновый рисунок.

### BX

BoxX; вторая координата по оси X. Ширина бокса вдоль оси X равна |X-BX|.

### BY

BoxY; вторая координата по оси Y. Ширина бокса вдоль оси Y равна |Y-BY|.

### BZ

BoxZ; вторая координата по оси Z. Ширина бокса вдоль оси Z равна |Z-BZ|.

## Свойства серий: Параметры гистограмм

Серия считается гистограммной, если она содержит одно из свойств HS или HW. В текущей реализации ChartLib на графике может находиться только одна гистограмма (это ограничение будет снято в дальнейшем). Она строится по всем точкам всех гистограммных серий. При этом на гистограмму могут накладываться обычные графики.

### HS

HistSort; значения, по которым точки упорядочиваются в столбцах гистограмм. Если не указано, точки располагаются в порядке поступления.

### HW

HistWeight; вес (вклад) точки в столбец гистограммы, по умолчанию 1.

## Свойства серий: Параметры биржевых графиков

Биржевые графики отличаются тем, что вместо точек на них изображаются свечи. Свеча имеет четыре Y-координаты: цена открытия, максимальная цена, минимальная цена и цена закрытия.

Строки в матрице данных соответствуют либо отдельным сделкам, либо интервалам времени. В первом случае достаточно задать MC равным цене (или объёму) сделки. Во втором случае необходимо задать все четыре параметра MO, MH, ML, MC. В обоих случаях форма свечей вычисляется согласно параметру CandleWidth, который задаёт длительность всех свечей в секундах.

### X

Xcoord; X-координата точки в секундах. Для корректного вычисления свечей необходимо, чтобы точки входного потока следовали в хронологическом порядке.

### MC

MarketClose; последнее значение на интервале времени (например цена закрытия или цена последней сделки). Параметр MC является обязательным для точек, используемых при формировании биржевых графиков. Если точка имеет MC, то свойства Y и Z игнорируются.

### MO

MarketOpen; первое значение на интервале времени (например цена открытия или цена первой сделки). Если параметр MO отсутствует у точки, по умолчанию полагается MO=MC.

### MH

MarketHigh; максимальное значение на интервале времени. Если у точки отсутствует параметр MH, по умолчанию полагается MH=MC.

### ML

MarketLow; минимальное значение на интервале времени. Если у точки отсутствует параметр ML, по умолчанию полагается ML=MC.

### MS

MarketStyle; стиль свечи. Если MS=0, свеча не изображается. По умолчанию установлен стиль интервальных гистограмм с ценами открытия и закрытия (MS=1). Допустимые значения перечислены в таблице:

### MT

MarketTrades; число точек (сделок), образующих свечу. Этот параметр не влияет на изображение свечи и используется только для вывода текстовых комментариев TN, TR или TB, содержащих переменную CandleCount (см. ниже).

### C

Цвет бычьей (MO<MC) свечи при MS=2 или 3, задаётся номером в палитре. По умолчанию C=7 — белый.

### G

Цвет медвежьей (MO>MC) свечи при MS=2 или 3, задаётся номером в палитре. По умолчанию G=0 — чёрный.

### I

Intensity; интенсивность. Если параметр I не указан, то цвет свечей определяется только параметрами C и G. Иначе действует правило: чем выше I, тем цвет ближе к среднему между C и G.

### O

Цвет контура свечи, задаётся номером в палитре. Если не задан, то берётся значение свойства Color текущего графика, по умолчанию 0.

### W

Weight; толщина линий, которыми рисуется свеча. Если не задана, берётся W=1.

### TN, TR, TB

Текстовые свойства имеют для свечей тот же смысл, что и для точек. Если текстовое свойство задаётся с помощью выражения, то в нём допускается использовать переменные — параметры текущей свечи.

Cвойства TR и TB работают только при выводе графика в окно.

## Свойства серий: Параметры линий

Линиями можно соединять последовательные точки одной серии, либо соответствующие точки соседних серий. Для соединения произвольных точек следует использовать парные соединения.

### LC

LineColor; цвет линии, задаётся номером в палитре. Параметр аналогичен C. По умолчанию LC равно номеру серии.

### LG

LineGradient; второй цвет линии, задаётся номером в палитре. Параметр аналогичен G. По умолчанию LG=0 — чёрный.

### LI

LineIntensity; интенсивность линии. Параметр аналогичен I.

### LW

LineWeight; толщина линии в пикселах. Если не задан, то LW=1.

### LS

LineShape; стиль линии. По умолчанию LS=1. Допустимые значения перечислены в таблице:

### LP

LinePath; форма траектории. По умолчанию LP=1. Линия не рисуется, если LP=0. Допустимые значения перечислены в таблице:

### LD

LineDirection; направление линии. По умолчанию LD=1.
LD=0 — нет линии,
LD=1 — линия соединяет текущую точку со следующей в серии,
LD=2 — линия соединяет текущую точку с такой же точкой в следующей серии,
LD=3 — рисуются обе линии.
Для последней серии могут быть отображены только линии типа 1.

### LA

LineArrow; тип стрелки. По умолчанию LA=0. Допустимые значения перечислены в таблице:

## Свойства серий: Параметры парных соединений

Серия, содержащая свойства PA и PB, описывает линии, а не точки. Концы каждой линии задаются ключевыми номерами соединяемых точек. Все свойства такой серии, за исключением параметров линии LC, LG, LI, LW, LS, LP, LD, LA, игнорируются. Если указано только одно из свойств PA или PB, вся серия игнорируется. Соединять можно любые точки, даже если они находятся в разных сериях. Нельзя соединять точки, находящиеся на разных панелях.

### PA

PairA; ключевой номер первой точки отрезка. Парное соединение игнорируется, если ни одна из точек графика не имеет ключевого номера K, совпадающего со значением свойства PA.

### PB

PairB; ключевой номер второй точки отрезка. Парное соединение игнорируется, если ни одна из точек графика не имеет ключевого номера K, совпадающего со значением свойства PB.

### LB

LineStatusBar; текст, выводимый в статусную строку, когда курсор мыши останавливается на линии. Свойство LB применимо только к парным соединениям, но не к отрезкам, соединяющим соседние точки (см. выше). Cвойство работает только при выводе графика в окно.

## Свойства серий: Параметры заливок

К любой точке можно привязать заливку. Свойство FD устанавливает, какие ещё точки следует использовать наряду с текущей для определения формы заливки.

### FC

FillColor; цвет заливки, задаётся номером в палитре. Параметр аналогичен C.

### FG

FillGradient; второй цвет заливки, задаётся номером в палитре. Параметр аналогичен G.

### FI

FillIntensity; интенсивность заливки. Параметр аналогичен I.

### FS

FillShape; стиль заливки. Цвет штриховки задаётся свойствами LC, LG, LI. По умолчанию FS=1. Допустимые значения перечислены в таблице:

### FD

FillDir; направление заливки от линии, соединяющей текущую точку со следующей точки в данной серии. Допустимые значения перечислены в таблице:

FD=0 — нет заливки,
FD=1 — заливка до линии в следующей серии (по умолчанию),
FD=2 — заливка до линии в предыдущей серии,
FD=3 — заливка параллельно вверх,
FD=4 — заливка параллельно вниз,
FD=5 — заливка параллельно влево,
FD=6 — заливка параллельно вправо,
FD=7 — заливка до точки в следующей серии,
FD=8 — заливка до точки в предыдущей серии.
При FD=1,2 используются 4 точки и заливается внутренность четырёхугольника (при FP>1 пяти- или шестиугольника).

При FD=3,4,5,6 используются только 2 точки, заливается четырёх(5,6)угольник, ограниченный параллельными прямыми.

При FD=7,8 используются 3 точки, заливается тре(4,5)угольник.

### FP

FillPath; форма траектории, соединяющей соседние точки в текущей серии. Параметр аналогичен LP. По умолчанию FP=1.

Контур заливки определяется парой свойств FD и FP. Например, следующая таблица отличается от предыдущей тем, что вместо FP=1 было задано FP=3:

## Свойства точек в сериях: Столбцы данных

Свойства DB, DR, и DT введены для того, чтобы в команде Format можно было определять столбцы данных, не имеющие непосредственного назначения и используемые только в выражениях. В каждой серии можно задавать сколько угодно полей данных.

Как и сама команда Format, эти свойства являются анахронизмами и, возможно, не будут поддерживаться в следующих версиях библиотеки. Вместо них следует использовать команду Let.

### DB

DataByte; данные типа Byte (целые числа).

### DR

DataReal; данные типа Real (вещественные числа).

### DT

DataText; данные типа Text (текстовые строки).

### DS

DataSelect; признак выделения точки. Точка считается выделенной, если DS не равно 0. Если в нескольких сериях DS указывает на один и тот же вектор данных, то точки в этих сериях будут выделяться синхронно. Это полезно для установления соответствия между точками на нескольких слайдах, построенных по одним и тем же данным.

# Использование выражений

Выражения

- Типы данных и константы
- Предопределённые переменные
- Прямой доступ к столбцам данных
- Строки со вставками
- Форматы вывода чисел
- Форматы вывода дат
- Операции и их приоритет
- Функции

Библиотека ChartLib оснащена встроенным калькулятором выражений. Выражения используются главным образом в командах Let и Format для определения вычислимых столбцов в матрицах данных. Кроме того, выражения задаются в командах Status, DumpData, DumpPcode.

Выражения строятся из переменных, констант, знаков операций, функций, и скобок любого уровня вложенности.

В роли переменных выступают имена столбцов данных, введённых командами NewData и Let. Имена переменных могут состоять из любых символов, однако если имя содержит спецсимволы (знаки операций, скобки) или пробелы, его следует заключать в апострофы.

Область действия имён ограничивается текущим слайдом. Чтобы обратиться к столбцу данных, определённому на другом слайде, следует использовать "имя с точкой":

    ИмяСлайда . ИмяСтолбцаДанных

Имена переменных и предопределённых констант чувствительны к регистру, например PI — это константа, а pi — переменная; переменные XYZ и xyz различны. В то же время имена функций не чувствительны к регистру, например sin, SIN и Sin — три корректных имени функции синуса.

## Выражения: Типы данных и константы

Допустимые типы данных:
bool — логический (0 или 1);
int — целый (4-байта);
real — вещественный с двойной точностью;
string — строковой произвольной длины;
datetime — дата-время (число секунд, прошедших с 1 января 1970);
error — ошибка.

Приведение типов в выражениях осуществляется автоматически, но можно использовать также функции преобразования типа (см. ниже). Типы bool и datetime являются подмножествами int. При приведении числовых типов к bool положительные значения преобразуются в true, отрицательные и 0 — в false. Тип error эквивалентен строковому и содержит сообщение об ошибке.

Целочисленные константы можно задавать как в десятичной системе счисления, так и в бинарной или шестнадцатеричной, например:

`0b0100.1010` — двоичное 74
`0xFFFF` — шестнадцатеричное 65535
В двоичных и шестнадцатеричных константах точка служит для визуального отделения разрядов и при вычислениях игнорируется.

Вещественные константы задаются либо в экспоненциальной форме, либо с плавающей точкой:

    2.345e+8
    2345E-8
    20.345

Строковые константы записываются в двойных кавычках. В строковые константы можно включать символы с любыми кодами, в том числе следующие спецсимволы:
`\ddd` — символ, заданный десятичным кодом ddd;
`\xHH` — символ, заданный шестнадцатеричным кодом HH;
`\a` — символ AlertBel \x07
`\b` — символ Backspace \x08
`\t` — символ HorizontalTab \x09
`\n` — символ Newline, \x0A или \x0D\x0A
`\v` — символ VerticalTab, \x0B
`\f` — символ Formfeed, \x0C
`\r` — символ CarriageReturn, \x0D
`\\` — символ обратного слэша \
`\"` — символ двойной кавычки "

Константы даты-времени задаются как строковые с преобразованием типа. По умолчанию разделителем года, месяца и дня в датах является символ "/". Разделитель можно изменить командой Syntax:

    datetime ("2005/08/21 11:15:20").

Неинициализированные значения, которым в матрице данных соответствует пропуск или ???, имеют значение empty. Преобразование empty к числовым типам даёт 0, к строковому типу — "empty".

По умолчанию в библиотеке предопределены значения некоторых констант, которые можно использовать во всех выражениях:

    empty  = empty;
    false  = 0;
    true   = 1;
    PI     = 3.1415926535897931;
    MINUTE = 60;
    HOUR   = 60 * 60;
    DAY    = 60 * 60 * 24;
    WEEK   = 60 * 60 * 24 * 7;

## Выражения: Предопределённые переменные

Имеются предопределённые переменные, которые можно использовать при вычислении свойств серий и статусных комментариев.

### Характеристики текущей матрицы данных

Используются главным образом для построения графиков функций, задаваемых аналитически, а не таблицей данных. Допустимы в команде Let.

RowIndex или @ | номер строки в матрице (нумерация строк начинается с нуля)
RowsCount | число строк в матрице

### Характеристики текущего графика

MinX, MaxX | Отображаемый диапазон по оси X в реальных координатах
MinY, MaxY | Отображаемый диапазон по оси Y в реальных координатах

### Характеристики текущей свечи

Группа переменных предназначена для вывода текстовой информации на биржевых графиках. Эти переменые используются в выражениях, задающих текстовые комментарии TN, TR, TB в свечных сериях.

CandleLeft | X-координата левого края свечи
CandleRight | X-координата правого края свечи
CandleOpen | Y-координата первой точки свечи (цена открытия)
CandleClose | Y-координата последней точки свечи (цена закрытия)
CandleLow | минимальная Y-координата точек свечи
CandleHigh | максимальная Y-координата точек свечи
CandleCount | число точек, которыми образована свеча

### Характеристики точки слайда

Данная группа переменных используется в команде Status для формирования текста статусной строки, выводимого при перемещении курсора мыши.

CoordX, CoordXText | X-координата курсора мыши, пересчитанная в реальные координаты
CoordY, CoordYText | Y-координата курсора мыши, пересчитанная в реальные координаты
CoordZ, CoordZText | Y-координата курсора мыши, пересчитанная в реальные координаты относительно оси Z, если она имеется на графике.
CoordXStart, CoordXStartText | X-координата курсора мыши в начальной точке при выделении прямоугольной области, пересчитанная в реальные координаты
CoordYStart, CoordYStartText | Y-координата курсора мыши в начальной точке при выделении прямоугольной области, пересчитанная в реальные координаты

Переменные с суффиксом Text содержат значения координат, оптимально отформатированные с учётом текущего масштаба графика.

## Выражения: Прямой доступ к столбцам данных

Всякая переменная, объявленная командой NewData или Let, содержит на самом деле не одно значение, а целый столбец данных. Имя переменной означает "взять из столбца текущее значение". Например, в команде

    #Series X=xx Y=yy

инструкция X=xx говорит, что X-координату каждой i-ой точки серии необходимо взять из i-ой ячейки столбца xx.

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

В следующем примере треугольником будут отмечены только точки с положительной Y-координатой, у которых предыдущая точка имела отрицательную Y-координату:

    #Let byte ss = if (yy[@-1]<0 and yy>0, 5, 0)
    #Series X=xx Y=yy S=ss

Номер текущей ячейки всегда содержится в переменной @ или RowIndex. Нумерация ячеек начинается с нуля. Записи yy и yy[@] в выражениях эквивалентны.

Ещё одно полезное применение — обращение к данным, хранящимся в другой матрице. Допустим, на графике изображаются точки нескольких классов, причём точек может быть очень много, а число классов невелико. Рядом с каждой точкой должно выводиться имя класса (name), которое может быть довольно длинным. Держать дублирующую информацию об именах классов в основной матрице точек не рационально. Лучшее решение заключается в том, чтобы завести отдельную матрицу для имён классов:

    #NewData text class_name
    #NewData xx, yy, class_id
    #Let text tr = class_name[class_id]
    #Series X=xx Y=yy TR=tr С=class_id

## Выражения: Строки со вставками

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

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

    "Число пи=" & PI & ", более точно пи=" & format ("%.16f", PI) & "."
    "Число пи=[PI], более точно пи=[PI%.16f]."

Результатом обоих выражений будет строка

    Число пи=3.14159, более точно пи=3.1415926535897931

После выражения-вставки может следовать формат вывода, начинающийся знаком % и продолжающийся до закрывающей квадратной скобки. Такие же форматы вывода используются в функции format.

## Выражения: Форматы вывода чисел

Числовые форматы используются в строках со вставками и в функции format.
Форматы задаются по правилам функции printf языка С. Числовой формат начинается со знака % и завершается одной из ключевых букв d, i, b, o, u, x, X, f, e, E, g, G. Между % и ключевой буквой могут быть указаны необязательные параметры:

- [flag] — комбинация флагов -, +, 0, пробел, #;
- [width] — минимальная длина выводимой строки в символах;
- [.prec] — число знаков после запятой при выводе вещественных чисел.

%[flag][width]d или i | целое число со знаком
%[flag][width]u | целое число без знака
%[width]b | двоичное целое число без знака
%[flag][width]o | восьмеричное целое число без знака
%[flag][width]x | шестнадцатеричное целое без знака, используются прописные буквы a, b, c, d, e, f
%[flag][width]X | шестнадцатеричное целое без знака, используются заглавные буквы A, B, C, D, E, F
%[flag][width][.prec]e %[flag][width][.prec]E | вещественное в экспоненциальной форме: 1.2e4, 3.1E-4
%[flag][width][.prec]f | вещественное с плавающей точкой: 12000.0, 0.00031
%[flag][width][.prec]g %[flag][width][.prec]G | кратчайшая из двух форм: e и f

## Выражения: Форматы дат и времени

Форматы дат и времени используются в строках со вставками и в функции format.

Форматы задаются по правилам функции strftime языка С. В отличие от числовых форматов любое количество форматов дат-времени можно объединить для вывода одного значения. Например, результатом выражения

    "Today [now() %#d %B %Y, %A, %H:%M:%S]."

будет строка вида

    Today 4 February 2000, Monday, 15:04:55

Необязательный аргумент [flag] может принимать только одно значение #. Для форматов %#c и %#x он выводит дату в более подробной форме. Для остальных форматов — удаляет лидирующие нули (4 вместо 04).

%[flag]c | стандартное представление даты и времени
%[flag]x | стандартное представление даты
%X | стандартное представление времени
%[flag]Y | четырёхзначный год (от 1970)
%[flag]y | последние две цифры года (от 00 до 99)
%B | полное название месяца
%b | сокращённое название месяца
%[flag]m | номер месяца (от 01 до 12)
%[flag]d | день месяца (от 01 до 31)
%[flag]H | часы (от 00 до 24)
%[flag]I | часы (от 00 до 12)
%p | индикатор до полудня / после полудня
%[flag]M | минуты (от 00 до 59)
%[flag]S | секунды (от 00 до 59)
%a | сокращённое название дня недели
%A | полное название дня недели
%[flag]w | порядковый номер дня недели (0=воскресенье, 1=понедельник, ..., 6=суббота.)
%[flag]j | порядковый номер дня в году (от 001 до 366)
%[flag]U | порядковый номер недели в году (от 00 до 51) если неделя начинается с воскресенья
%[flag]W | порядковый номер недели в году (от 00 до 51) если неделя начинается с понедельника
%z %Z | полное и сокращённое название часового пояса

Форматы даты-времени b, d, x, X конфликтуют с одноимёнными числовыми форматами. Если одна из этих букв оказалась последней в формате даты-времени, то после неё следует поставить букву T:

    "Today [now() %#xT]."

## Выражения: Операции и их приоритет

В выражениях допускаются следующие операции (в порядке повышения приоритета):

`,` | последовательное вычисление
`:=` | присваивание
`or` | логическое ИЛИ
`and` | логическое И
`not` | логическое НЕ
`<= >= <> < > =` | операции сравнения
& | конкатенация строк
`+ -` | арифметическое сложение и вычитание
`* / mod` | арифметическое умножение, деление и остаток
^ | возведение в степень

Приоритет операций может быть изменён с помощью скобок.

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

    sqrt(a*a+b*b) + 1/sqrt(a*a+b*b)
    R:=sqrt(a*a+b*b), R+1/R

Результатом операции последовательного вычисления является последнее выражение в списке.

Результатом операции присваивания является значение выражения справа от знака `:=`. Переменные, стоящие слева от знака `:=`, являются локальными и не должны совпадать с именами столбцов данных.

Небольшое отличие от языков программирования типа C и Pascal имеется в операциях сравнения. Запись

    0 < x < 1

корректна и имеет общепринятый математический смысл, то есть является сокращённой записью выражения

    0 < x and x < 1

Допускаются цепочки сравнений произвольной длины, включающие любые из 6 операций сравнения, например

    0 < x <= y1 = y2 > 1

## Выражения: Функции

Функции в общем случае могут иметь произвольное число аргументов, которые записываются после имени функции в скобках через запятую.

По числу аргументов функции разбиваются на 4 группы:

- Функции с фиксированным числом аргументов (sqrt, sin, exp, mod).
- Функции с необязательными аргументами (log, rand, setbit).
- Функции с произвольным числом аргументов (min, if, steps, xor).
- Функции без аргументов (now(), rand()).

Для функций без аргументов пустые скобки обязательны.

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

Спецификации приводятся в виде

    имя_функции (типы_входных_аргументов): тип_значения

Необязательные аргументы заключаются в квадратные скобки [ ]. Аргументы, которые могут повторяться более одного раза, заключаются в фигурные скобки { }. Слово any означает, что аргумент может иметь произвольный тип.

### Выражения: Функции преобразования типов

#### Bool (any): bool

преобразование any в логический тип

#### Int (any): int

преобразование any в целый тип

#### Real (any): real

преобразование any в вещественный тип

#### String (any): string

преобразование any в строковой тип

#### Datetime (any): datetime

преобразование any в дату и время

### Выражения: Функции проверки значений

#### IsEmpty (any): bool

TRUE если any пустое или ошибочное

#### IsNumber (any): bool

TRUE если any приводимо к типу real

#### IsTime (any): bool

TRUE если any приводимо к datetime

### Выражения: Числовые функции с фиксированным числом аргументов

#### Abs (real): real

абсолютная величина (модуль) числа real

#### Sign (real): int

сигнум числа real, принимает значения: -1 при real<0; 0 при real=0; 1 при real>0

#### Max ({real}): real

максимум чисел

#### Min ({real}): real

минимум чисел

#### Sqrt (real): real

квадратный корень числа real

#### Sin (real): real

синус числа real

#### Cos (real): real

косинус числа real

#### Tg (real): real

тангенс числа real

#### Arcsin (real): real

арксинус числа real

#### Arccos (real): real

арккосинус числа real

#### Arctg (real): real

арктангенс числа real

#### Sh (real): real

гиперболический синус числа real

#### Ch (real): real

гиперболический косинус числа real

#### Th (real): real

гиперболический тангенс числа real

#### Exp (real): real

экспонента числа real

#### Log (real, [real2]): real

логарифм real1 по основанию real2, либо натуральный, если real2 опущен

#### FNorm (real, [real1], [real2]): real

функция нормального распределения с МО=real1 и СКО=real2. Если real2 опущено, полагается МО=0, СКО= real1. Если real1 и real2 опущены, полагается МО=0, СКО=1.

#### rand ([real1], [real2]): real

случайное число из диапазона [real1,real2), [0,real1) или [0,1)

#### round (real): real

округление до ближайшего целого

#### upround (real): real

ближайшее большее или равное целое (потолок)

#### dnround (real): real

ближайшее меньшее или равное целое (пол)

### Выражения: Логические функции

#### Xor (bool, {bool}): bool

логическое исключающее ИЛИ

### Выражения: Битовые функции для целых чисел

#### Bit (int1, int2): bool

int2-ый бит в целом числе int1

#### SetBit (int1, [int2], [bool]): int

установить int1-ый бит числа int2 (0 если опущен) в bool (1 если опущен)

#### NotBit (int): int

побитовое отрицание

#### OrBit (int, {int}): int

побитовое ИЛИ

#### AndBit (int, {int}): int

побитовое И

#### XorBit (int, {int}): int

побитовое исключающее ИЛИ

### Выражения: Функции для работы с датой и временем

#### now ( ): datetime

текущая дата-время

#### time (any): datetime

преобразование any в datetime с выделением времени

#### date (any): datetime

преобразование any в datetime с выделением даты

#### year (datetime): int

выделение года из datetime

#### month (datetime): int

номер месяца в году, нумерация с 1

#### day (datetime): int

номер для в месяце, нумерация с 1

#### hours (datetime): int

выделение часов с полуночи из datetime

#### minutes (datetime): int

выделение минут из datetime

#### seconds (datetime): int

выделение секунд из datetime

#### WeekDay (datetime): int

номер дня недели, ВС=0, ПН=1, ..., СБ=6

#### WeekDayRus (datetime): int

номер дня недели, ПН=1, ..., СБ=6, ВС=7

#### YearDay (datetime): int

номер дня в году

### Выражения: Функции для работы со строками

#### len (string): int

длина строки

#### pos (string1, string2): string

позиция строки string2 в строке string1, или (-1) если не найдена; нумерация символов строки начинается с 0

#### left (string, int): string

головная часть строки длиной int

#### right (string, int): string

хвост строки длиной int

#### mid (string, int1, int2): string

средняя часть строки начиная с позиции int1 длиной int2, нумерация с 0

#### format (string, any): string

форматный вывод any согласно спецификации, заданной в string

### Выражения: Условные и пороговые функции

#### if ({bool1, any1}, [anyLast]): any

условное выражение, возвращает:
any1, если bool1=TRUE,
any2, если bool2=TRUE,
... и так далее ... ,
anyLast, если все нечётные аргументы равны FALSE.

#### steps (real1, {real}): int

ступенчатая функция, возвращает:
0, если real1<real2,
1, если real2<=real1<real3,
2, если real3<=real1<real4,
... и так далее ...

#### switch (any, {any1, any2} [anyLast]): any

переключатель значений, возвращает:
any2, если any=any1,
any4, если any=any3,
... и так далее...
anyLast, если все равенства не верны.

# Интерактивные возможности

Интерактивность

- Навигация по 2D-графику (поддерживается библиотекой ChartLib)
- Навигация по 3D-графику (поддерживается библиотекой ChartLib)
- Исследование точек графика (поддерживается библиотекой ChartLib)
- Горячие клавиши (поддерживаются компонентом TSliChart)
- Утилита просмотра графиков chdView
- Функции меню (поддерживаются утилитой chdView)

При выводе слайда в окно библиотека поддерживает ряд интерактивных возможностей.

Функции навигации по графику и просмотра точек поддерживаются на уровне библиотеки ChartLib.

Горячие клавиши поддерживаются компонентом TSliChart.

Функции меню реализованы в утилите просмотра chdView.

## Интерактивность: Навигация по двумерному графику

Навигация по двумерному графику осуществляется с помощью мыши. Функционирование кнопок мыши может быть изменено командами Button и DefaultButton.

Масштабирование производится при выделении прямоугольной области левой кнопкой мыши. Выделение слева направо увеличивает масштаб, выделение справа налево возвращает график к автоматическому масштабу, при котором видны все точки графика.

Сдвиг графика производится движением мыши с нажатой правой кнопкой.

Масштабирование по оси производится, если потянуть за ось при нажатой левой кнопке мыши. Движение в сторону положительного направления оси увеличивает масштаб (растягивает график), в сторону отрицательного — уменьшает масштаб (сжимает график). Масштаб по второй оси не изменяется. Неподвижной на оси остаётся точка, с которой начали тянуть.

Сдвиг по оси производится, если потянуть за ось при нажатой правой кнопке мыши. Направление сдвига совпадает с направлением движения вдоль оси. При этом масштаб по второй оси не изменяется.

## Интерактивность: Навигация по трёхмерному графику

Навигация по трёхмерному графику осуществляется только с помощью клавиатуры.

Просмотр трёхмерной сцены может производиться в пассивном или активном режиме. В первом случае наблюдатель, находясь в неподвижной точке, вращает, сдвигает и масштабирует сцену. Этот режим предназначен для общего обзора сцены. Во втором случае наблюдатель перемещается по сцене в произвольных направлениях, что позволяет детально изучить сцену. По умолчанию установлен пассивный режим.

В обоих режимах просмотра действуют клавиши

| Переключение режима просмотра: активный / пассивный
| Возврат в исходное положение сцены
| Растяжение-сжатие всей сцены по оси X
| Растяжение-сжатие всей сцены по оси Y
| Растяжение-сжатие всей сцены синхронно по осям X и Y
| Растяжение-сжатие всей сцены по оси Z

В пассивном режиме действуют клавиши

| Вращения сцены
| Сдвиг сцены относительно центра окна
| Увеличение сцены
| Уменьшение сцены

В активном режиме действуют клавиши

| Перемещение вперёд-назад
| Поворот на месте влево-вправо
| Перемещение, не поворачиваясь, вверх-вниз-влево-вправо
| Смотреть выше ("поднять голову")
| Смотреть ниже ("опустить голову")
| Обернуться назад

## Интерактивность: Просмотр точек графика

Функционирование кнопок мыши может быть изменено командами Button и DefaultButton.

Выбор подмножества точек графика при выделении области левой кнопкой мыши при нажатой клавише . Форму выделяемой области можно варьировать (прямоугольник, эллипс, полуплоскость, полоса). Щелчок на точке левой кнопкой мыши при нажатой клавише выбирает указанную точку или несколько сразу, если они перекрываются. Выбранные точки обводятся цветом (по умолчанию белым, см. также свойство графика SelectColor). Выбранными могут быть только точки, имеющие размер (S>1 и W>0).

Выдача сводной таблицы по выбранным точкам. Для каждой точки выводится текстовая строка TT. Перемещение по строкам таблицы синхронизировано с активизацией точки на графике.

Активизация любой точки нажатием левой кнопки мыши. Активизация отличается от выбора тем, что активной может быть только одна точка. Клавиши и активизируют предыдущую и следующую точку в пределах той же серии. Клавиши и позволяют перемещаться по сериям. Активная точка подсвечивается (по умолчанию жёлтым цветом, см. также свойство графика ActiveColor), рядом выводится текстовый комментарий TR. Повторное нажатие левой кнопки мыши на той же точке снимает активизацию.

Запуск команды операционной среды. Командная строка задаётся для каждой точки свойством TE.

Вывод комментария рядом с каждой из выбранных точек. Текст комментария задаётся для каждой точки свойством TN.

Подсветка точки, свечи или колонки гистограммы, на которой остановился курсор мыши (по умолчанию голубым цветом, см. также свойство графика HighlightColor). Одновременно в статусную строку выводится текстовый комментарий, задаваемый свойством TB .

Вывод текущих координат курсора мыши в статусную строку. Если мышь работает в режиме выделения, сдвига или масштабирования, в статусной строке сообщается размер выделяемой области.

## Интерактивность: Горячие клавиши

Компонент TSliChart поддерживает все описанные выше функции навигации и просмотра, и дополнительно определяет реакцию на горячие клавиши:

| Перерисовка графика без чтения из файла
| Копирование графика в буфер обмена
| Печать графика на принтере
| Вывод таблицы выделенных точек
| Переход к следующему слайду
| Переход к предыдущему слайду
| Циклическое переключение режимов выделения точек: добавление, удаление, инверсия выделения
| Циклическое переключение формы выделяемой области: прямоугольник, эллипс, полуплоскость, полоса
| Выделение всех точек (снятие, инвертирование — в зависимости от текущего режима выделения)
| Навигация по панелям слайда

## Интерактивность: Утилита просмотра графиков chdView

Утилита chdView предназначена для просмотра графиков формата CHD в одном или нескольких окнах. Она поддерживает полный набор интерактивных возможностей, реализованных в библиотеке ChartLib и в компоненте TSliChart, и дополнительно предоставляет возможности работы с файлами, выделения подмножеств точек, работы со слайдами и фильмами. Доступ к этим возможностям осуществляется через меню, организованное в форме панели инструментов.

При вызове утилиты ей передаётся список загружаемых файлов:

    chdView <опции> <файл> ... <опции> <файл> <опции>

Утилита воспринимает следующие опции (между именем опции и значением опции не должно быть пробела):

-dИмяДиректории | Имя директории, из которой будут считываться все последующие файлы.
-wШиринаОкна | Ширина окна программы просмотра графиков, в пикселах.
-hВысотаОкна | Высота окна программы просмотра графиков, в пикселах.
-xЛевоОкна | Позиция левого края окна программы просмотра графиков, в пикселах.
-yВерхОкна | Позиция верхнего края окна программы просмотра графиков, в пикселах.
-n | Создать новый слайд. Если опция не указана перед именем файла, и этот файл не содержит собственной команды #NewSlide, то содержимое файла будет загружено на предыдущий слайд.
-s | Использовать встроенную статусную строку на каждом слайде.
-b | Отключить двойную буферизацию. Двойная буферизация скрывает процесс прорисовки графика, выводя сразу готовое изображение. При этом расходуется дополнительный объём памяти на хранение растрового изображения графика в каждом открытом окне.
-/ | Игнорировать остаток командной строки.

При запуске без параметров утилита chdView показывает слайд с пустым графиком. В этом случае пользователь загружает CHD-файл для просмотра с помощью кнопок меню.

## Интерактивность: Функции меню

Перечисленные ниже функции меню поддерживаются только утилитой chdView. Некоторые из этих функций доступны также через панель инструментов и выпадающее меню.

Меню «Файл»

| Открыть CHD-файл и загрузить его содержимое на новый чистый слайд
| Открыть CHD-файл и загрузить его содержимое вместо текущего слайда
| Открыть CHD-файл и загрузить его содержимое поверх текущего слайда
| Открыть CHD-файл и загрузить его содержимое в новое окно
| Сохранить текущий слайд
| Сохранить все слайды фильма в серию файлов
| Распечатать слайд
| Закрыть все окна, выйти из программы

Меню «Вид»

| Отменить показ тектовых комментариев TR рядом с точками
| Показывать тектовые комментарии TR только рядом с выделенными точками
| Показывать тектовые комментарии TR рядом со всеми точками
| Обновить слайд
| Установить максимальный масштаб отображения для всех графиков на слайде. Максимальный масштаб позволяет увидеть все точки графика.
| Включить/отключить режим двойной буферизации. При включенной буферизации слайд прорисовывается быстрее и без мелькания на экране, но это требует большего объёма памяти.

Меню «Выделение»

| Выделять точки
| Снимать выделение с точек
| Инвертировать выделение точек
| Выделить все точки графика
| Форма выделителя области — прямоугольник
| Форма выделителя области — эллипс
| Форма выделителя области — полуплоскость
| Форма выделителя области — полоса
| Выделять/не выделять точки, находящиеся за пределами видимой в окне области графика
| Вывести сводную таблицу по выделенным точкам

Меню «Слайды»

| Перейти на первый слайд в фильме
| Перейти на предыдущий слайд в фильме
| Перейти на следующий слайд в фильме
| Перейти на последний слайд в фильме
| Запустить показ фильма. Все слайды показываются последовательно с заданной задержкой.
| Остановить показ фильма
| Показывать фильм в цикле бесконечное число раз
| Скопировать слайд в буфер
| Очистить слайд, удалив с него все графики
| Удалить слайд, изъять его из фильма
| Переместить текущий слайд, поставив его первым в фильме
| Поменять местами текущий слайд и предыдущий
| Поменять местами текущий слайд и следующий
| Переместить текущий слайд, поставив его последним в фильме
| Выдать справочную информацию о количестве и именах слайдов

Меню «Справка»

| Руководство по формату CHD
| Инструкция пользования утилитой chdView
| Включить/отключить всплывающие подсказки на кнопках меню
| Домашняя страница разработчика в Internet
| Кратко о программе

# Глоссарий команд CHD

### A

About
ActiveColor
ActiveTransparency
AlignTicks
ArrowAngle
ArrowSize
AutoScaleX
AutoScaleY
AutoScaleZ
AverageColors

### B

Back
Background
Border
Border3D
BorderColor
Button

### C

CandleBase
CandleWidth
Clear
ClearData
ClearSlide
CLFontsDir
Color
ColumnsThickness
ColWidth
CreateSlide
Cursor

### D

Data
DataSlide
DataSlide
DateFormat
DateTimeRange
DefaultButtonoper
DefColor
DefFont
DefStyle
DeleteData
DeleteFilm
DeleteSlide
DiscreteStyle
DrawBlockSize
DumpDataexpr
DumpDataStructure
DumpFile
DumpPcode
DumpSeriesStructure
DumpSlidesList
DumpSlideStructure

### E

Echo
EchoFile
EmptyIntervals
Encoding
EndStyle
ExternData
ExtraX
ExtraY
ExtraZ

### F

FontStyle
Format

### G

GradMaxSize
GradMinCells
GridColor
GridOverFills
GridStyle
Group

### H

HGrid
HighlightColor
HorizHist

### I

Include
IndentBottom
IndentHoriz
IndentLeft
IndentRight
IndentTop
IndentVert
IntervSpace

### J

Justify
Justify

### L

LabelDist
LabelFormat
Labels
Let
LetBounds
Line
Locale

### M

Matrix
MatrixClear
MatrixEnable
MinHeight
MinWidth

### N

nCols
NewData
NewPanel
NewSlide
nPointsPerCol

### O

OutEncoding
OutlineColumns

### P

Panel
PlacingStyle
PoseTN

### R

Ranges
RangesStyle
Relet
ResizeData
RobustFactor
RobustLimit
RobustPoints
Rule
RuleColor
RulePose

### S

SelectColor
SelectMode
SelectOutside
SelectShape
Series
SeriesModify
SeriesOff
SeriesOn
SeriesSize
SetFilm
SetReload
Shadow
ShowLN
ShowTN
ShowTR
Slide
SlideMove
SpaceHoriz
SpaceVert
StatusOnMouseDrag
StatusOnMouseMove
Style
SyncAxis
SyncMaster
SyncYZ
Syntax
SystemDate

### T

TableTitle
Text
ThousandsSep
TitleBelowPose
TitlePose
Transparency
Type

### V

VertHist
VGrid
ViewFi
ViewPersp
ViewScaleX
ViewScaleY
ViewScaleZ
ViewTheta
Visible

### X

XNamePose

### Z

ZoomX
ZoomY
ZoomZ