Формат файлов CFF2

 

Формат файлов CFF2

Владимир Дмитриев

Пример CFF-файла

 

Формат файлов CFF2

Пример CFF-файла

 $BOF
   V2
   ORDER
   %1:AO SVOBODA
   %2:123400
   Material: Bereza
   END
   MAIN,RISUNOK
   UM
   LL,-50,-50
   UR,50,50
   SCALE,1,1
   L,2,1,0,12.5,0,0,125,2,4
   C,DESIGN1,0,0,0,1,1
   C,DESIGN2,150,0,0,1,1
   C,DESIGN2,150,200,180,1,1
   END
   SUB,DESIGN1
   L,2,1,0,40,100,140,100,2,6
   A,2,3,3,0,0,100,0,50,0,-1,0,0
   END
   SUB,DESIGN2
   L,6,1,0,100,100,200,100,2,12
   A,2,3,3,0,0,100,0,50,0,+1,0,0
   END
   $EOF

Расшифровку сокращения CFF2 вряд ли можно назвать очень информативной — Common File Format (Revision 2), общий формат файлов (вторая редакция). Впрочем, история возникновения формата CFF многое проясняет.

Все началось, когда цены на компьютеры спустились с заоблачных высот, а софтверные компании смогли предложить конструкторам программы, существенно повышающие эффективность их труда. В это время в индустрии упаковки и произошел лавинообразный переход на использование CAD-пакетов для проектирования и дизайна. Кроме того, CAD-системы стали широко применяться и производителями штанц-форм, благодаря чему время прохождения формы для высечки от электронного чертежа до станка с ЧПУ существенно сократилась. К сожалению, разнообразие программного обеспечения не гарантировало простого обмена данными между различными участниками производственного процесса. Появилась насущная необходимость создать единый формат обмена информацией.

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

  1. Все данные должны быть описаны ASCII-символами, то есть как простой текстовый файл, состоящий лишь из букв латинского алфавита и знаков препинания. Это было сделано для того, чтобы разработчикам CAD-систем было проще написать фильтры импорта-экспорта.
  2. Файлы должны без проблем пересылаться по модемной связи, даже если для передачи используется Kermit-протокол (а это довольно медленный и неэффективный способ передачи информации). Впрочем, для того времени Kermit был самым обычным протоколом пересылки файлов.
  3. Информация, содержащаяся в файле, должна быть понятна любому человеку, независимо от страны и языка, на котором он говорит.
  4. Помимо обязательных данных, предназначенных для машинной обработки, нужно иметь возможность включить любую дополнительную информацию в произвольной форме.
  5. Все типоразмеры ножей и линеек (для биговки, перфорации) необходимо закодировать однозначным образом, чтобы не возникало разночтений.

В результате совместной работы был создан компьютерный формат обмена чертежами картонных коробок, который и назвали Common File Format — CFF.

При формировании любого CFF-файла используется несколько простых правил:

  • допустимы только символы 'A'..'Z', 'a'..'z', '0'..'9', '_', '-', '$', ':', '%', ',', '.';
  • любые параметры отделяются друг от друга только запятой;
  • нули в начале и в конце чисел удаляются;
  • пробелы удаляются (кроме текстовых блоков).

Вопрос передачи информации об упаковке на разных языках был решен достаточно оригинально. Конечно, все слова необходимо набирать латиницей, тут ничего не поделаешь. Но как, например, понять англичанину запись в файле на немецком языке «Kunde: Terry»? В свою очередь, немец вряд ли поймет слова «Zakazchik: AO Svoboda». Чтобы понять, какой блок информации содержит те или иные данные, была введена система кодирования. Для этого все программы, которые умеют работать с CFF-файлами, должны иметь специальную библиотеку — Standard Message File (файл со стандартными сообщениями). Это простой текстовый файл, каждая строка которого состоит из трех полей, разделенных запятыми: «Идентификатор сообщения», «Идентификатор языка», «Текст сообщения».

«Идентификатор сообщения» — это целое число, кодирующее номер сообщения. «Идентификатор языка» — это строка длиной до 8 символов, определяющая язык сообщения. «Текст сообщения» — это, собственно, само описание блока информации на соответствующем языке. Вот короткий пример Standard Message File:

1,ENGLISH,Customer Name 1,RUSSIAN,Zakazchik 1,GERMAN,Kunde 2,ENGLISH,P.O.Number 2,RUSSIAN,Pochtoviy Index . . .

