Формат TVL-файлов

 TVL-файлы (от "TriQuick oVerLay") – это несложные векторные изображения, сохраняемые в специальных текстовых файлах очень простого формата. Эти файлы могут создаваться и редактироваться не только в TriQuick, но и в других программах (включая простые текстовые редакторы типа Блокнота).
 Формат TVL-файлов не отличается широкими возможностями, большой гибкостью и компактностью. Однако, он весьма прост для понимания, записи и чтения. TriQuick может читать текстовые TVL-файлы, созданные как в Windows (с двухсимвольными признаками концов строк CR+LF), так и в других ОС (с односимвольными признаками концов строк CR или LF), однако сохраняет только с теми концами строк, которые указаны на вкладке Axes, grid, legend, files окна Settings в переменной EOL.
 Отличительной особенностью TVL-изображений является то, что они специально ориентированы на использование в диаграммах: как прямоугольных (с независимыми шкалами по двум осям), так и на треугольных (с тремя осями координат). Вследствие этого диаграммной графике присущи такие специфические свойства, как:

  • Сжатие и растяжение объектов (кроме текста и символов в массивах точек) происходят в соответствии с независимыми изменениями масштабов по осям;
  • Толщина линий и размеры символов в текстовых объектах и массивах точек не меняются при масштабировании;
  • Наклоны прямоугольников, эллипсов и текста выражаются не в градусах, а только в отношениях dY/dX (по кр. мере в нынешней версии).

Заголовок файла
 Первая строка файла должна быть ключевой фразой "TriQuick Overlay Version", за которой после знака равенства должен стоять номер версии (сейчас 1).
 Вторая строка содержит одно целое число – число осей диаграммы, для которой предназначен рисунок (2 или 3).
 Далее следуют 2-3 строки, в которых определяются названия осей (2 строки для прямоугольных диаграмм, 3 строки – для треугольных). Для прямоугольных диаграмм сначала указывается название нижней горизонтальной оси X, затем левой вертикальной оси Y. Для треугольных диаграмм сначала указывается название верхнего угла T (вертикальной оси), затем левого нижнего угла L, затем правого нижнего угла R. По этим названиям (как и по числу осей) TriQuick определяет, насколько подходит данный TVL-файл для размещения на текущей диаграмме.
 Далее следует строка, содержащая название рисунка.
 Далее только для прямоугольных диаграмм (с двумя осями) идёт строка с указаниями границ рисунка в последовательности: Xmin Xmax Ymin Ymax. Эти границы не обязательно соответствуют границам прямоугольника, ограничивающего все объекты рисунка, они могут быть как больше, так и меньше него (их главное назначение – подгонка границ диаграммы при загрузке TVL-файла).
 Далее до конца файла идут блоки строк с описаниями объектов.
 Пример заголовка файла для прямоугольной диаграммы:

TriQuick Overlay Version=1
2
T,°C
P,kbar
Схема фаций метаморфизма
200 1100 0.001 15

Блоки с описаниями объектов

 Первая строка каждого блока начинается с идентификатора объекта (определяющего его тип), за которым должен стоять знак равенства (=):

  • Overlay= имя другого (вложенного) TVL-файла;
  • Image= имя графического файла с расширениями BMP, JPG, PNG, WMF или EMF;
  • Polygon= многоугольник;
  • Line= ломаная линия (не замкнутая);
  • Bezier= кривая Безье (как для разомкнутых, так и для замкнутых и закрашенных областей);
  • Rectangle= прямоугольник;
  • Ellipse= эллипс;
  • Marker= группа точек, отмеченных условными значками (аналог точек на диаграмме);
  • Text= текстовый блок;
  • Info= информационный текстовый блок.

 Объект "Overlay" служит для вложения одних TVL-файлов в другие. Его запись состоит только из одной строки, в которой за знаком равенства должно стоять только имя TVL-файла (с расширением). Вкладываемый файл должен находиться либо в том же каталоге, что и "родительский" TVL-файл, либо перед его именем должен быть указан путь относительно места расположения родительского, например:

