Формат DXF.
Алгоритм сжатия LZW.
Суть. В начале задаётся исходная базовая таблица, в котором каждому отдельному региону данному присваивается код восьмибитным кодом можно закодировать 256 уникальных данных. С помощью специального математического аппарата в последовательности данных выявляются устойчивые сочетания. Обнаружив устойчивое сочетание, автоматически дописываем его в таблицу и присваиваем ему код. Теоретически таблица может расширяться до бесконечности, практически её размер ограничен.
Пример. aabcdabcddd
Сначала bc, потом ab, потом abc. Исходная таблица состоит из четырёх двухразрядных кодов.
a | |
b | |
c | |
d | |
ab | |
bc | |
abc | … |
… | … |
Длина исходного кода зависит от количества исходных символов. Есть ли какое-либо сочетание повторяющееся? Не хватает трёх разрядов, добавляем ещё. Полученный код получится избыточным. Поэтому задействованы не все комбинации. Достоинство: является не зависимым от начальной статистики. Мы получим свою таблицу кодировки для каждого набора данных. При передаче файла, таблица кодировки передаётся с данными. Используется в форматах TIFF, GIF. Пользователю математический аппарат знать не надо.
Конечно, можно пользоваться и стандартными архиваторами, но в 90% случаев из 100% мы получим не уменьшение размера файла, а его увеличение. Для графики нужно пользоваться специальными методами сжатия конкретно для графики.
Представляет собой последовательность команд, которые записаны кодами ASCII. Каждая команда занимает две строки.
Строка 1 – код группы команды.
Строка 2 – сама команда.
В каждой группе могут быть различные форматы команд. Диапазон кодов команд ограничен числами от 0 до 999.
Группа | Тип | Содержание |
string | Начало элемента | |
string | Текстовое значение, связанное с графическим примитивом | |
string | Имя элемента | |
3,4,5 | string | Прочие текстовые значения или имена |
string | Тип линии | |
string | Имя шрифта | |
string | Имя слоя | |
string | Имя переменной, который может использоваться в заголовке файла. | |
real | Первая координата по x | |
11-19 | real | Прочие координаты по x |
real | Первая координата по y | |
20-29 | real | Прочие координаты по y |
real | Первая координата по z | |
30-39 | real | Прочие координаты по z |
40-48 | real | Параметры различных размеров |
real | Для организации таблицы, в которой есть повторяющиеся значения | |
50-58 | real | Угловые данные |
Свободная зона | ||
int | Номер цвета | |
boolean | Флаг «1»: дальше будут следовать графические примитивы; Флаг «0»: данных дальше нет | |
70-78 | boolean | Набор флагов, управляющими различными режимами |
string | Позволяет записывать различные комментарии документов |
Все команды разбиты на четыре части: заголовки, таблицы, примитивы, блоки. Ни один раздел не является обязательным. Единственной обязательной командой является 0 EOF – конец файла. Открытие и закрытие секций выполняется так:
0 section
…
0 endsec
Если говорить о разделах примитивов, то они всегда помещаются в конце созданного файла.
Заголовки определяют настройки внутренних переменных языка. Текущее значение настроек используется до момента, пока их не изменяют. Если опустить заголовки, то по умолчанию возьмётся стандартный набор. Структура заголовка:
0 SECTION
HEADER
$ …
ENDSEC
Где $ – это описание переменной. Далее следует таблица (толщина линии, виды шрифтов, используемые стандартные цвета).
0 SECTION
TABLES
…
ENDTAB
TABLES
…
ENDTAB
ENDSEC
Количество таблиц не ограничено. Названия видов таблиц:
LAYER
LTYPE
STYLE
VIEW
VPORT
VCS
LAYER.
Когда слой надо сделать невидимым, то после записи такого вида добавляется команда с номером 70. Эта команда управляется одним битом под номером 6.
LTYPE
Типы линий в одном слое. Имеется возможность создавать собственные типы, например
STYLE
Изменяется стандартное начертание шрифтов. Можно изменить высоту текста, угол наклона литеры, растянуть по ширине, изменить расстояние между символами, задать направление вывода текста.
VIEW
Просмотр произвольной части изображения. Направление взгляда, координаты точки взгляда, размеры окна просмотра, расположение передней и задней секущих плоскостей, фокусное расстояние объектива. Видеть сечение по передней плоскости, видеть сечение по задней плоскости, совмещать перспективную проекцию, в которой видно.