| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Создание форм и шрифтов для AutoCAD

Создание форм и шрифтов для AutoCAD

Ответ
Поиск в этой теме
Непрочитано 25.02.2009, 11:08 #1
Создание форм и шрифтов для AutoCAD
Shoorup
 
Минск
Регистрация: 16.09.2006
Сообщений: 1,587

Данная тема только для чтения. Обсуждение тут.



Немного теории:

Форма – это объект AutoCAD, похожий на блок, но состоящий только из линий и дуг. Формы могут использоваться при описании сложных штриховок или линий.
Шрифты SHX – AutoCAD умеет работать как со шрифтами TTF (True Type Font), так и со своими собственными шрифтами SHX (Shape entities).
Шрифты и формы в AutoCAD можно самостоятельно описать в любом текстовом редакторе.
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 16.03.2009 в 10:37.
Просмотров: 36564
 
Непрочитано 25.02.2009, 11:37
#2
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Тему пока закрепил. Все посты, кроме постов Shoorupа из этой темы будут удаляться
Солидворкер вне форума  
 
Автор темы   Непрочитано 10.03.2009, 19:33 Код длины и направления вектора
#3
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Наиболее простым и оптимальным является однобайтовое описание вектора заданное направлением и длинной вектора.
Описание может быть представлено двумя или тремя знаками. Как правило, описание представляется тремя знаками, первый из которых 0, второй его длина (от 0 до F), третий направление вектора (от 0 до F), при этом 0 указывает, что второй и третий знак представлен в шестнадцатеричном исчислении.

Направления длин векторов показаны на рисунке
Все длины векторов в любом направлении условно равны при описании, но в действительности имеют разную дину.

Пример:
*1,2,33
025,0

; рисуется вектор длиной 2 ед. в направлении 5


Вектор может быть описан и в десятеричном исчислении, при условии, что число больше 15, иначе оно будет воспринято как специальный код. При компиляции десятичное число переведется в шестнадцатеричное и обработается по такому же алгоритму, что и в первом случае.

Пример:
*1,2,33
25,0

; компилятор переводит число в шестнадцатеричную систему 25d =19h
; рисуется вектор длиной 1 ед. в направлении 9


Описание вектора не может состоять только из нулей – при компиляции AutoCAD выдаст ошибку: Преждевременный конец описания формы.
Миниатюры
Нажмите на изображение для увеличения
Название: Направления длин векторов.png
Просмотров: 18004
Размер:	5.8 Кб
ID:	17113  
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 27.03.2009 в 16:04.
Shoorup вне форума  
 
Автор темы   Непрочитано 16.03.2009, 10:38
#4
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Код 0 – конец формы

Данный код ставится в конце формы для обозначения ее конца.

Пример:
*33,21,!
2,8,(0,14),1,8,(0,-11),2,8,(0,-2),1,8,(0,-1),2,8,(3,0),0

После данного кода можно ставить пробелы и писать комментарий
Код:
[Выделить все]
; это комментарий
Пример:
*33,21,!
2,8,(0,14),1,8,(0,-11),2,8,(0,-2),1,8,(0,-1),2,8,(3,0),0 ; комментарий


! Обязательно после конца формы должен быть переход на следующую строку иначе компилятор выдаст ошибку: «Неверный элемент в описании или синтаксическая ошибка».

Форма может состоять только из кода конца формы.

Пример:
*1,1
0


Полученный файл после компиляции будет занимать 39 байт. Хотя исходный файл занимает всего 9 байт, остальные 30 байт файл получает при компиляции, добавляя заголовок к файлу и по особому структурируя его.
Вот дамп полученного файла после компиляции:
Код:
[Выделить все]
4175746F4341442D38362073686170657320312E300D0A1A070007000100070002000000454F46
AutoCAD-86 shapes 1.0...............EOF
Код 1 – Включение режима отрисовки (опускание пера)

По умолчанию перо всегда опущено и данный код необходимо использовать только если перо поднято. Код действует до того момента пока не встретится код 2 (поднятия пера).

Пример:
*33,21,!
2,8,(0,14),1,8,(0,-11),2,8,(0,-2),1,8,(0,-1),2,8,(3,0),0

;В примере перо поднимается (2)и опускается (1) два раза, затем опять поднимается (2)


Код 2 – Отключение режима отрисовки (поднятие пера)

