На небольших примерах хочу показать как можно вывести изображения часовых и минутных делений, а также цифр на циферблат часов.
В предыдущем сообщении я рассказал как можно вывести простые часы с помощью lua+cairo. Для рисования циферблата буду использовать выложенный ранее скрипт.
Для добавления часовых делений добавим следующие строки
-- добавляем часовые деления
-- сбрасываем счетчик делений на 0
local i = 0
-- задаем расстояние между делениями
local winkel = math.rad(30)
-- выводим 12 делений
for i= 0, 11, 1 do
-- расчет начальных точек для часовых делений
cairo_move_to(cr, t.x - math.sin(winkel * i) * t.radius, t.y - math.cos(winkel * i) * t.radius)
-- длину делений берем равной 0.15 от длины радиуса
cairo_line_to(cr, t.x - math.sin(winkel * i) * (t.radius * 0.85), t.y - math.cos(winkel * i) * (t.radius*0.85))
-- выводим изображение
cairo_stroke (cr)
end
Получаем такое изображение
Теперь добавим минутные деления. Кроме длины делений и их количества, вывод минутных делений ничем не отличается от вывода часовых делений.
-- добавляем минутные деления
-- сбрасываем счетчик делений на 0
local i = 0
-- задаем расстояние между делениями
local winkel = math.rad(6)
-- выводим 12 делений
for i=0, 59, 1 do
cairo_move_to(cr, t.x - math.sin(winkel * i) * t.radius, t.y - math.cos(winkel * i) * t.radius)
-- длину делений берем равной 0.1 от длины радиуса
cairo_line_to(cr, t.x - math.sin(winkel * i) * (t.radius * 0.9), t.y - math.cos(winkel * i) * (t.radius*0.9))
end
-- выводим изображение
cairo_stroke (cr)
Получаем такое изображение
Теперь добавим цифры
-- добавляем цифры
-- запоминаем данные
cairo_save (cr)
-- переносим значения координат
cairo_translate(cr, t.x, t.y)
-- сбрасываем координаты цифр
mx, my = 0, 0
-- сбрасываем счетчик делений на 0
local i = 0
-- задаем расстояние между цифрами
local winkel = math.rad(30)
-- необходимо вывести цифра начиная с 1 и заканчивая 12
for i = 1, 12, 1 do
-- расчитываем координаты цифр
mov_x = math.sin(winkel*i)*(t.radius*0.73)
mov_y = math.cos(winkel*i)*(t.radius*0.73)
-- расчитываем ширину и высоту цифр
te=cairo_text_extents_t:create()
cairo_text_extents (cr, i, te)
-- вносим поправку на половину ширины и половину высоты цифр
mx = -te.width/2
my = -te.height/2-te.y_bearing
-- задаем координаты цифр
cairo_move_to(cr, mx + mov_x, my - mov_y)
-- выводим цифры
cairo_show_text(cr, i)
end
-- восстанавливаем данные
cairo_restore (cr)
Окончательное изображение часов
Все приведенные примеры необходимо добавлять до вывода стрелок
Готовый скрипт с показанными изменениями можно взять здесь
В предыдущем сообщении я рассказал как можно вывести простые часы с помощью lua+cairo. Для рисования циферблата буду использовать выложенный ранее скрипт.
Для добавления часовых делений добавим следующие строки
-- добавляем часовые деления
-- сбрасываем счетчик делений на 0
local i = 0
-- задаем расстояние между делениями
local winkel = math.rad(30)
-- выводим 12 делений
for i= 0, 11, 1 do
-- расчет начальных точек для часовых делений
cairo_move_to(cr, t.x - math.sin(winkel * i) * t.radius, t.y - math.cos(winkel * i) * t.radius)
-- длину делений берем равной 0.15 от длины радиуса
cairo_line_to(cr, t.x - math.sin(winkel * i) * (t.radius * 0.85), t.y - math.cos(winkel * i) * (t.radius*0.85))
-- выводим изображение
cairo_stroke (cr)
end
Получаем такое изображение
Теперь добавим минутные деления. Кроме длины делений и их количества, вывод минутных делений ничем не отличается от вывода часовых делений.
-- добавляем минутные деления
-- сбрасываем счетчик делений на 0
local i = 0
-- задаем расстояние между делениями
local winkel = math.rad(6)
-- выводим 12 делений
for i=0, 59, 1 do
cairo_move_to(cr, t.x - math.sin(winkel * i) * t.radius, t.y - math.cos(winkel * i) * t.radius)
-- длину делений берем равной 0.1 от длины радиуса
cairo_line_to(cr, t.x - math.sin(winkel * i) * (t.radius * 0.9), t.y - math.cos(winkel * i) * (t.radius*0.9))
end
-- выводим изображение
cairo_stroke (cr)
Получаем такое изображение
Теперь добавим цифры
-- добавляем цифры
-- запоминаем данные
cairo_save (cr)
-- переносим значения координат
cairo_translate(cr, t.x, t.y)
-- сбрасываем координаты цифр
mx, my = 0, 0
-- сбрасываем счетчик делений на 0
local i = 0
-- задаем расстояние между цифрами
local winkel = math.rad(30)
-- необходимо вывести цифра начиная с 1 и заканчивая 12
for i = 1, 12, 1 do
-- расчитываем координаты цифр
mov_x = math.sin(winkel*i)*(t.radius*0.73)
mov_y = math.cos(winkel*i)*(t.radius*0.73)
-- расчитываем ширину и высоту цифр
te=cairo_text_extents_t:create()
cairo_text_extents (cr, i, te)
-- вносим поправку на половину ширины и половину высоты цифр
mx = -te.width/2
my = -te.height/2-te.y_bearing
-- задаем координаты цифр
cairo_move_to(cr, mx + mov_x, my - mov_y)
-- выводим цифры
cairo_show_text(cr, i)
end
-- восстанавливаем данные
cairo_restore (cr)
Окончательное изображение часов
Все приведенные примеры необходимо добавлять до вывода стрелок
Готовый скрипт с показанными изменениями можно взять здесь
Комментариев нет:
Отправить комментарий