Overlay=..\..\templates\shared.tvl

 Объект "Image" – это растровое или векторное изображение, которое надо разместить на заднем плане. Его запись аналогична записи для объекта "Overlay": одна строка с именем файла (возможно, содержащая путь к нему). Если диаграмма прямоугольная, то границы этого изображения подгоняются под заданные в заголовке диапазоны осей. Однако, если это векторный метафайл (файл с расширением WMF или EMF), в котором были сохранены координаты, то диапазоны осей на диаграмме будут переустановлены, т.е. они обладают преимуществом перед значениями, указанными в заголовке TVL-файла.
 Для всех объектов, кроме "Overlay" и "Image", сразу после знака равенства должна стоять буква "B" или "F". "B" означает, что этот объект должен размещаться на заднем плане диаграммы, т.е. под точками данных, сеткой и осями. "F" означает, что этот объект должен размещаться на переднем плане диаграммы, т.е. перекрывать точки данных, сетку и оси. После этой буквы через пробел может стоять вторая буква, задающая видимость объекта ("Y" – объект отображается, "N" – объект скрыт). По умолчанию (если буквы видимости нет) объекты видимы. Затем, после знака точки с запятой (;) следует название объекта. Например:

Polygon=B Y;Маленький жёлтый треугольник

 Вторая строка блока с объектом содержит параметры последнего (через пробелы), несколько различающиеся в зависимости от его типа (как и остальные строки блока).

Polygon
 Вторая строка:

  • LineColor – цвет контура многоугольника
  • LineWidth – толщина линии контура многоугольника (в пикселах экрана) в виде целого числа от 1 до 9
  • LineStyle – стиль линии контура многоугольника в виде целого числа от 0 до 5:
    1. сплошная
    2. пунктирная (длинный пунктир)
    3. точками (короткий пунктир)
    4. точка-тире
    5. точка-точка-тире
    6. нет контура
    Однако, если толщина линии больше 1 пиксела, то она отображается только сплошной.
  • FillColor – цвет заливки многоугольника
  • FillStyle – стиль заливки многоугольника в виде целого числа от 0 до 7:
    1. сплошная
    2. нет заливки
    3. горизонтальная штриховка
    4. вертикальная штриховка
    5. косая штриховка в правый нижний угол
    6. косая штриховка в правый верхний угол
    7. штриховка в прямую клетку
    8. штриховка в косую клетку

 В третьей строке находится единственное целое число – количество вершин многоугольника, в остальных строках записаны координаты этих вершин (по одной вершине в строке).
 Пример блока с описанием многоугольника:

Polygon=B Y;Многоугольник 1
#000000 1 0 #B0F0F2 0
7
85 50
71.822 77.364
42.212 84.122
18.466 65.186
18.466 34.814
42.212 15.878
71.822 22.636

Line

 Вторая строка:

  • LineColor – цвет линии
  • LineWidth – толщина линии (в пикселах экрана) в виде целого числа от 1 до 9
  • LineStyle – стиль линии (здесь и далее см. аналогичные параметры для многоугольников)

 В третьей строке находится единственное целое число – количество узлов линии, в остальных строках записаны координаты этих узлов (по одному узлу в строке).
 Пример блока с описанием линии (для тройной диаграммы):

Line=B Y;H2O
#808080 1 1
2
0 66.667 33.333
100 0 0

Bezier

 Вторая строка:

  • LineColor – цвет линии
  • LineWidth – толщина линии (в пикселах экрана) в виде целого числа от 1 до 9
  • LineStyle – стиль линии (здесь и далее см. аналогичные параметры для многоугольников)
  • FillColor – цвет заливки замкнутой кривой Безье
  • FillStyle – стиль заливки для замкнутой кривой Безье

 Для незамкнутых кривых Безье последние 2 параметра не указываются.
 В третьей строке находится единственное целое число – количество опорных и управляющих узлов линии, в остальных строках записаны их координаты (по одному узлу в строке). Перед координатами опорных узлов через пробел указывается символ, обозначающий тип узла:

  • C – угловой, или вершинный узел (Cusp): место перелома линии;
  • S – гладкий узел (Smooth): линия сохраняет гладкость, но её кривизна различна по обе стороны от опорного узла (т.е. управляющие точки лежат на одной касательной линии, но на разных расстояниях от опорного узла);
  • E – симметричный, или равносторонний узел (Equidistant): линия гладкая с одинаковой кривизной по обе стороны от опорного узла (т.е. управляющие точки лежат на одной касательной линии и на равных расстояниях от опорного узла)

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

Bezier=B Y;4FeAct+3An=11Hed+3Alm+7Qtz+4H2O
#FF0000 1 0
4
C 1065 1
 1454.933 3.675
 671.469 13.107
