Документация к свободной библиотеке vectors.asm, для ОС Колибри.
Последнее обновление библиотеки 17.09.09.
Вопросы и предложения на форум сюда.
Рисует линию на экране.
; [esp+8] = p0 ; [esp+12] = p1 ; [esp+16] = color
Преобразует координаты заданного контура из декартовой системы координат в полярную.
; [esp+8] = contur
Рисует фигуры с учетом заданной центральной точки и угла поворота
; [esp+8] = x0,y0,a0,... ; [esp+12] = contur ; [esp+16] = color
Определяет длину и угол поворота вектора по двум координатам
; ebp+8 = adress int coord x ; ebp+10 = adress int coord y
Вычисляет длину отрезка (расстояние между 2-мя точками)
Рисует кривую Безье по 3-м точкам
Вывод векторного шрифта в своем формате.
Пример:
push dword txt ;указатель на текстовую строку push dword arr0c ;указатель на цвет, точку вывода push dword my_font ;указатель на данные векторного шрифта call [vect_draw_text] ... txt db 'ABCDEF-',13,'abcdef-012345',0 arr0c: dd 0xff .x dd 50.0 .y dd 50.0 .a dd 0.261799 ;angle .s dw 35 ;высота шрифта в пикселях
Длинна вектора, которая вычисляется функцией vect_opred2i или vect_line_len4i
Угол порота вектора в радианах, вычисляется функцией vect_opred2i
1. Подключаем библиотеку как и остальные библиотеки в Колибри. Пример таблицы экспорта:
align 4 vectors_lib_import: vect_line dd av_line vect_c_bezier dd av_c_bezier vect_conv_cont dd av_conv_cont vect_draw_cont dd av_draw_cont vect_opred2i dd av_opred2i vect_line_len4i dd av_line_len4i vect_draw_text dd av_draw_text vect_o_len dd av_o_len vect_o_ang dd av_o_ang dd 0,0 av_line db 'vect_line',0 av_c_bezier db 'vect_c_bezier',0 av_conv_cont db 'vect_conv_cont',0 av_draw_cont db 'vect_draw_cont',0 av_opred2i db 'vect_opred2i',0 av_line_len4i db 'vect_line_len4i',0 av_draw_text db 'vect_draw_text',0 av_o_len db 'vect_o_len',0 av_o_ang db 'vect_o_ang',0
2. Подключаем файл vectors.inc.
include 'vectors.inc' ;vectors functions constant
3. Задаем параметры центральной точки (имя может быть любое):
sam: .x dd 180.0 .y dd 100.0 .a dd 0.0 ;angle .s dd 1.0 ;scale
4. Задаем число точек в каждом контуре и координаты точек (имя контура любое).
cont: dw 21 dd -12.0,-2.0, -10.0,-2.0, -9.5,-4.0, -8.5,-4.0, -7.0,-2.0, -6.0,-2.0, -5.0,-7.0, -3.0,-7.0, 1.0,-2.0, 3.0,-2.0 dd 5.0,0.0, 3.0,2.0, 1.0,2.0, -3.0,7.0, -5.0,7.0, -6.0,2.0, -7.0,2.0, -8.5,4.0, -9.5,4.0, -10.0,2.0, -12.0,2.0 dw 2 dd 5.0,0.0, 8.0,0.0 dw 2 dd -10.0,-2.0, -10.0,2.0 dw 2+VECT_PARAM_COLOR dd 0x0080d0 dd 0.0,0.0, 2.0,0.0 dw 0
5. Если координаты точек в контуре заданы не полярной системе координат, то вызываем функцию для их преобразования:
push dword cont call [vect_conv_cont]
В новых версиях библиотеки эту функцию можно не вызывать, сама вызвется. Если координаты точки заданы в полярной системе координат, они должны быть обозначены константой VECT_POINTS_IS_POLAR, иначе при вызове пропрсовки будет произведено преобразование, которое испортит координаты.
6. Рисуем наши фигуры:
push dword 0xff ;первоначальный цвет push dword cont ;координаты контуров (фигура) push dword sam ;параметры начальной точки call [vect_draw_cont]
7. При необходимости коректируем параметры начальной точки и делаем новые перерисовки
Позволяет задавать цвет линий в контуре. На входе функция vect_draw_cont принимает цвет, но этот цвет можно менять и внутри описания контура, для этого используется эта контстанта. Она дабавляеться к числу точек контура (можно добавить через or или +), а потом дальше добавляется цвет (4 байта) и уже потом идут координаты точек:
... dw 2+VECT_PARAM_COLOR ;2 координаты + использовать новый цвет dd 0x0080d0 ;цвет (без VECT_PARAM_COLOR эта строка пропускается) dd 0.0,0.0, 2.0,0.0 ;координаты ...
Позволяет разбивать контур на заданное количество точек.
cif_tbl: dw 8+VECT_PARAM_PROP_L ;8 координат + разбивать контур dd 0x0002 ;количество точек для разбиения (без VECT_PARAM_PROP_L эта строка пропускается) dd 0.0,80.0, 0.0,100.0, 80.0,0.0, 100.0,0.0 ;координаты dd 0.0,-80.0, 0.0,-100.0, -80.0,0.0, -100.0,0.0 dw 0 ;0 точек - конец контуров для рисования
В даном примере рисуются 4 отрезка по 2 точки (8=4*2). Без параметра VECT_PARAM_PROP_L будет нарисована ломанная линия заданная 8-ми точками. Без данного параметра эти 4 отрезка можно задать и так:
cif_tbl: dw 2 dd 0.0,80.0, 0.0,100.0 dw 2 dd 80.0,0.0, 100.0,0.0 dw 2 dd 0.0,-80.0, 0.0,-100.0 dw 2 dd -80.0,0.0, -100.0,0.0 dw 0
Колличество точек для разбиения может быть в пределах от 0 до 255. (0 - не разбивать контур, 1 - рисовать только точки (причем последняя не нарисуется), 2 и больше работают нормально).
Рисование прямолинейного контура. (По умолчанию контур и так прямолинейный)
Указывает, что-бы контур рисовался через кривые Безье.
01.09.09 - самая первая версия библиотеки. 2 примера использ.
03.09.09 - добавлен параметр, позволяющий разбивать контур на заданное количество точек. 3 примера использ.
15.09.09 - добавлены 3 функции: кривая Безье, измерение расстояния между 2-мя точкими, вывод векторного шрифта (формат шрифта свой, не стандартный). Добавлено масштабирование контуров.
17.09.09 - вызов функции vect_conv_cont делается перед прорисовкой контуров автоматически. Изменено задание размера текста, и сама функция вывода текста доработана.
19.09.09 - небольшие доработки функций.
28.09.09 - доработаны функции рисующие линии и кривые (если задать координаты меньше 0, то рисование не происходит, раньше с такими координатами зависало).