[Bf-extensions-cvs] [29bc424] master: Fixed bug: If no UV maps are created, this plugin aborts.

Nutti noreply at git.blender.org
Fri Apr 10 18:03:20 CEST 2015


Commit: 29bc4244a2f58a9bb2aa25bc8b4742ebb6328ded
Author: Nutti
Date:   Sat Apr 11 01:00:24 2015 +0900
Branches: master
https://developer.blender.org/rBAC29bc4244a2f58a9bb2aa25bc8b4742ebb6328ded

Fixed bug: If no UV maps are created, this plugin aborts.

===================================================================

M	uv_copy_and_paste_uv.py

===================================================================

diff --git a/uv_copy_and_paste_uv.py b/uv_copy_and_paste_uv.py
index 5b80afb..0b17eec 100644
--- a/uv_copy_and_paste_uv.py
+++ b/uv_copy_and_paste_uv.py
@@ -26,13 +26,13 @@ from bpy.props import *
 
 __author__ = "Nutti <nutti.metro at gmail.com>"
 __status__ = "production"
-__version__ = "2.1"
-__date__ = "23 January 2015"
+__version__ = "2.2"
+__date__ = "3 April 2015"
 
 bl_info = {
     "name" : "Copy and Paste UV",
     "author" : "Nutti",
-    "version" : (2,1),
+    "version" : (2,2),
     "blender" : (2, 7, 3),
     "location" : "UV Mapping > Copy and Paste UV",
     "description" : "Copy and Paste UV data",
@@ -44,11 +44,6 @@ bl_info = {
 
 SelectedFaceInfo = namedtuple('SelectedFaceInfo', 'normal indices')
 
-src_uv_map = None            # source uv map
-src_obj = None               # source object
-src_sel_face_info = None     # source selected faces information
-dest_sel_face_info = None    # destination selected faces information
-
 # master menu
 class CopyAndPasteUVMenu(bpy.types.Menu):
     bl_idname = "uv.copy_and_paste_uv_menu"
@@ -72,22 +67,32 @@ class CopyAndPasteUVCopyUV(bpy.types.Operator):
     bl_label = "Copy UV"
     bl_description = "Copy UV data"
     bl_options = {'REGISTER', 'UNDO'}
+    
+    # static variables
+    src_uv_map = None            # source uv map
+    src_obj = None               # source object
+    src_sel_face_info = None     # source selected faces information
+    
+    def __init__(self):
+        CopyAndPasteUVCopyUV.src_uv_map = None
+        CopyAndPasteUVCopyUV.src_obj = None
+        CopyAndPasteUVCopyUV.src_sel_face_info = None
 
     def execute(self, context):
-        global src_sel_face_info
-        global src_uv_map
-        global src_obj
     
         self.report({'INFO'}, "Copy UV coordinate.")
         
         # prepare for coping
-        ret, src_obj, mode_orig = prep_copy()
+        ret, CopyAndPasteUVCopyUV.src_obj, mode_orig = prep_copy(self)
         if ret != 0:
             return {'CANCELLED'}
         
         # copy
-        src_sel_face_info = get_selected_faces(src_obj)
-        ret, src_uv_map = copy_opt(self, "", src_obj, src_sel_face_info)
+        CopyAndPasteUVCopyUV.src_sel_face_info = get_selected_faces(
+            CopyAndPasteUVCopyUV.src_obj)
+        ret, CopyAndPasteUVCopyUV.src_uv_map = copy_opt(
+            self, "", CopyAndPasteUVCopyUV.src_obj,
+            CopyAndPasteUVCopyUV.src_sel_face_info)
         
         # finish coping
         fini_copy(mode_orig)
@@ -116,25 +121,27 @@ class CopyAndPasteUVPasteUV(bpy.types.Operator):
         name = "Rotate Copied UV",
         min = 0,
         max = 30)
+   
+    def __init__(self):
+        self.src_uv_map = CopyAndPasteUVCopyUV.src_uv_map
+        self.src_obj = CopyAndPasteUVCopyUV.src_obj
+        self.src_sel_face_info = CopyAndPasteUVCopyUV.src_sel_face_info
 
     def execute(self, context):
-        global src_sel_face_info
-        global dest_sel_face_info
-        global src_uv_map
-        global src_obj
     
         self.report({'INFO'}, "Paste UV coordinate.")
 
         # prepare for pasting
-        ret, dest_obj, mode_orig = prep_paste(src_obj, src_sel_face_info)
+        ret, dest_obj, mode_orig = prep_paste(
+            self, self.src_obj, self.src_sel_face_info)
         if ret != 0:
             return {'CANCELLED'}
         
         # paste
         dest_sel_face_info = get_selected_faces(dest_obj)
         ret = paste_opt(
-            self, "", src_obj, src_sel_face_info,
-            src_uv_map, dest_obj, dest_sel_face_info)
+            self, "", self.src_obj, self.src_sel_face_info,
+            self.src_uv_map, dest_obj, dest_sel_face_info)
         
         # finish pasting
         fini_paste(mode_orig)
