Перевод координат курсора мышки в координаты текстуры

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

В Blender, отслеживая событие MOUSEMOVE в модальном операторе, мы можем получить координаты точки, которая находится под курсором мышки, в пространстве текущей рабочей области.

Значения координат в пространстве рабочей области мы можем получить из свойств обрабатываемого события:

  • X координата – event.mouse_region_x
  • Y координата – event.mouse_region_y

Однако очевидно, что текстура занимает не всю площадь рабочей области Image Editor, вокруг нее могут оставаться свободные поля, или же наоборот, текстура может быть увеличена масштабированием и выходить за пределы рабочей области.

Для того, чтобы преобразовать координаты из координат рабочей области в координаты текстуры, можно воспользоваться функцией region_to_view. Эта функция позволяет преобразовать координаты рабочей области, которые изменяются от 0 до бесконечности в линейные координаты текстуры, которые изменяются от 0 до 1.

Определим модальный оператор, который будет отслеживать событие MOUSEMOVE и при его обработке переводить координаты курсора мышки в линейные координаты текстуры.

Также определим панель в окне Image Editor с кнопкой для вызова этого оператора.

Теперь при нажатии на кнопку выполнения оператора в нашей панели в рабочей области Image Editor, в консоль будут печататься текущие координаты курсора мышки в рабочей области, а так же линейные координаты в области текстуры от 0 до 1.

Если получаемые значения выходят за пределы диапазона 0 – 1, это означает что курсор мышки вышел за пределы текстуры.

Для того, чтобы получить абсолютные текстурные координаты, нужно умножить получаемые значения на разрешение текстуры: для x – по горизонтали, для y – по вертикали.

Чтобы остановить работу оператора, кликните правой кнопкой мышки или нажмите клавишу ESC.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии