elima.ru
Мертвечина
СтатьиСистемы автоматизированного проектирования (САПР)

Программирование сложных форм

Форма – совокупность отрезков прямых или дуг и окружностей. Создана для отображения типовых элементов чертежа, имеющих подобие и отличающихся размерами. Пример: обозначения на электрических схемах, знаки покрытий, типовые условные обозначения.
Вызывается командой SHAPE:
shp – расширение файла, который содержит описание форм.

Файл с текстом программы .shp

Общий вид описания выглядит таким образом:

* № формы, число байт, имя дальше – одна или более строк кодов, разделенных пробелом, запятыми и скобками. Запятые – обязательные разделители кодов. Последний код формы – всегда 0.

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

Основные коды

Запись основного кода выглядит таким образом:

Рис. 1. Основные коды форм



Рис. 2. Направления для основных кодов форм


Это иллюстрирует не только направление, но и длину отрезков по разным направлениям. Все отрезки в квадрате на иллюстрации, направленные от центра к его сторонам/углам имеют одинаковую длину.

Вспомогательные коды

001 – Опустить перо

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

002 – поднять перо

Означает приостановку процесса рисования. Может быть использована для перемещения на другую позицию. Также необходимо поднимать перо по окончании программы.

003 – масштаб уменьшения

003,2 – все последующие величины делим на 2

004 – масштаб увеличения

004,2 – все последующие длины умножаем на 2

Принцип – не отмена действий, а накопление их.

005 – текущую точку – в память

Используется для сохранения какой-то точки в процессе рисования для возвращения пера в эту точку при необходимости. Хранится только одна точка. При возвращении в нее память очищается.

006 – извлечь из памяти

Установка пера в ранее сохраненную точку. Помнит только последнюю сохраненную точку и только до момента ее извлечения. После извлечения координаты точки стираются из памяти

007 – выполнение ранее запрограммированного кода

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

007,№ субформы

008 – смещение

Смещение относительно исходной точки.

008, DX, DY

Обязательны 2 параметра.
Диапазон величин DX, DY: от -127 до +127. Расширения диапазона достигают с помощью масштабирования.

009 – цепочка, ломаная

Последовательность смещений.

009, { DX,DY }, 0, 0

Нули в конце перечисления означают, что запись окончена.

00А – Октантные дуги

Октантные дуги – из "осьмушек" – дуги, построенные с точностью до 1/8 части полной окружности. Описание октантной дуги выглядит таким образом:

00А, R, 0XY
0 – всегда
Х – начальная точка
У – число октантов

Само число 0ХУ может быть отрицательным, если отсчет октантов производится по часовой стрелке, и положительным, если против. Для рисования полной окружности число пройденных октантов берется = 0.

Рис. 3. Схема для октантных дуг
 

00B – вычерчивание произвольной дуги (долго)

Вычерчивает дугу не обязательно с октантными границами. Определение состоит из 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 и стрелке

00С, DX,DY, ,

DX, DY учитывается со знаками, – рассчитывается по формуле:

Самая крутая дуга – половина окружности, h=128.

Рис. 4. Схема для дуги по стрелке

00D – последовательность дуг

00D, {DXi, DYi, ,} 0, 0,

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

Создание шрифта

Описание:

* код ASCII, число байт, строчными буквами пояснение

Еще требуются описание шрифта и перенос на следующую строку:
Описание шрифта

*0, 4, название шрифта (строчными)
высота,
нижнее смещение,
0/2 (горизонтальный/ вертикальный),
0

Перевод на новую строку

*10, 4, lf
002,
перенос пера по У,
001,
0

Компилирование, загрузка и вставка формы

Компиляция происходит посредством команды compile. Рекомендуется при работе с одним и тем же файлом и повторной загрузке предварительно очистить память от предыдущей версии. Очистка памяти производится с помощью команды Purge.

Работа с файлами форм.

Формы можно создавать самим в текстовых файлах – *.shp
Для загрузки файла формы необходимо:

    1. compile – компилирование программы в кодах.
    2. load – загрузка программы в кодах в память ACAD
    3. shape – рисование самой формы.

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

    1. Удалить форму с поля чертежа.
    2. С помощью команды Purge удалить ее из памяти.
    3. Далее – переход к п.1 загрузки формы.

Приложения:

Основные коды

Внимание! Название формы – прописными буквами
Лишние "paragraph mark" в конце программы могут вызвать дополнительные проблемы.

1) Программа рисования квадрата

*1,5,KV

014,

010,

01C,

018,

0

2) Программа рисования прямоугольного треугольника

*2,4,TR

014,

01E,

018,

0


Описание октантных дуг


I: 00A,2,-043
II: 00A,3,006
III: 00A,1,064

   
Если вы являетесь правообладателем данной статьи, и не желаете её нахождения в свободном доступе, вы можете сообщить о свох правах и потребовать её удаления. Для этого вам неоходимо написать письмо по одному из адресов: root@elima.ru, root.elima.ru@gmail.com.