Код ставится для поднятия пера. Код действует до того момента пока не встретится код 1 (опускание пера).

Пример:
*33,21,!
2,8,(0,14),1,8,(0,-11),2,8,(0,-2),1,8,(0,-1),2,8,(3,0),0

;В примере перо поднимается (2) и опускается (1) два раза, затем опять поднимается (2)


Код 3 – Деление длин векторов на следующий байт

Данный код необходим для получения дробных значений длин векторов.
Например, необходимо нарисовать линию вниз длинной 1,25 ед. Для этого необходимо избавится от дробной части. 1,25*4=5. Следовательно, для того чтобы нарисовать линию длиной 1,25 нужно 5 разделить на 4.

Пример:
*2,4
3,4,05C,0

;В примере кодом (3) указываем, что все последующие длины векторов будут делится на (4).
;В результате нарисуется линия вниз (05C) длиной 1,25 ед.


Код действует до того момента пока не встретится код 4 (умножить на следующий байт).

Пример:
*3,7
3,4,05C,4,4,05C,0

;В примере кодом (3) указываем, что все последующие длины векторов будут делится на (4).
;В результате нарисуется линия вниз (05C) длиной 1,25 ед.
;Затем кодом (4) масштаб возвращается назад и последующая линия нарисуется вниз длиной 5 ед.


Или пока не встретится опять код 3 и «масштаб» увеличится.

Пример:
*4,7
3,4,05C,3,2,05C,0

;В примере первым кодом (3) указываем, что все последующие длины векторов будут делится на (4).
;В результате нарисуется линия вниз (05C) длиной 1,25ед.
;Затем кодом (3) увеличиваем масштаб еще в 2 раза и последующая линия нарисуется вниз длиной 0,625 ед.


! Масштаб последующего вектора делится сначала на 4 (5/4=1,25), затем на 2 (1,25/2=0,625), а не на 6.

Пример:
*5,8
3,4,05C,3,2,050,0C0,0

;В примере первым кодом (3) указываем, что все последующие длины векторов будут делится на (4).
;В результате нарисуется линия вниз (05C) длиной 1,25ед.
;Затем кодом (3) увеличиваем масштаб еще в 2 раза и последующая линия нарисуется вправо длиной 0,625 ед.
;Следующий вектор 0C0 нарисует линию вверх длиной 1,5 ед. (12/4=; 3/2=1,5).


Код 4 – Умножение длин векторов на следующий байт

Данный код необходим, как правило, для возврата «масштаба» после кода 3, либо для получения больших величин.

Пример:
*6,12
3,2,030,4,2,4,0FA,02C,3,0FA, 0F0,0

;В примере первым кодом (3) указываем, что все последующие длины векторов будут делится на (2).
;В результате нарисуется линия вправо (030) длиной 1,5 ед.
;Следующим кодом 4 возвращаем масштаб умножая на 2 все значения
;Затем увеличиваем масштаб в 250 раз.( 4,0FA,)
;Следующий вектор 02C нарисует линию вниз длиной 500 ед. (2*250=500)
;Возвращаем масштаб кодом 3 (3,0FA) и рисуем линию вправо длиной 15.



Код 5 – Сохранение позиции в стек

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

Пример:
; взят из шрифта romans.shx
;описан символ «восклицательный знак»
*33,30
2,14,8,(-5,-21),14,5,8,(5,21),1,0EC,2,05C,1,01A,01E,012,016,2,8,(5,-2),14,6,14,8,(5,-9),0

; в этом примере код 5 сохраняет позицию курсора в точке X=-5,Y=-21
; далее продолжает рисоваться символ, пока не встретится код 6 и курсор переместится в позицию сохраненной в стеке.


Код 6 – Извлечение позиции из стека

После того как в стек будет сохранена позиция курсора (код 5) извлечь ее можно кодом 6.
! Использование кода 5 и 6 целесообразно только в том случае, если в описании формы есть позиции, в которую нужно вернуться.
При длинах до 15 ед. выигрыш идет от одного байта. При длинах больше 15 ед. выигрыш идет от трёх байт.

Пример:
*7,11
8,(5,5),5,8,(0,5),050,6,050,0

; пример использования кодов 5 и 6 при длине линий не более 15

*8,12
8,(5,5),8,(0,5),050,2,05A,1,050,0