C 100 13.5

 Пример блока с описанием замкнутой кривой Безье:

Bezier=B Y;Yellow area
#FF0000 2 0 #FFFF00 0
13
E 31 29
 22.2 34
 14.6 53.6
E 21 62
 27.4 70.4
 54.2 76
S 63 71
 71.8 66
 71.4 45.4
E 65 37
 58.6 28.6
 39.8 24
E 31 29

Rectangle

 Вторая строка:

  • LineColor – цвет линии контура
  • LineWidth – толщина линии контура (в пикселах экрана) в виде целого числа от 1 до 9
  • LineStyle – стиль линии контура (здесь и далее см. аналогичные параметры для многоугольников)
  • FillColor – цвет заливки
  • FillStyle – стиль заливки

 Третья строка содержит три рациональных числа (через пробелы): длина прямоугольника по горизонтальной оси (X), длина прямоугольника по вертикальной оси (Y), наклон прямоугольника (dY/dX, допустимы отрицательные значения).
 Последняя, четвёртая строка содержит координаты центра прямоугольника.
 Пример блока с описанием прямоугольника:

Rectangle=F Y;Sloped
#FF0000 2 0 #5AB489 0
28.984 20.455 0.95
71.166 20

Ellipse

 Вторая строка:

  • LineColor – цвет линии контура
  • LineWidth – толщина линии контура (в пикселах экрана) в виде целого числа от 1 до 9
  • LineStyle – стиль линии контура (здесь и далее см. аналогичные параметры для многоугольников)
  • FillColor – цвет заливки
  • FillStyle – стиль заливки

 Третья строка содержит три рациональных числа (через пробелы): длина эллипса по горизонтальной оси (X), длина эллипса по вертикальной оси (Y), наклон эллипса (dY/dX, допустимы отрицательные значения).
 Однако, для эллипсов допустимо и альтернативное задание их параметров в третьей строке (специально для поддержки построения эллипсов погрешностей): среднеквадратическое отклонение по горизонтальной оси (X), среднеквадратическое отклонение по вертикальной оси (Y), коэффициент корреляции, число переменных (от 1 до 3), доверительная вероятность (%).
 Последняя, четвёртая строка содержит координаты центра эллипса.
 Примеры блоков с описаниями эллипсов:

Ellipse=B;Мой жёлтый эллипс
#000000 1 0 #FFFF00 0
105.428 4.089 0.5 |ширина, высота, наклон
700.918 7.28

Ellipse=B;Эллипс погрешностей
#008000 2 0 #D9FFD9 0
60 0.9 0.883 2 99.9 |dX, dY, коэфф. корр., n, довер. инт.
650 9.2

Marker

 Вторая строка:

  • Type – тип значка в виде целого числа от 0 до 8:
    1. кружок
    2. квадратик
    3. треугольник
    4. перевёрнутый треугольник
    5. ромбик
    6. прямой крестик
    7. косой крестик
    8. 8-лучевая звёздочка
    9. точка
  • Size – размер значка (в пикселах экрана) в виде целого числа от 2 до 15
  • LineColor – цвет контура значка
  • LineWidth – толщина линии контура значка (в пикселах экрана) в виде целого числа от 1 до 9
  • LineStyle – стиль линии контура значка (здесь и далее см. аналогичные параметры для многоугольников)
  • FillColor – цвет заливки значка
  • FillStyle – стиль заливки значка

 В третьей строке находится единственное целое число – число точек в массиве, в остальных строках записаны координаты этих точек (по одной точке в строке).
 Пример блока с описанием точек:

Marker=B Y;Большие кружки
0 14 #FF0000 2 0 #FFFF00 0
3
29.711 72.855
50.545 75.748
40.759 57.979

