Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г
.pdf
Геометрические фигуры и текстовые шрифты |
371 |
вится ведущий нуль (например, 012), а десятичное число отображается в обычном виде (т.е. без ведущего нуля). Байты данных разделены запятой (,). Количество байт данных, используемых при описании одной фигуры, может достигать 2 000, при этом файлы форм могут содержать описания нескольких фигур. Спецификация геометрической фигуры может состоять из нескольких строк. Поэтому необходимо разбить фигуру на несколько блоков и разместить определения этих блоков в отдельных строках. Это упрощает редактирование файла и исправление допущенных ошибок. В каждой строке должно быть не более 80 символов. Спецификация фигуры заканчивается нулем.
Кодирование направления и длины вектора
Коды, определяющие направление вектора, показаны на рис. 11.1. Все векторы, изображенные на этом рисунке, имеют одну и ту же спецификацию длины. Длины векторов, проведенных по диагонали, увеличены в соответствии с длиной ближайшего ортогонального вектора. Допустим, что конечная точка вектора 0 отнесена на два единичных отрезка от точки пересечения векторов (т.е. от начала координат). Конечная точка вектора 1 находится на один единичный отрезок выше конца отрезка 0. Известно, что тангенс угла треугольника равен отношению противолежащего катета к прилежащему. Таким образом, угол между векторами 0 и 1 равен 26,565 градуса (arctg 1/2 = arctg 0,5 = 26,565 градусов). По аналогии с этим, угол между векторами 0 и 2 равен 45 градусам (arctg 2/2 = arctg 1 = = 45 градусов).
Рис. 11.1. Кодирование длины и направления вектора
Векторы, показанные на этом рисунке, имеют одинаковые спецификации размера или длины. Другими словами, несмотря на то, что фактические длины векторов отличаются, в их определении используются одни и те же величины. Чтобы определить вектор, необходимо указать его длину и направление. Это означает, что каждый байт спецификации формы содержит кодовое обозначение, определяющее длину и направление вектора. Максимальная длина вектора составляет 15 единичных отрезков. Применение векторов иллюстрируется следующим примером.
372 |
Глава 11 |
Пример 1
Напишите файл, определяющий форму условного обозначения резистора, показанного на рис. 11.2. Присвойте этой фигуре имя “RESIS”. Сохраните файл формы под именем
sh1.shp.
Рис. 11.2. Резистор
Шаг 1: запись файла формы
Для записи файла обычно используется какой-нибудь текстовый редактор. Файл формы условного обозначения резистора содержит следующие строки:
*201,8,RESIS
020,023,04D,043,04D,023,020,0
Первая строка файла является заголовком, а вторая — спецификацией формы.
Пояснения
Строка заголовка
*201,8,RESIS
Здесь
•*201 — номер формы;
•8 — число байтов данных, содержащихся в строке спецификации этой фигуры;
•RESIS — имя геометрической фигуры.
Спецификация формы
020,023,04D,043,04D,023,020,0
Здесь
•0 — нуль, указывающий на представление чисел в шестнадцатеричной системе счисления;
•2 — длина вектора;
•0 — код направления.
Каждый байт данных этой строки, за исключением завершающего нуля, содержит три элемента. Первый элемент (0) указывает на использование шестнадцатеричной системы счисления, второй обозначает длину вектора, третий элемент является кодом направ-
Геометрические фигуры и текстовые шрифты |
373 |
ления. Как следует, например, из первого байта данных (020), длина вектора равна 2, а его направление совпадает с направлением вектора 0. Точно так же, во втором байте данных (023) первый элемент указывает на шестнадцатеричное представление чисел, второй элемент (2) определяет длину вектора, а третий (3) представляет собой кодовое обозначение направления.
Шаг 2: компилирование файла формы
Сохраните набранный текст в виде файла с расширением .shp. Это позволит вам, используя команду COMPILE, компилировать файл формы или файл шрифта. Откройте диалоговое окно Select Shape or Font File (Выбор файла формы или шрифта), показанное на рис. 11.3, введя выражение COMPILE в командную строку. В открывшемся диалоговом окне выберите файл формы, который вы хотите компилировать. После того как компилирование файла будет завершено, в командной строке появится следующее сообщение:
Compilation successful
Output file name.shx contains nn bytes
◊◊◊
Компилирование успешно завершено Выходной файл name.shx содержит nn байтов
В процессе компилирования файл .shp будет преобразован в файл с расширением
.shx. В этом примере выходной файл получает имя sh1.shp. Количество байтов данных, содержащихся в этом файле, равно 49. Если программа AutoCAD обнаружит ка- кую-либо ошибку, допущенную при записи файла, на экране появится соответствующее сообщение, в котором будет указан тип ошибки и номер строки, в которой она находится. Можно также определить параметры компилирования, присвоив системной переменной FILEDIA значение 0.
Рис. 11.3. Диалоговое окно Select Shape or Font File
374 |
Глава 11 |
Шаг 3: загрузка файла формы
Откройте диалоговое окно Select Shape File, введя выражение LOAD в командную строку. Выделите файл, который вы хотите загрузить, а затем щелкните на кнопке Open (рис. 11.4). Можно также присвоить системной переменной FILEDIA значение 0, а затем ввести выражение LOAD в командную строку:
Command: LOAD
Enter name of shape file to load or [?]: SH1
Здесь SH1 — имя файла геометрической фигуры для примера 1. Имя файла следует указывать без файлового расширения .SHX, так как в программе AutoCAD предусматривается именно это расширение. Если указанный файл существует, AutoCAD отобразит имя загружаемой фигуры. Для вставки загруженной фигуры можно использовать команду SHAPE:
Command: SHAPE
Enter shape name (or ?) <default>: Имя фигуры Specify insertion point: Координаты точки вставки Specify height <1.0>: Число или точка
Specify rotation angle <0.0>: Число или точка
Рис. 11.4. Диалоговое окно Select Shape File
В нашем примере имя фигуры — “RESIS”. После того как вы укажете координаты точки вставки, определите высоту и угол поворота, заданная фигура отобразится на экране (рис. 11.5).
Специальные коды
Процесс формообразования, выполняемый с использованием векторов направления, имеет определенные ограничения. Например, этот метод не позволяет вычерчивать дуги или линии, направление которых не совпадает с направлением стандартных векторов. Для решения этой проблемы могут использоваться специальные коды, которые позволяют повысить гибкость и улучшить контроль над созданием геометрических фигур.
Геометрические фигуры и текстовые шрифты |
375 |
Рис. 11.5. Фигура RESIS, вставленная в чертеж
Стандартные коды
Определенные стандартные коды используются для обозначения различных операций, выполняемых при построении фигуры. Ниже приведен список используемых кодовых обозначений.
000 |
Завершение определения фигуры |
001 |
Активизация режима рисования (перо опущено) |
002 |
Отмена режима рисования (перо поднято) |
003 |
Деление длины вектора на значение следующего байта |
004 |
Умножение длины вектора на значение следующего байта |
005Проталкивание координат текущего местоположения в стековую память (сохранение координат)
006Выталкивание координат текущего местоположения из стека (восстановление координат)
007Вычерчивание подформы, номер которой указан в следующем байте (вызов подформы)
008Смещение по осям X-Y на величину, указанную в двух следующих байтах (использование линий разной длины)
009Многократное смещение по осям X-Y, завершенное (0,0) (постоянное использование линий разной длины)
00A или 10 Восьмая часть круга, определенная двумя следующими байтами
376 |
Глава 11 |
00B или 11 Фрагмент дуги, определенный пятью следующими байтами 00C или 12 Дуга, определенная величиной смещения X-Y и радиусом
00D или 13 Несколько дуг, определенных радиусом кривизны (постоянное использование выпуклой дуги)
00E или 14 Обработка следующей команды только при использовании вертикального текста
Код 000: завершение определения фигуры
Этим кодовым обозначением отмечается окончание определения фигуры.
Код 001: активизация режима рисования
Этот код обеспечивает включение режима рисования. Когда вы начинаете вычерчивать контур фигуры, автоматически включается режим рисования, поэтому нет никакой необходимости пользоваться этим кодом. Тем не менее, если режим рисования выключен, вы сможете его включить с помощью этого кода.
Код 002: отмена режима рисования
Этот код выключает режим рисования. Этот код используется, когда необходимо переместить перо, не создавая линию на экране.
1 |
2 |
3 |
4 |
Представьте, например, что расстояние между точками 1 и 2, 2 и 3, а также 3 и 4 равно двум единицам. Тогда определение формы этой линии будет иметь следующий вид:
020,002,020,001,020,0
Первый байт данных (020) генерирует линию длиной 2 единицы, проведенную вдоль вектора направления 0. Второй байт данных (002) отменяет режим рисования, а третий байт данных (020) формирует пробел (незаполненную линию) длиной 2 единицы. Четвертый байт данных (001) активизирует режим рисования, а следующий байт (020) генерирует линию длиной 2 единицы, которая вычерчивается вдоль вектора направления 0. Последний байт данных завершает определение формы.
Пример 2
Напишите файл формы, обеспечивающий вычерчивание прописной буквы “G”, показанной на рис. 11.6.
Рис. 11.6. Форма символа “G”
Геометрические фигуры и текстовые шрифты |
377 |
Шаг 1: запись файла формы
Для записи файла формы обычно используется какой-нибудь текстовый редактор (например, Notepad). Файл формы сохранен под именем CHRGEE; созданная фигура получила название “GEE”. Номера строк, показанные в правой части листинга, не явля-
ются частью файла, а используются только для ссылок.
*215,20,GEE |
1 |
002,042, |
2 |
001,014,016,028,01A, |
3 |
04C,01E,020,012,014, |
4 |
002,018, |
5 |
001,020,01C, |
6 |
002,01E,0 |
7 |
Пояснения
Строка 1
*215,20,GEE
Первый байт данных включает в себя звездочку (*) и номер фигуры 215. Во втором байте данных содержится число, указывающее количество байтов данных, имеющихся в спецификации фигуры, и 0, завершающий определение формы. GEE — имя фигуры.
Строка 2
002,042,
Первый байт данных (002) отменяет режим рисования (перо поднято), а второй байт определяет линию длиной 4 единицы, проведенную параллельно вектору направления 2.
Строка 3
001,014,016,028,01А,
Байт данных 001 активизирует режим рисования (перо опущено), а 014 определяет линию длиной 1 единицу, проведенную под углом 90 градусов (вектор направления 4). Байт данных 016 определяет линию длиной 1 единицу, проходящую вдоль вектора направления 6. Байт данных 028 определяет линию длиной 2 единицы, которая проходит под углом 180 градусов (вдоль вектора направления 8). Байт данных 01А определяет единичный вектор, проходящий вдоль вектора направления А.
Строка 4
04С,01Е,020,012,014,
Байт данных 04С определяет линию длиной 4 единицы, проходящую вдоль вектора направления С. Байт данных 01Е определяет единичный вектор, направленный вдоль вектора Е. Байт данных 020 определяет линию длиной 2 единицы, проходящую под углом 0 градусов (вдоль вектора направления 0). Байт данных 012 определяет единичный вектор, направленный вдоль вектора 2. Аналогично, байт данных 014 определяет единичный вектор, проведенный вдоль вектора направления 4.
Строка 5
002,018,
Байт данных 002 отменяет режим рисования (перо поднято), а байт данных 018 определяет единичный вектор, направленный вдоль вектора 8.
378 |
Глава 11 |
Строка 6
001,020,01С,
Байт данных 001 активизирует режим рисования (перо опущено), а байт данных 020 определяет линию длиной 2 единицы, проведенную под углом 0 градусов (вдоль вектора направления 0). В свою очередь байт данных 01С определяет единичный вектор, направленный вдоль вектора С.
Строка 7
002,01Е,0
Байт данных 002 отменяет режим рисования (перо поднято), а байт данных 01Е определяет единичный вектор, направленный вдоль вектора Е. Байт данных 0 завершает определение формы.
Совет
Файл определения геометрической фигуры не требует повторного компилирования. 