; та же фигура но без использования кодов 5 и 6. Размер увеличивается на 1 байт.

*9,18
8,(25,25),8,(0,25),8,(25,0),2,8,(-25,-25),1,8,(0,25),0

; пример фигуры без использования кодов 5 и 6 при длине более 15 ед.

*10,15
8,(25,25),5,8,(0,25),8,(25,0),6,8,(0,25),0

; та же фигура, но с использованием кодов 5 и 6. Размер уменьшился на 3 байта.


Код 7 – Субформа

Данный код очень удобен, если при создании новой формы нужно воспользоваться другой формой или формами. Например, знак квадрата или куба в шрифтах можно сделать из форм цифр 2 и 3. Для этого необходимо их уменьшить (как правило, в два раза кодами 3 и 4), и сместить вверх и вправо. Точно также для нижних индексов.
! Номера форм Unicode описываются двумя байтами. Шрифты не Unicode, описываются одним байтом (от 1 до 255).
Пример:
;Взято из шрифта simplex.shx
;Это описание цифры 2

*50,31
2,14,8,(-7,-21),8,(1,16),1,014,023,012,021,040,02F,01E,02D,02C,02B,8,(-2,-3),0AA,
0E0,2,060,14,8,(-13,-10),0
; Это описание цифры 3
*51,42
2,14,8,(-7,-21),8,(2,21),1,0B0,8,(-6,-8),030,02F,01E,8,(1,-3),02C,8,(-1,-3),02A,
8,(-3,-1),038,8,(-3,1),016,025,2,8,(20,-4),14,8,(-13,-10),0



; Это описание знака квадрата
*178,42,SUPERSCRIPT TWO
2,14,3,4,14,8,(0,-63),14,4,4,5,3,4,8,(0,63),4,4,3,2,7,032,4,2,6,2,8,(15,0),14,3,4,
14,8,(-60,-19),14,4,4,0
; в примере код 7 указывает, что следующие два байта номер формы.
; обратите внимание, что после кода 7 идет два байта, а не один. Это типичная ошибка при написании формы.


Точно таким же способом можно без проблем добавить знак куба

;после знака квадрата нужно дописать (скопировать и подправить знак квадрата)
*179,42,SUPERSCRIPT TREE
2,14,3,4,14,8,(0,-63),14,4,4,5,3,4,8,(0,63),4,4,3,2,7,033,4,2,6,2,8,(15,0),14,3,4,
14,8,(-60,-19),14,4,4,0

; цветом отмечены изменения


Для примера создадим знак пикета (ПК). Для создания такого символа можно воспользоваться двумя символами. Например «Г» и «К» или «П» и «К» и совместить их вместе. Символы можно без труда найти воспользовавшись программой ShxViewer.

; буква Г
*0413,28,ѓ
2,14,8,(-8,-21),2,8,(16,21),1,9,(-12,0),(0,-21),(0,0),2,8,(13,0),1,2,14,8,(-9,-9),0

;буква К
*041A,46,Љ
2,14,8,(-10,-21),2,8,(18,0),1,9,(-9,12),(0,0),2,8,(9,9),1,9,(-14,-14),(0,0),2,
8,(0,14),1,9,(0,-21),(0,0),2,8,(16,0),1,2,14,8,(-10,-9),0

;буква П
*041F,30,Џ
2,14,8,(-11,-21),2,8,(4,0),1,9,(0,21),(14,0),(0,-21),(0,0),2,8,(4,0),1,2,14,8,(-11,-9),0

; Полученная совмещенная форма пикета
*03D6,9,ПК
7,0413,2,058,7,041A,0


Код 8 - Смещения по X-Y
Код 8 используется для смещения пера в координату указанную в скобках после кода 8. Первый байт в скобках смещение по X, второй соответственно по Y.
Пример:
; возьмем всё ту же букву Г из шрифта simplex.shx
*0413,28,ѓ
2,14,8,(-8,-21),2,8,(16,21),1,9,(-12,0),(0,-21),(0,0),2,8,(13,0),1,2,14,8,(-9,-9),0
; код 8 встречается в описании символа 4 раза. Первый раз для ориентирования вертикального текста (описание см. ниже).
; второй раз уже для смещения пера в точку, от которой будет отрисовываться символ
; третий для смещения пера в конечную точку (от которой будет отрисовываться следующий символ).
; и четвертый раз для вертикального ориентирования.


