Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'uv_magic_uv/op/move_uv.py')
-rw-r--r--uv_magic_uv/op/move_uv.py137
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)