@@ -153,21 +160,30 @@ class CopyAndPasteUVCopyUVBySelSeq(bpy.types.Operator):
     bl_description = "Copy UV data by selection sequence."
     bl_options = {'REGISTER', 'UNDO'}
 
+    # static variables
+    src_uv_map = None            # source uv map
+    src_obj = None               # source object
+    src_sel_face_info = None     # source selected faces information
+    
+    def __init__(self):
+        CopyAndPasteUVCopyUVBySelSeq.src_uv_map = None
+        CopyAndPasteUVCopyUVBySelSeq.src_obj = None
+        CopyAndPasteUVCopyUVBySelSeq.src_sel_face_info = None
+
     def execute(self, context):
-        global src_sel_face_info
-        global src_uv_map
-        global src_obj
 
         self.report({'INFO'}, "Copy UV coordinate. (sequence)")
         
         # prepare for coping
-        ret, src_obj, mode_orig = prep_copy()
+        ret, CopyAndPasteUVCopyUVBySelSeq.src_obj, mode_orig = prep_copy(self)
         if ret != 0:
             return {'CANCELLED'}
 
         # copy
-        src_sel_face_info = get_selected_faces_by_sel_seq(src_obj)
-        ret, src_uv_map = copy_opt(self, "", src_obj, src_sel_face_info)
+        CopyAndPasteUVCopyUVBySelSeq.src_sel_face_info = get_selected_faces_by_sel_seq(CopyAndPasteUVCopyUVBySelSeq.src_obj)
+        ret, CopyAndPasteUVCopyUVBySelSeq.src_uv_map = copy_opt(
+            self, "", CopyAndPasteUVCopyUVBySelSeq.src_obj,
+            CopyAndPasteUVCopyUVBySelSeq.src_sel_face_info)
 
         # finish coping
         fini_copy(mode_orig)
@@ -197,24 +213,26 @@ class CopyAndPasteUVPasteUVBySelSeq(bpy.types.Operator):
         min = 0,
         max = 30)
 
+    def __init__(self):
+        self.src_uv_map = CopyAndPasteUVCopyUVBySelSeq.src_uv_map
+        self.src_obj = CopyAndPasteUVCopyUVBySelSeq.src_obj
+        self.src_sel_face_info = CopyAndPasteUVCopyUVBySelSeq.src_sel_face_info
+
     def execute(self, context):
-        global src_sel_face_info
-        global dest_sel_face_info
-        global src_uv_map
-        global src_obj
         
         self.report({'INFO'}, "Paste UV coordinate. (sequence)")
 
         # prepare for pasting
-        ret, dest_obj, mode_orig = prep_paste(src_obj, src_sel_face_info)
+        ret, dest_obj, mode_orig = prep_paste(
+            self, self.src_obj, self.src_sel_face_info)
         if ret != 0:
             return {'CANCELLED'}
 
         # paste
         dest_sel_face_info = get_selected_faces_by_sel_seq(dest_obj)
         ret = paste_opt(
-            self, "", src_obj, src_sel_face_info,
-            src_uv_map, dest_obj, dest_sel_face_info)
+            self, "", self.src_obj, self.src_sel_face_info,
+            self.src_uv_map, dest_obj, dest_sel_face_info)
             
         # finish pasting
         fini_paste(mode_orig)
