Перейти к содержанию

Canvas и Viewport3D

Canvas

Zoom/pan виджет для отображения RGBA numpy-изображений с overlay-слоем.

Данные

Метод Описание
set_image(np_rgba_or_none) Установить основное изображение
set_overlay(np_rgba_or_none) Установить overlay (копирование)
set_overlay_ref(np_rgba_or_none) Установить overlay (по ссылке)
mark_overlay_dirty(x0, y0, x1, y1) Пометить область overlay для обновления

Навигация

Поле/метод Описание
zoom Текущий масштаб (property)
set_zoom(value, anchor_wx, anchor_wy) Установить масштаб с якорем
fit_in_view() Вписать изображение в виджет
center_on(ix, iy) Центрировать на точке изображения
widget_to_image(wx, wy) Координаты виджета -> изображения
image_to_widget(ix, iy) Координаты изображения -> виджета
min_zoom, max_zoom, zoom_factor Ограничения масштаба

Callbacks

Callback Описание
on_canvas_mouse_down(ix, iy, button, mods) Клик (в координатах изображения)
on_canvas_mouse_move(ix, iy) Движение мыши
on_canvas_mouse_up(ix, iy) Отпускание кнопки
on_zoom_changed(zoom) Изменение масштаба
on_render_overlay(canvas, renderer) Отрисовка поверх канваса

Управление

  • Middle mouse drag = pan
  • Wheel = zoom (вокруг курсора)

Viewport3D

Виджет для отображения FBO-сцены из termin. Пересылает input в 3D input manager.

Поле/метод Описание
set_surface(surface, display=None) Подключить FBO-поверхность
on_before_resize(new_w, new_h) Callback перед resize

Особенности:

  • Получает цветовую текстуру FBO и blit-ит её в область виджета.
  • При resize вызывает surface.resize(new_w, new_h).
  • Обрабатывает on_mouse_*, on_key_down, on_key_up как прокси в native input.

Пример Canvas

canvas = Canvas()
canvas.set_image(image_rgba)
canvas.fit_in_view()

canvas.on_canvas_mouse_down = lambda ix, iy, btn, mods: print(ix, iy)
canvas.on_zoom_changed = lambda z: print("zoom", z)