Компиляция файла выполняется только один раз. Повторная загрузка файла определения происходит при каждом открытии чертежа. Если в файл формы были внесены какиелибо изменения, но после загрузки и компилирования файла эти изменения никак не отразились, то вам придется открыть новый чертеж, а затем скомпилировать и загрузить файл формы еще раз. Это связано с тем, что изменения, внесенные в файл формы, не были включены в существующий файл чертежа.
Код 003: деление длины вектора на значение следующего байта
Этот код используется в том случае, если нужно разделить длину вектора на определенное число. Например, для того чтобы разделить вектор на две равные части, вы должны записать определение формы следующим образом:
003,2,020,002,002,020,001,020,0
Первый байт данных (003) представляет собой код деления. В свою очередь, следующий байт (2) является числом, на который будут разделены длины всех векторов, определенных в этой строке. Таким образом, рисунок, показанный в примере 2, претерпит определенные изменения. Длины линий и величина промежутка между ними станут равными единице:
Масштабные коэффициенты, используемые в определении формы, суммируются. Например, если ввести в предыдущее определение формы еще один код 003, то длина последнего вектора (020) будет разделена на 4 (2×2):
003,2,020,002,002,020,001,003,2,020,0
Здесь
•003,2 — длины всех векторов делятся на 2;
•003,2 — длины всех последующих векторов делятся на 2.
Фигура, определенная этим выражением, будет иметь следующий вид:
Геометрические фигуры и текстовые шрифты |
379 |
Код 004: умножение длины вектора на значение следующего байта
Этот код используется, когда необходимо умножить длину вектора на определенное число, а также в том случае, когда требуется отменить действие кода 003. Длины, полученные при делении или умножении векторов, должны быть целыми числами (от 1 до 255).
003,2,020,002,002,020,001,004,2,020,0
Здесь
•003,2 — деление всех векторов, расположенных справа от этого выражения, на 2;
•004,2 — умножение всех векторов, расположенных справа от этого выражения, на 2.
В этом примере длины всех векторов, расположенных справа от кода 003, делятся на 2. Таким образом, длина единичного вектора становится равной 0,5. Второй код (004) умножает длины всех векторов, расположенных в правой части выражения, на 2. Мы знаем, что масштабные коэффициенты суммируются; следовательно, векторы, ранее деленные на 2, теперь должны быть умножены на 2. Благодаря эффекту суммирования, длина последнего вектора осталась неизменной. Фигура, определенная этим выражением, будет иметь следующий вид:
Коды 005 и 006: сохранение и восстановление координат начальной точки
Код 005 дает возможность сохранить координаты текущего положения пера, а код 006 позволяет восстановить ранее сохраненные координаты.
Пример 3
Следующий пример иллюстрирует использование кодов 005 и 006.
Шаг 1: запись файла формы
На рис. 11.7, a показаны три единичных вектора, выходящих из одной точки. После того как будет начерчена первая линия, перо должно вернуться в начальную точку для того, чтобы вычертить вторую линию. Эта операция выполняется с помощью кода 005, который обеспечивает сохранение координат начальной точки первого вектора, и кода 006, который позволяет восстановить координаты этой исходной точки. Теперь вычерчивание второй линии будет также начинаться с исходной точки. Фигура, показанная на рисунке, состоит из трех линий, поэтому для ее определения вам придется ввести три кода 005 и три кода 006. Следующий файл содержит строку заголовка и спецификацию формы, которая генерирует соответствующие линии:
*210,10,POP1
005,005,005,012,006,014,006,016,006,0
Здесь
•005 — сохранение координат начальной точки (три раза);
•012 — генерирование первого вектора;
•006 — восстановление ранее сохраненных координат;
•014 — генерирование второго вектора;
•006 — восстановление координат начальной точки.
380 Глава 11
Рис. 11.7: a) три единичных вектора, выходящих из одной точки; б) повторение ранее определенных элементарных фигур
Количество сохраненных данных (код 005) должно соответствовать числу восстановленных координат (код 006). Если операций сохранения (код 005) окажется больше, чем операций восстановления, программа AutoCAD отобразит следующее сообщение, которое появится на экране после вычерчивания фигуры:
Position stack overflow in shape (shape number)
◊◊◊
Переполнение стека, используемого для позиционирования точек в фигуре (номер фигуры)
В свою очередь, если операций восстановления (код 006) окажется больше, чем операций сохранения (код 005), на экране появится следующее сообщение:
Position stack underflow in shape (shape number)
◊◊◊
Незагруженность стека, используемого для позиционирования точек в фигуре (номер фигуры)
Максимальное количество операций сохранения и восстановления данных, которые могут быть использованы при определении той или другой фигуры, равно четырем.
Шаг 2: компиляция и загрузка файла формы
Для компилирования и загрузки файла формы используются команды COMPILE и LOAD. Вставка фигуры в чертеж выполняется с помощью команды SHAPE, как описано в примере 2.
Примечание
Имя фигуры должно состоять из прописных букв. Имена, состоящие из строчных букв, игнорируются и используются для обозначения определений формы шрифтов. Файл формы может содержать до 255 определений различных фигур. Всем фигурам, определенным в этом файле, должны быть присвоены уникальные имена.
Код 007: подформа
Подформа определяется точно так же, как и стандартная подпрограмма. Для создания ссылки на подформу используется код 007, который ставится перед номером фигуры соответствующей подформы. Подформа должна быть определена в том же файле формы. В качестве номера фигуры можно использовать любое целое число от 1 до 255.