Как это работает? Допустим, англоязычный пользователь заполняет соответствующие поля в CAD-программе. Например, «Customer Name: J.Smith». При экспорте в CFF-формат в файл выводится следующая строка «%1 : J.Smith». Когда этот файл импортирует пользователь, CAD-программа которого настроена на работу с русским языком, то соответствующее служебное поле будет выглядеть как «Zakazchik: J.Smith». Для немца то же сообщение будет выглядеть как «Kunde: J.Smith», и так далее, в полном соответствии с Standard Message File.

Структура формата CFF2 достаточно проста и наглядна. Каждый файл должен начинаться со строки $BOF (Begin Of File, начало файла) и заканчиваться $EOF (End Of File, конец файла). Это позволяет однозначно определить, передан файл целиком или произошел сбой. Вторая строка — это номер стандарта, согласно которому сформирован файл. Для CFF2 вторая строка будет V2.

Информация внутри CFF2-файла разбита на секции — определенные блоки данных со своей внутренней структурой. Каждая из секций имеет собственный заголовок, набранный заглавными буквами — ORDER, AUX, MAIN или SUB, при этом она обязательно должна заканчиваться строкой «END». Две из них необязательные — это ORDER и AUX, они могут отсутствовать в файле. Секция MAIN должна присутствовать всегда. Секция SUB, в отличие от остальных, может встречаться в файле несколько раз, а может и отсутствовать вовсе. Все данные, которые не находятся между заголовком секции и строкой END, игнорируются, что удобно для написания комментариев.

Секция ORDER содержит описание штампа высечки, и информация, находящаяся в ней, предназначена для пользователей. Типичные данные, которые она может содержать, — имя и адрес заказчика, срочность заказа, высота ножей и др. Название стандартных полей кодируется согласно Standard Message File, нестандартные поля и их значения описываются как есть, через двоеточие. Вот короткий пример секции ORDER:

ORDER %1 : AO Svoboda Material: Bereza END

Поле, описывающее имя заказчика (AO Svoboda), — стандартное, и оно кодируется идентификатором %1. Для строки, описывающей тип материала, нет стандартного идентификатора, поэтому эта информация идет «открытым текстом» и будет понятна только русскоязычному пользователю.

Секция AUX содержит описание дополнительных (нестандартных) типов линий на чертеже в закодированном виде. Она недостаточно стандартизирована, интерпретация ее содержимого в существенной степени зависит от используемой CAD-программы.

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

AUX 1,3,6,3 2,45,10,30 END

Таблица 1. Коды некоторых типов линий

KодТип разметкиОбязательные параметры
0 Линии для меток совмещения Нет
1 Режущая линейка  
2 Биговальная линейка  
3 Перфорационная линейка Размер режущей кромки, размер прорези
4 Kомбинированная режуще-биговальная линейка  
40 Указания по применению элементов контр-штампа Kод указания — см. табл. 2
41 Угловой перфорационный нож Шаг перфорации, размер зазора, угол сгиба
42 Биговочно-перфорационный нож Размеры режущей кромки, биговальной кромки, фаски
43 Линия наносится, но не прожигается на форме  
44 Линия прожигается, но не несет линеек и ножей  
45 Волнистый нож с симметричной волной Амплитуда волны, длина волны
46 Размерные линии Kод линии — см. табл. 3
99 Линия применения перфоратора  

Если сопоставить эти данные с табл. 1, то легко определить, что здесь описаны две линии. Тип 1 — это перфорационный нож (код 3) с размером режущей кромки 6 единиц и прорезью 3 единицы. Тип 2 — это нож с периодически повторяющейся симметричной волной (код 45) с амплитудой волны 10 единиц и длиной волны 30 единиц. То, какие именно единицы измерения используются в данном файле, задается с помощью параметров в секции MAIN. Рассмотрим ее подробнее.

Секция MAIN, в отличие от двух предыдущих, всегда должна присутствовать в CFF-файле. В ней, собственно, и содержится описание чертежа в закодированном виде. Кроме того, она имеет имя (обычно это условное название чертежа), которое указывается через запятую после ключевого слова MAIN. Это имя должно быть уникальным в пределах файла и длиной не более 8 символов. Правда, некоторые CAD-программы нарушают последнее условие и дают более длинные имена.

Вторая строчка секции MAIN показывает, какие единицы измерения используются внутри файла для задания системы координат. Здесь всего два варианта: UM (миллиметры) или UI (дюймы). Обычно используются миллиметры. Стоит заметить, что этот параметр влияет только на систему координат, которая используется для построения высечки (начало, центр и конец линий, размер перемычек и т.п.), но никак не влияет на параметры толщины линеек — она всегда задается в пунктах.

