В большинстве случаев острова развертки можно беспрепятственно перемещать в рабочей области UV Edit в любое место. Однако иногда бывает нежелательно выносить развертку за границы базовой области UV, например, чтобы гарантировать, что развертка не “уедет”, при запекании в атласы.
В Blender есть простой и эффективный метод, который просто блокирует вынос элементов развертки за базовые границы.
Для его включения в меню рабочей области UV Edit нужно выбрать пункт UV и установить чекбокс в пункте “Constrain to Image Bounds”.
После этого при перемещении элементов развертки они будут останавливаться на базовой границе области и не двигаться дальше ее.
Для восстановления свободного перемещения развертки нужно снять установленный чекбокс.
Этот режим можно также включать/выключать и через Blender Python API.
Для начала нужно получить указатель на рабочую область UV Edit.
1 2 3 4 |
area = next((_area for _area in bpy.context.screen.areas if _area.type == 'IMAGE_EDITOR' and _area.ui_type == 'UV'), None) print(area, area.type, area.ui_type) # <bpy_struct, Area at 0x000001B07AD873E0> IMAGE_EDITOR UV |
Так как рабочая область UV Edit относится к общему типу IMAGE_EDITOR, чтобы гарантированно получить указатель именно на редактор разверток, мы проверяем дополнительно еще и подтип ui_type, который должен быть равен “UI”.
Получив указатель на рабочую область, через него получим указатель на нужное свойство “lock_bounds” для проверки его текущего состояния.
1 2 3 |
area.spaces[0].uv_editor.lock_bounds # False |
Значение равно False, это значит что опция не включена (чекбокс не отмечен).
Включим ее (отметим чекбокс), присвоив свойству значение True.
1 |
area.spaces[0].uv_editor.lock_bounds = True |
Для того чтобы выключить режим (снять чекбокс), присвоим свойству “lock_bounds” значение False.
1 |
area.spaces[0].uv_editor.lock_bounds = False |