@@ -229,26 +247,34 @@ class CopyAndPasteUVCopyUVMapSubOpt(bpy.types.Operator):
     bl_idname = "uv.copy_uv_map_sub_opt"
     bl_label = "Copy UV Map (Sub Menu Operator)"
     uv_map = bpy.props.StringProperty()
+
+    # static variables
+    src_uv_map = None            # source uv map
+    src_obj = None               # source object
+    src_sel_face_info = None     # source selected faces information
     
+    def __init__(self):
+        CopyAndPasteUVCopyUVMapSubOpt.src_uv_map = None
+        CopyAndPasteUVCopyUVMapSubOpt.src_obj = None
+        CopyAndPasteUVCopyUVMapSubOpt.src_sel_face_info = None
+
     def execute(self, context):
-        global src_sel_face_info
-        global src_uv_map
-        global src_obj
         
         self.report(
             {'INFO'},
             "Copy UV coordinate. (UV map:" + self.uv_map + ")")
 
         # prepare for coping
-        ret, src_obj, mode_orig = prep_copy()
+        ret, CopyAndPasteUVCopyUVMapSubOpt.src_obj, mode_orig = prep_copy(self)
         if ret != 0:
             return {'CANCELLED'}
         
         # copy
-        src_sel_face_info = get_selected_faces(src_obj)
-        ret, src_uv_map = copy_opt(
-            self, self.uv_map, src_obj,
-            src_sel_face_info)
+        CopyAndPasteUVCopyUVMapSubOpt.src_sel_face_info = get_selected_faces(
+            CopyAndPasteUVCopyUVMapSubOpt.src_obj)
+        ret, CopyAndPasteUVCopyUVMapSubOpt.src_uv_map = copy_opt(
+            self, self.uv_map, CopyAndPasteUVCopyUVMapSubOpt.src_obj,
+            CopyAndPasteUVCopyUVMapSubOpt.src_sel_face_info)
         
         # finish coping
         fini_copy(mode_orig)
@@ -296,26 +322,28 @@ class CopyAndPasteUVPasteUVMapSubOpt(bpy.types.Operator):
         name = "Rotate Copied UV",
         min = 0,
         max = 30)
-    
+
+    def __init__(self):
+        self.src_uv_map = CopyAndPasteUVCopyUVMapSubOpt.src_uv_map
+        self.src_obj = CopyAndPasteUVCopyUVMapSubOpt.src_obj
+        self.src_sel_face_info = CopyAndPasteUVCopyUVMapSubOpt.src_sel_face_info
+
     def execute(self, context):
-        global src_sel_face_info
-        global dest_sel_face_info
-        global src_uv_map
-        global src_obj
         
         self.report(
             {'INFO'}, "Paste UV coordinate. (UV map:" + self.uv_map + ")")
 
         # prepare for pasting
-        ret, dest_obj, mode_orig = prep_paste(src_obj, src_sel_face_info)
+        ret, dest_obj, mode_orig = prep_paste(
+            self, self.src_obj, self.src_sel_face_info)
         if ret != 0:
             return {'CANCELLED'}
         
         # paste
         dest_sel_face_info = get_selected_faces(dest_obj)
         ret = paste_opt(
-            self, self.uv_map, src_obj, src_sel_face_info, src_uv_map,
-            dest_obj, dest_sel_face_info)
+            self, self.uv_map, self.src_obj, self.src_sel_face_info,
+            self.src_uv_map, dest_obj, dest_sel_face_info)
         
         # finish pasting
         fini_paste(mode_orig)
@@ -347,13 +375,18 @@ class CopyAndPasteUVPasteUVMap(bpy.types.Menu):
                 text=m).uv_map = m
 
 
-def prep_copy():
+def prep_copy(self):
     """
     parepare for copy operation.
     @return tuple(error code, active object, current mode)
     """
     # get active (source) object to be copied from
     obj = bpy.context.active_object;
+    
+    # check if active object has more than one UV map
+    if len(obj.data.uv_textures.keys()) == 0:
+        self.report({'WARNING'}, "Object must have more than one UV map.")
+        return (1, None, None)
 
     # change to 'OBJECT' mode, in order to access internal data
     mode = bpy.context.object.mode
@@ -373,7 +406,7 @@ de

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list