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/copy_paste_uv_object.py')
-rw-r--r--uv_magic_uv/op/copy_paste_uv_object.py140
1 files changed, 63 insertions, 77 deletions
diff --git a/uv_magic_uv/op/copy_paste_uv_object.py b/uv_magic_uv/op/copy_paste_uv_object.py
index eb6d87c9..d9f42447 100644
--- a/uv_magic_uv/op/copy_paste_uv_object.py
+++ b/uv_magic_uv/op/copy_paste_uv_object.py
@@ -23,27 +23,24 @@ __status__ = "production"
__version__ = "5.2"
__date__ = "17 Nov 2018"
-import bpy
import bmesh
+import bpy
from bpy.props import (
StringProperty,
BoolProperty,
)
+from ..impl import copy_paste_uv_impl as impl
from .. import common
-from .copy_paste_uv import (
- get_copy_uv_layers,
- get_paste_uv_layers,
- paste_uv
-)
-
+from ..utils.bl_class_registry import BlClassRegistry
+from ..utils.property_class_registry import PropertyClassRegistry
__all__ = [
'Properties',
- 'OperatorCopyUV',
- 'MenuCopyUV',
- 'OperatorPasteUV',
- 'MenuPasteUV',
+ 'MUV_OT_CopyPasteUVObject_CopyUV',
+ 'MUV_MT_CopyPasteUVObject_CopyUV',
+ 'MUV_OT_CopyPasteUVObject_PasteUV',
+ 'MUV_MT_CopyPasteUVObject_PasteUV',
]
@@ -68,16 +65,10 @@ def is_valid_context(context):
return True
-def memorize_view_3d_mode(fn):
- def __memorize_view_3d_mode(self, context):
- mode_orig = bpy.context.object.mode
- result = fn(self, context)
- bpy.ops.object.mode_set(mode=mode_orig)
- return result
- return __memorize_view_3d_mode
-
-
+@PropertyClassRegistry()
class Properties:
+ idname = "copy_paste_uv_object"
+
@classmethod
def init_props(cls, scene):
class Props():
@@ -97,7 +88,17 @@ class Properties:
del scene.muv_copy_paste_uv_object_copy_seams
-class OperatorCopyUV(bpy.types.Operator):
+def memorize_view_3d_mode(fn):
+ def __memorize_view_3d_mode(self, context):
+ mode_orig = bpy.context.object.mode
+ result = fn(self, context)
+ bpy.ops.object.mode_set(mode=mode_orig)
+ return result
+ return __memorize_view_3d_mode
+
+
+@BlClassRegistry()
+class MUV_OT_CopyPasteUVObject_CopyUV(bpy.types.Operator):
"""
Operation class: Copy UV coordinate among objects
"""
@@ -107,7 +108,7 @@ class OperatorCopyUV(bpy.types.Operator):
bl_description = "Copy UV coordinate (Among Objects)"
bl_options = {'REGISTER', 'UNDO'}
- uv_map = StringProperty(default="__default", options={'HIDDEN'})
+ uv_map: StringProperty(default="__default", options={'HIDDEN'})
@classmethod
def poll(cls, context):
@@ -124,23 +125,15 @@ class OperatorCopyUV(bpy.types.Operator):
bm = common.create_bmesh(obj)
# get UV layer
- uv_layers = get_copy_uv_layers(self, bm)
+ uv_layers = impl.get_copy_uv_layers(self, bm, self.uv_map)
if not uv_layers:
return {'CANCELLED'}
# get selected face
- props.src_info = {}
- for layer in uv_layers:
- face_info = []
- for face in bm.faces:
- if face.select:
- info = {
- "uvs": [l[layer].uv.copy() for l in face.loops],
- "pin_uvs": [l[layer].pin_uv for l in face.loops],
- "seams": [l.edge.seam for l in face.loops],
- }
- face_info.append(info)
- props.src_info[layer.name] = face_info
+ src_info = impl.get_src_face_info(self, bm, uv_layers)
+ if src_info is None:
+ return {'CANCELLED'}
+ props.src_info = src_info
self.report({'INFO'},
"{}'s UV coordinates are copied".format(obj.name))
@@ -148,7 +141,8 @@ class OperatorCopyUV(bpy.types.Operator):
return {'FINISHED'}
-class MenuCopyUV(bpy.types.Menu):
+@BlClassRegistry()
+class MUV_MT_CopyPasteUVObject_CopyUV(bpy.types.Menu):
"""
Menu class: Copy UV coordinate among objects
"""
@@ -164,20 +158,24 @@ class MenuCopyUV(bpy.types.Menu):
def draw(self, _):
layout = self.layout
# create sub menu
- uv_maps = bpy.context.active_object.data.uv_textures.keys()
+ uv_maps = bpy.context.active_object.data.uv_layers.keys()
- ops = layout.operator(OperatorCopyUV.bl_idname, text="[Default]")
+ ops = layout.operator(MUV_OT_CopyPasteUVObject_CopyUV.bl_idname,
+ text="[Default]")
ops.uv_map = "__default"
- ops = layout.operator(OperatorCopyUV.bl_idname, text="[All]")
+ ops = layout.operator(MUV_OT_CopyPasteUVObject_CopyUV.bl_idname,
+ text="[All]")
ops.uv_map = "__all"
for m in uv_maps:
- ops = layout.operator(OperatorCopyUV.bl_idname, text=m)
+ ops = layout.operator(MUV_OT_CopyPasteUVObject_CopyUV.bl_idname,
+ text=m)
ops.uv_map = m
-class OperatorPasteUV(bpy.types.Operator):
+@BlClassRegistry()
+class MUV_OT_CopyPasteUVObject_PasteUV(bpy.types.Operator):
"""
Operation class: Paste UV coordinate among objects
"""
@@ -187,8 +185,8 @@ class OperatorPasteUV(bpy.types.Operator):
bl_description = "Paste UV coordinate (Among Objects)"
bl_options = {'REGISTER', 'UNDO'}
- uv_map = StringProperty(default="__default", options={'HIDDEN'})
- copy_seams = BoolProperty(
+ uv_map: StringProperty(default="__default", options={'HIDDEN'})
+ copy_seams: BoolProperty(
name="Seams",
description="Copy Seams",
default=True
@@ -213,52 +211,35 @@ class OperatorPasteUV(bpy.types.Operator):
return {'CANCELLED'}
for o in bpy.data.objects:
- if not hasattr(o.data, "uv_textures") or not o.select:
+ if not hasattr(o.data, "uv_layers") or not o.select_get():
continue
bpy.ops.object.mode_set(mode='OBJECT')
- bpy.context.scene.objects.active = o
+ bpy.context.view_layer.objects.active = o
bpy.ops.object.mode_set(mode='EDIT')
obj = context.active_object
bm = common.create_bmesh(obj)
# get UV layer
- uv_layers = get_paste_uv_layers(self, obj, bm, props.src_info)
+ uv_layers = impl.get_paste_uv_layers(self, obj, bm, props.src_info,
+ self.uv_map)
if not uv_layers:
return {'CANCELLED'}
# get selected face
- dest_info = {}
- for layer in uv_layers:
- face_info = []
- for face in bm.faces:
- if face.select:
- info = {
- "uvs": [l[layer].uv.copy() for l in face.loops],
- }
- face_info.append(info)
- key = list(props.src_info.keys())[0]
- src_face_count = len(props.src_info[key])
- dest_face_count = len(face_info)
- if src_face_count != dest_face_count:
- self.report(
- {'WARNING'},
- "Number of selected faces is different from copied" +
- "(src:{}, dest:{})"
- .format(src_face_count, dest_face_count))
- return {'CANCELLED'}
- dest_info[layer.name] = face_info
+ dest_info = impl.get_dest_face_info(self, bm, uv_layers,
+ props.src_info, 'N_N')
+ if dest_info is None:
+ return {'CANCELLED'}
# paste
- ret = paste_uv(self, bm, props.src_info, dest_info, uv_layers,
- 'N_N', 0, 0, self.copy_seams)
+ ret = impl.paste_uv(self, bm, props.src_info, dest_info, uv_layers,
+ 'N_N', 0, 0, self.copy_seams)
if ret:
return {'CANCELLED'}
bmesh.update_edit_mesh(obj.data)
- if self.copy_seams is True:
- obj.data.show_edge_seams = True
self.report(
{'INFO'}, "{}'s UV coordinates are pasted".format(obj.name))
@@ -266,7 +247,8 @@ class OperatorPasteUV(bpy.types.Operator):
return {'FINISHED'}
-class MenuPasteUV(bpy.types.Menu):
+@BlClassRegistry()
+class MUV_MT_CopyPasteUVObject_PasteUV(bpy.types.Menu):
"""
Menu class: Paste UV coordinate among objects
"""
@@ -289,22 +271,26 @@ class MenuPasteUV(bpy.types.Menu):
# create sub menu
uv_maps = []
for obj in bpy.data.objects:
- if hasattr(obj.data, "uv_textures") and obj.select:
- uv_maps.extend(obj.data.uv_textures.keys())
+ if hasattr(obj.data, "uv_layers") and obj.select_get():
+ uv_maps.extend(obj.data.uv_layers.keys())
- ops = layout.operator(OperatorPasteUV.bl_idname, text="[Default]")
+ ops = layout.operator(MUV_OT_CopyPasteUVObject_PasteUV.bl_idname,
+ text="[Default]")
ops.uv_map = "__default"
ops.copy_seams = sc.muv_copy_paste_uv_object_copy_seams
- ops = layout.operator(OperatorPasteUV.bl_idname, text="[New]")
+ ops = layout.operator(MUV_OT_CopyPasteUVObject_PasteUV.bl_idname,
+ text="[New]")
ops.uv_map = "__new"
ops.copy_seams = sc.muv_copy_paste_uv_object_copy_seams
- ops = layout.operator(OperatorPasteUV.bl_idname, text="[All]")
+ ops = layout.operator(MUV_OT_CopyPasteUVObject_PasteUV.bl_idname,
+ text="[All]")
ops.uv_map = "__all"
ops.copy_seams = sc.muv_copy_paste_uv_object_copy_seams
for m in uv_maps:
- ops = layout.operator(OperatorPasteUV.bl_idname, text=m)
+ ops = layout.operator(MUV_OT_CopyPasteUVObject_PasteUV.bl_idname,
+ text=m)
ops.uv_map = m
ops.copy_seams = sc.muv_copy_paste_uv_object_copy_seams