Третья строка (начинается с LL) задает координаты левого нижнего угла высечки, а четвертая (начинается с UR) — правого верхнего. Параметры перечисляются через запятую, сначала указывается X-координата, потом Y-координата (табл. 2).

Таблица 2. Коды инструкций по применению элементов контр-штампа

Код параметрУказание по применению
0 Вдоль направления волокон бумаги
1 Поперек направления волокон бумаги
2 Место для отверстия
3 Периферийная резка
4 Расширяющаяся фаска

Пятая строчка задает масштаб чертежа. После ключевого слова SCALE через запятую указаны коэффициенты масштабирования по оси Х и по оси Y. Так, например, строка SCALE,1,1 говорит о том, что уменьшать или увеличивать высечку не требуется. Параметры масштабирования могут быть и со знаком «минус». Это означает, что чертеж необходимо «отзеркалить» по соответствующей координате.

Далее идет блок информации, который описывают непосредственно высечку. Каждая строка кодирует один элемент развертки. Эти элементы могут быть прямыми линиями (обозначается буквой L), дугами (A) или текстовыми блоками (T). Буквенный код ставится в начале строки, после него следует ряд параметров, разделенных запятыми (табл. 3).

Таблица 3. Коды инструкций по применению размерных линий

Код параметрУказание по применению
1 Линия без стрелок на концах
2 Линия со стрелкой в начале
3 Линия со стрелкой в конце
4 Стрелки на обоих концах линии

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

L,p,t,at,sx,sy,ex,ey,nBridges, wBridges

Расшифровка параметров приведена в табл. 4.

Таблица 4. Параметры, описывающие элементы чертежа

ПараметрЗначение
p Толщина линии (всегда указывается в пунктах)
t Kод типа линии (см. табл. 1)
at Kод дополнительного типа линии (типы описаны в секции AUX)
nBridges Kоличество перемычек на линии
wBridges Размер перемычек на линии
sx,sy Kоординаты начала
ex,ey Kоординаты конца
cx,cy Kоординаты центра
dir

Указатель направления

(+1 — против часовой стрелки, -1 — по часовой)

angle Угол поворота
height Высота букв
width Ширина букв (включая межбуквенное пространство)

Для дуги добавляются координаты центра (cx,cy) и указатель направления dir (принимает значение +1 — если против часовой стрелки, и -1 — если по часовой):

A,p,t,at,sx,sy,ex,ey,cx,cy,dir, nBridges,wBridges

Для элемента, описывающего текстовый блок, отведены две строки. Первая задает параметры надписи, а вторая — это непосредственно текстовое сообщение. Координаты начала (sx,sy) и угол поворота в градусах (angle) привязаны к нижнему левому углу, высота и ширина букв задается параметрами height и width:

T,p,t,at,sx,sy,angle,height,width Tekstovoe soobschenie

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

Секции SUB могут встречаться внутри файла любое количество раз, что недопустимо для других видов секций. Каждая из них описывает какой-либо объект, причем это может быть как типовое отверстие, так и развертка коробки в целом. После служебного слова SUB, через запятую, должно обязательно идти уникальное имя секции длиной не более 8 символов. Внутри секции содержатся инструкции по построению какого-то элемента чертежа с помощью прямых линий, дуг и текстовых блоков. Но ни одна из SUB-секций не будет задействована для построения развертки до тех пор, пока не будет вызвана из секции MAIN. Для этого там должна быть строка в следующем формате:

C,SUBNAME,sx,sy,angle, xScale,yScale

Код C означает, что необходимо выполнить группу операторов, содержащихся в секции с именем SUBNAME. Параметры xScale и yScale указывают, с каким коэффициентом масштабирования необходимо выполнить построения.

Гарантированная точность, которую поддерживает CFF2-формат, — это два знака после запятой, если единицы измерения указаны в миллиметрах. Некоторые CAD-пакеты экспортируют чертежи с большей точностью, но нет никаких гарантий, что «лишние» данные будут учтены при импорте другой программой.

Если необходимо, чтобы объект был повернут и масштабирован, то согласно спецификации сначала должны быть выполнены инструкции поворота и лишь затем — масштабирования (в том числе «зеркального»).

Во второй версии стандарта по просьбе некоторых компаний было добавлено несколько новых кодов, обозначенных буквами X, I и G. Их параметры и назначение не разглашаются, и поэтому большинство программ, работающих с форматом CFF2, игнорируют их.

Расширение для CFF2-файлов в среде Windows принято .cf2.

Мир Этикетки 2'2001

Печать

Похожие статьи