Форма – совокупность отрезков прямых или дуг и окружностей. Создана для отображения типовых элементов чертежа, имеющих подобие и отличающихся размерами. Пример: обозначения на электрических схемах, знаки покрытий, типовые условные обозначения.
Вызывается командой SHAPE:
shp – расширение файла, который содержит описание форм.
Общий вид описания выглядит таким образом:
* № формы, число байт, имя дальше – одна или более строк кодов, разделенных пробелом, запятыми и скобками. Запятые – обязательные разделители кодов. Последний код формы – всегда 0.
При подсчете числа байт это необходимо учитывать.
На каждый код приходится по одному байту, следовательно, подсчет байт заключается в подсчете кодов. Грубо говоря, код – это то, что между запятыми.
Запись основного кода выглядит таким образом:
Рис. 1. Основные коды форм
Рис. 2. Направления для основных кодов форм
Это иллюстрирует не только направление, но и длину отрезков по разным направлениям. Все отрезки в квадрате на иллюстрации, направленные от центра к его сторонам/углам имеют одинаковую длину.
Означает, что после выполнение этого кода все линии и перемещения, совершаемые пером будут оставлять за собой след в виде черты, что и называется процессом рисования. Осталось от прежних времен, когда плоттер был еще странным устройством с карандашом в специальном захвате, и все директивы ему передавались в такой форме. Движения с опущенным на бумагу пером – рисование. Движение с поднятым пером – перемещение.
Означает приостановку процесса рисования. Может быть использована для перемещения на другую позицию. Также необходимо поднимать перо по окончании программы.
003,2 – все последующие величины делим на 2
004,2 – все последующие длины умножаем на 2
Принцип – не отмена действий, а накопление их.
Используется для сохранения какой-то точки в процессе рисования для возвращения пера в эту точку при необходимости. Хранится только одна точка. При возвращении в нее память очищается.
Установка пера в ранее сохраненную точку. Помнит только последнюю сохраненную точку и только до момента ее извлечения. После извлечения координаты точки стираются из памяти
Носит функции подпрограммы. Можно запрограммировать типовой элемент и использовать его в программировании любых загруженных форм. Каждая субформа должна иметь уникальный код и имя.
007,№ субформы
008, DX, DY
Обязательны 2 параметра.
Диапазон величин DX, DY: от -127 до +127. Расширения диапазона достигают с помощью масштабирования.
Последовательность смещений.
009, { DX,DY }, 0, 0
Нули в конце перечисления означают, что запись окончена.
Октантные дуги – из "осьмушек" – дуги, построенные с точностью до 1/8 части полной окружности. Описание октантной дуги выглядит таким образом:
00А, R, 0XY
0 – всегда
Х – начальная точка
У – число октантов
Само число 0ХУ может быть отрицательным, если отсчет октантов производится по часовой стрелке, и положительным, если против. Для рисования полной окружности число пройденных октантов берется = 0.
Рис. 3. Схема для октантных дуг
Вычерчивает дугу не обязательно с октантными границами. Определение состоит из 5 байт спецификации.
00B, start_offset, end_offset, high_radius, radius, (±)0XY
Start_offset и end_offset показывают, насколько далеко от октантной границы дуга начинается или заканчивается. Если радиус меньше 255, high_radius = 0. Умножьте значение high_radius на 256 и прибавьте его к радиусу для отображения дуги радиусом большим, чем 255. Radius и код дуги (±)0XY такие же, как и для определения октантной дуги (00A). Вы определяете start_offset, вычисляя разницу в градусах между начальной октантной границей (производной от 45 градусов) и началом дуги. Затем умножаете на 256 и делите на 45. Если дуга начинается на октанте, начальное смещение равно нулю. End_offset вычисляется так же. Например, дуга от 55 до 95 градусов с r=3 записывается так:
00B,(56,28,0,3,012)
start_offset = 56, o.e. ((55 – 45) * 256 / 45) = 56
end_offset 28, o.e. ((95 – 90) * 256 / 45) = 28
high_radius = 0, o.e. (radius < 255)
radius = 3
00С, DX,DY, ,
DX, DY учитывается со знаками,
– рассчитывается по формуле:
Самая крутая дуга – половина окружности, h=128.
Рис. 4. Схема для дуги по стрелке
00D, {DXi, DYi, ,} 0, 0,
Последовательность дуг имеет ту же структуру, что и последовательность смещений. В использовании удобна тем, что с её помощью можно отображать как дуги, так и отрезки, устанавливая выпуклость дуги равной 0.
Описание:
* код ASCII, число байт, строчными буквами пояснение
Еще требуются описание шрифта и перенос на следующую строку:
Описание шрифта
*0, 4, название шрифта (строчными)
высота,
нижнее смещение,
0/2 (горизонтальный/ вертикальный),
0
Перевод на новую строку
*10, 4, lf
002,
перенос пера по У,
001,
0
Компиляция происходит посредством команды compile. Рекомендуется при работе с одним и тем же файлом и повторной загрузке предварительно очистить память от предыдущей версии. Очистка памяти производится с помощью команды Purge.
Формы можно создавать самим в текстовых файлах – *.shp
Для загрузки файла формы необходимо:
Пока форма находится на чертеже, она записана в память компьютера.
Поэтому, для того, чтобы перезагрузить форму, надо:
*1,5,KV
014,
010,
01C,
018,
0
*2,4,TR
014,
01E,
018,
0
I: 00A,2,-043
II: 00A,3,006
III: 00A,1,064