Text

 Вторая строка:

  • Font – название шрифта (зарегистрированное в ОС), после него стоит точка с запятой (;)
  • Charset – номер набора символов (кодировки) в виде целого числа. Номера в стандартных шрифтах "русской" ОС Windows XP:
    1. кодировка по умолчанию (выбранная в ОС)
    2. русский
    3. ANSI
    4. иврит
    5. арабский
    6. греческий
    7. турецкий
    8. балтийский
    9. восточноевропейский
    10. вьетнамский
    Однако, допустимые кодировки (и максимальный номер) зависят от конкретной реализации выбранного шрифта. В большинстве случаев достаточно использовать кодировку по умолчанию (0).
  • Color – цвет символов
  • Size – размер символов (в точках, зависит от разрешения устройства вывода) в виде целого числа
  • Bold – полужирный: "Y" – да, "N" – нет
  • Italic – курсив: "Y" – да, "N" – нет
  • Underline – подчёркнутый: "Y" – да, "N" – нет
  • StrikeOut – перечёркнутый: "Y" – да, "N" – нет
  • Background – рисование фона: "Y" – да, "N" – нет (по умолчанию, т.е. этот параметр может быть опущен)

 Третья строка содержит одно рациональное число – наклон текста (dY/dX, допустимы отрицательные значения).
 Четвёртая строка содержит целое число – количество строк текста в блоке, после которой идут собственно строки.
 Последняя строка содержит координаты центра текстового блока.
 Пример блока с описанием текста:

Text=F N;Подпись на линии фазового перехода
Arial; 0 #800000 12 Y N N N
0.028
2
Алмаз
Графит
856 39.3

Info

 Вторая строка аналогична таковой для обычного текста (см. выше).
 Третья строка содержит двухбуквенный код (в любом регистре), определяющий положение текстового блока относительно осей диаграммы. Допустимые буквы:

  • L – слева
  • R – справа
  • T – сверху
  • B – снизу
  • C – по центру

 Порядок букв (т.е. осей) в этом коде может быть любым (однако, TriQuick всегда первым записывает символ для горизонтальной оси).
 Четвёртая строка содержит целое число – количество строк текста в блоке, после которой идут собственно строки.
 Пример блока с описанием информационного текста:

Info=F;Информация
Arial; 0 #800000 12 Y N N N Y
LT
6
Образец: D1234-56
Анализы:
Grt 12
Bt 9
Opx 3
Pl 7

Комментарии в TVL-файлах

 Любые количества строк-комментариев могут находиться между блоками описаний объектов без условных значков комментирования. Кроме того, комментарии могут быть помещены в конце любых строк после предваряющего символа "трубы" (|). Однако, TriQuick полностью игнорирует комментарии при чтении файлов (равно как и пустые строки) и они уничтожаются при обычных процедурах сохранения TVL-файлов в программе.

Записи цветов в файлах TriQuick
 Цвета в текстовых файлах TriQuick указываются, как 8-битные RGB-значения в стандартном 16-ричном представлении (цифрами 0..9 и A..F). Записи с цветом предшествует префикс – знак решётки (#), после которого слитно следуют 3 целых двузначных числа в последовательности компонентов (каналов): R, G, B. Например, запись "#FF00BB" определяет ярко-розовый цвет с максимальным значением красного компонента R (FF=255), минимальным значением зелёного компонента G (00) и промежуточным значением синего компонента B (BB=187).

Записи координат в TVL-файлах
 Все значения координат записываются, как рациональные числа (десятичные дроби). В файлах изображений, предназначенных для прямоугольных диаграмм (с двумя осями), единственный вариант записи координаты представляет собой два числа, разделённые одним из символов-разделителей, указанных в переменной Delimiters инициализационного файла TriQuick.ini (по умолчанию – знаком табуляции с кодом 9), сначала по горизонтальной оси (X), затем по вертикальной оси (Y).
 Треугольные диаграммы (с тремя осями) допускают два равноправных варианта задания координат. На всём поле диаграммы (включая области как внутри, так и за пределами треугольника), возможно задание прямоугольных координат – парой значений по общим (подразумеваемым) горизонтальной и вертикальной осям. Вершины треугольника в этой системе имеют координаты: верхний угол T (X=0.5, Y=√3/2), левый нижний угол L (X=0, Y=0) и правый нижний угол R (X=1, Y=0). Внутри треугольника координаты можно также записывать тройкой положительных значений по его осям, в последовательности T, L, R (это представление используется в программе по умолчанию). TriQuick всегда нормализует прочитанные/введённые тройные координаты в соответствии с суммой T+L+R=100. Например, записи координат (T=50, L=30, R=20) и (X=45, Y=43.301..) являются эквивалентными. Допускаются различные форматы записи (в т.ч. экспоненциальный, например "1.25e-3"). Точность значений, т.е. число знаков после десятичной точки также может быть различным (в программе TriQuick она определяется параметром Precision).