Код 9 – Список смещений по X-Y
Код 9 используется в тех случаях, когда нужно указать несколько точек смещения. Обязательно список должен заканчиваться (0,0).
Пример:
; опять букву Г из шрифта simplex.shx
*0413,28,ѓ
2,14,8,(-8,-21),2,8,(16,21),1,9,(-12,0),(0,-21),(0,0),2,8,(13,0),1,2,14,8,(-9,-9),0

; код 9 в данном примере используется для отрисовывания самого символа


Коды 9 целесообразно использовать, если смещений больше трех. Т.е. данный код можно оптимизировать, уменьшив на байт, используя код 8
;исходный код
9,(-12,0),(0,-21),(0,0),
; первая оптимизация
8,(-12,0),8,(0,-21),

Код 8 и 9 также следует применять, если длина больше 15. Т.е. данный код можно уменьшить еще на два байта

0C8, 8,(0,-21),

Если длина меньше 30ед., и направления совпадают с направлениями однобайтового вектора, то код можно уменьшить еще на 1 байт.

0C8, 0AC,0BC,

Символ представленный в шрифте simplex.shx можно оптимизировать - сделать его более читаемым и уменьшить его размер на 9 байт.

*0413,19,Г
2,14,8,(-8,-21),2,0A3,0B2,1,0C8,0AC,0BC,2,0D0,1,2,14,09A,0
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 25.01.2013 в 17:46.
Shoorup вне форума  
 
Непрочитано 06.08.2010, 13:35
#5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
Сообщение от Солидворкер Посмотреть сообщение
Тему пока закрепил. Все посты, кроме постов Shoorupа из этой темы будут удаляться
Нарушу запрет одним существенным дополнением. В принципе сообщение можно удалить, добавив содержимое в 1-й или какой-либо иной пост.
Это касается создания шрифтов
Суть:
При простановке диаметра вместо знака диаметра ставится или знак вопроса или буква Ш.
Таких сообщений на форуме достаточно много. Например здесь и здесь
Причина (по крайней мере для shx шрифтов) была найдена Kostikus и подтверждена здесь, здесь и здесь
Решение
Цитата:
Описание символа диаметра должно быть в 2-х местах. По адресу 00D8 и 2205. После добавления описания диаметра по адресу 00D8 знаки вопроса (или Ш) исчезли во всех "глючных" чертежах.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.01.2013, 14:29
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Кроме меня, топик кто-нибудь читал?
Цитата:
Сообщение от Shoorup Посмотреть сообщение
Код 1 – Включение режима отрисовки (опускание пера)

По умолчанию перо всегда опущено и данный код необходимо использовать только если перо поднято. Код действует до того момента пока не встретится код 2 (поднятия пера).

Пример:
*33,21,!
2,8,(0,14),1,8,(0,-11),2,8,(0,-2),1,8,(0,-1),2,8,(3,0),0
;В примере перо сначала опускается (2), затем поднимается (1) и опускается (2) два раза

Код 2 – Отключение режима отрисовки (поднятие пера)

Код ставится для поднятия пера. Код действует до того момента пока не встретится код 1 (опускание пера).

Пример:
*33,21,!
2,8,(0,14),1,8,(0,-11),2,8,(0,-2),1,8,(0,-1),2,8,(3,0),0
;В примере перо сначала опускается (2), затем поднимается (1) и опускается (2) два раза
Это только у меня третий глаз, который видит несостыковки? На всякий случай, если вдруг окажется, что я один одарён таким зрением:

1. Правильный вариант будет таким:
Цитата:
В примере перо сначала опускается поднимается (2), затем поднимается опускается (1), снова опускается поднимается (2) - и так два раза.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 25.01.2013, 17:43
#7
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


hwd, спасибо - исправил
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Создание форм и шрифтов для AutoCAD

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SCAD Office 11.1 Новые возможности EUDGEN SCAD 632 20.02.2013 17:13
Предложения по расчетным моделям сооружений aldt Расчетные программы 8 06.07.2009 17:53
Новый драйвер для Phantom AutoCAD OLE/ADI Printer. Как? CyberMan AutoCAD 4 26.04.2009 10:19
Электромагнитная пушка T-Yoke Машиностроение 112 06.08.2008 18:48
lisp для англ Autocad не работает для русск autocad Alegzander LISP 7 28.05.2007 14:54