diff options
Diffstat (limited to 'uv_magic_uv/op/move_uv.py')
-rw-r--r-- | uv_magic_uv/op/move_uv.py | 137 |
1 files changed, 43 insertions, 94 deletions
diff --git a/uv_magic_uv/op/move_uv.py b/uv_magic_uv/op/move_uv.py index a5cc401c..653918d3 100644 --- a/uv_magic_uv/op/move_uv.py +++ b/uv_magic_uv/op/move_uv.py @@ -20,114 +20,63 @@ __author__ = "kgeogeo, mem, Nutti <nutti.metro@gmail.com>" __status__ = "production" -__version__ = "5.1" -__date__ = "24 Feb 2018" +__version__ = "5.2" +__date__ = "17 Nov 2018" import bpy -import bmesh -from mathutils import Vector +from bpy.props import BoolProperty +from ..impl import move_uv_impl as impl +from ..utils.bl_class_registry import BlClassRegistry +from ..utils.property_class_registry import PropertyClassRegistry -class MUV_MVUV(bpy.types.Operator): + +__all__ = [ + 'Properties', + 'MUV_OT_MoveUV', +] + + +@PropertyClassRegistry() +class Properties: + idname = "move_uv" + + @classmethod + def init_props(cls, scene): + scene.muv_move_uv_enabled = BoolProperty( + name="Move UV Enabled", + description="Move UV is enabled", + default=False + ) + + @classmethod + def del_props(cls, scene): + del scene.muv_move_uv_enabled + + +@BlClassRegistry() +class MUV_OT_MoveUV(bpy.types.Operator): """ - Operator class: Move UV from View3D + Operator class: Move UV """ - bl_idname = "view3d.muv_mvuv" - bl_label = "Move the UV from View3D" + bl_idname = "uv.muv_move_uv_operator" + bl_label = "Move UV" bl_options = {'REGISTER', 'UNDO'} def __init__(self): - self.__topology_dict = [] - self.__prev_mouse = Vector((0.0, 0.0)) - self.__offset_uv = Vector((0.0, 0.0)) - self.__prev_offset_uv = Vector((0.0, 0.0)) - self.__first_time = True - self.__ini_uvs = [] - self.__running = False - - def __find_uv(self, context): - bm = bmesh.from_edit_mesh(context.object.data) - topology_dict = [] - uvs = [] - active_uv = bm.loops.layers.uv.active - for fidx, f in enumerate(bm.faces): - for vidx, v in enumerate(f.verts): - if v.select: - uvs.append(f.loops[vidx][active_uv].uv.copy()) - topology_dict.append([fidx, vidx]) - - return topology_dict, uvs + self.__impl = impl.MoveUVImpl() @classmethod def poll(cls, context): - return context.edit_object + return impl.MoveUVImpl.poll(context) + + @classmethod + def is_running(cls, _): + return impl.MoveUVImpl.is_running(_) def modal(self, context, event): - props = context.scene.muv_props.mvuv - if self.__first_time is True: - self.__prev_mouse = Vector(( - event.mouse_region_x, event.mouse_region_y)) - self.__first_time = False - return {'RUNNING_MODAL'} - - # move UV - div = 10000 - self.__offset_uv += Vector(( - (event.mouse_region_x - self.__prev_mouse.x) / div, - (event.mouse_region_y - self.__prev_mouse.y) / div)) - ouv = self.__offset_uv - pouv = self.__prev_offset_uv - vec = Vector((ouv.x - ouv.y, ouv.x + ouv.y)) - dv = vec - pouv - self.__prev_offset_uv = vec - self.__prev_mouse = Vector(( - event.mouse_region_x, event.mouse_region_y)) - - # check if operation is started - if self.__running: - if event.type == 'LEFTMOUSE' and event.value == 'RELEASE': - self.__running = False - return {'RUNNING_MODAL'} - - # update UV - obj = context.object - bm = bmesh.from_edit_mesh(obj.data) - active_uv = bm.loops.layers.uv.active - for fidx, vidx in self.__topology_dict: - l = bm.faces[fidx].loops[vidx] - l[active_uv].uv = l[active_uv].uv + dv - bmesh.update_edit_mesh(obj.data) - - # check mouse preference - wm = context.window_manager - keyconfig = wm.keyconfigs.active - select_mouse = getattr(keyconfig.preferences, "select_mouse", "LEFT") - if select_mouse == 'RIGHT': - confirm_btn = 'LEFTMOUSE' - cancel_btn = 'RIGHTMOUSE' - else: - confirm_btn = 'RIGHTMOUSE' - cancel_btn = 'LEFTMOUSE' - - # cancelled - if event.type == cancel_btn and event.value == 'PRESS': - for (fidx, vidx), uv in zip(self.__topology_dict, self.__ini_uvs): - bm.faces[fidx].loops[vidx][active_uv].uv = uv - props.running = False - return {'FINISHED'} - # confirmed - if event.type == confirm_btn and event.value == 'PRESS': - props.running = False - return {'FINISHED'} - - return {'RUNNING_MODAL'} + return self.__impl.modal(self, context, event) def execute(self, context): - props = context.scene.muv_props.mvuv - props.running = True - self.__running = True - self.__first_time = True - context.window_manager.modal_handler_add(self) - self.__topology_dict, self.__ini_uvs = self.__find_uv(context) - return {'RUNNING_MODAL'} + return self.__impl.execute(self, context) |