[Bf-extensions-cvs] [68efb00d] master: mesh_copy_uvs_from_joined: remove: unsupported T63750

meta-androcto noreply at git.blender.org
Sat Sep 14 10:49:10 CEST 2019


Commit: 68efb00d766d253560095ac2123bb126d9b5358c
Author: meta-androcto
Date:   Sat Sep 14 18:46:54 2019 +1000
Branches: master
https://developer.blender.org/rBAC68efb00d766d253560095ac2123bb126d9b5358c

mesh_copy_uvs_from_joined: remove: unsupported T63750

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

D	mesh_copy_uvs_from_joined.py

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

diff --git a/mesh_copy_uvs_from_joined.py b/mesh_copy_uvs_from_joined.py
deleted file mode 100644
index 0ce86b6a..00000000
--- a/mesh_copy_uvs_from_joined.py
+++ /dev/null
@@ -1,211 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-
-bl_info = {
-    "name": "Copy UV's from Joined",
-    "description": "Copy UV coordinates from the active joined mesh",
-    "author": "Sergey Sharybin",
-    "version": (0, 1),
-    "blender": (2, 63, 0),
-    "location": "Object mode 'Make Links' menu",
-    "wiki_url": "",
-    "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
-    "category": "Object"}
-
-
-import bpy
-from bpy.types import Operator
-from mathutils import Vector
-
-FLT_MAX = 30000.0
-KEY_PRECISION = 1
-
-
-def MINMAX_INIT():
-    return (Vector((+FLT_MAX, +FLT_MAX, +FLT_MAX)),
-            Vector((-FLT_MAX, -FLT_MAX, -FLT_MAX)))
-
-
-def MINMAX_DO(min, max, vec):
-    for x in range(3):
-        if vec[x] < min[x]:
-            min[x] = vec[x]
-
-        if vec[x] > max[x]:
-            max[x] = vec[x]
-
-
-def getObjectAABB(obj):
-    min, max = MINMAX_INIT()
-
-    matrix = obj.matrix_world.copy()
-    for vec in obj.bound_box:
-        v = matrix * Vector(vec)
-        MINMAX_DO(min, max, v)
-
-    return min, max
-
-
-class  OBJECT_OT_copy_uv_from_joined(Operator):
-    """
-    Copy UVs from joined objects into originals
-    """
-
-    bl_idname = "object.copy_uv_from_joined"
-    bl_label = "Copy UVs from Joined"
-
-    def _findTranslation(self, obact, objects):
-        """
-        Find a translation from original objects to joined
-        """
-
-        bb_joined = getObjectAABB(obact)
-        bb_orig = MINMAX_INIT()
-
-        for ob in objects:
-            if ob != obact:
-                bb = getObjectAABB(ob)
-                MINMAX_DO(bb_orig[0], bb_orig[1], bb[0])
-                MINMAX_DO(bb_orig[0], bb_orig[1], bb[1])
-
-        return bb_joined[0] - bb_orig[0]
-
-    def _getPolygonMedian(self, me, poly):
-        median = Vector()
-        verts = me.vertices
-
-        for vert_index in poly.vertices:
-            median += verts[vert_index].co
-
-        median /= len(poly.vertices)
-
-        return median
-
-    def _getVertexLookupMap(self, obact, objects):
-        """
-        Create a vertex lookup map from joined object space to original object
-        """
-
-        uv_map = {}
-
-        T = self._findTranslation(obact, objects)
-
-        for obj in objects:
-            if obj != obact:
-                me = obj.data
-                mat = obj.matrix_world.copy()
-                uv_layer = me.uv_layers.active
-
-                for poly in me.polygons:
-                    center = mat * self._getPolygonMedian(me, poly) + T
-                    center_key = center.to_tuple(KEY_PRECISION)
-
-                    for loop_index in poly.loop_indices:
-                        loop = me.loops[loop_index]
-                        vert = me.vertices[loop.vertex_index]
-                        vec = mat * vert.co + T
-
-                        key = (center_key, vec.to_tuple(KEY_PRECISION))
-
-                        uv_map.setdefault(key, []).append((center, vec, (uv_layer, loop_index)))
-
-        return uv_map
-
-    def execute(self, context):
-        obact = context.object
-
-        # Check wether we're working with meshes
-        # other object types are not supported
-        if obact.type != 'MESH':
-            self.report({'ERROR'}, "Only meshes are supported")
-            return {'CANCELLED'}
-
-        objects = context.selected_objects
-
-        for obj in context.selected_objects:
-            if obj.type != 'MESH':
-                self.report({'ERROR'}, "Only meshes are supported")
-                return {'CANCELLED'}
-
-        uv_map = self._getVertexLookupMap(obact, objects)
-
-        me = obact.data
-        mat = obact.matrix_world.copy()
-        uv_layer = me.uv_layers.active
-
-        for poly in me.polygons:
-            center = mat * self._getPolygonMedian(me, poly)
-            center_key = center.to_tuple(KEY_PRECISION)
-
-            for loop_index in poly.loop_indices:
-                loop = me.loops[loop_index]
-                vert = me.vertices[loop.vertex_index]
-                vec = mat * vert.co
-
-                key = (center_key, vec.to_tuple(KEY_PRECISION))
-                check_list = uv_map.get(key)
-
-                if check_list is not None:
-                    new_uv = None
-                    closest_data = None
-
-                    dist = FLT_MAX
-                    for x in check_list:
-                        cur_center, cur_vec, data = x
-
-                        d1 = Vector(cur_center) - Vector(center)
-                        d2 = Vector(cur_vec) - Vector(vec)
-
-                        d = d1.length_squared + d2.length_squared
-
-                        if d < dist:
-                            closest_data = data
-                            dist = d
-
-                    if closest_data is not None:
-                        orig_uv_layer, orig_loop_index = closest_data
-                        new_uv = uv_layer.data[loop_index].uv
-                        orig_uv_layer.data[orig_loop_index].uv = new_uv
-                else:
-                    print("Failed to lookup %r" % (key,))
-
-        return {'FINISHED'}
-
-
-def menu_func(self, context):
-    self.layout.operator("OBJECT_OT_copy_uv_from_joined",
-                         text="Join as UVs (active to other selected)",
-                         icon="PLUGIN")
-
-
-def register():
-    bpy.utils.register_module(__name__)
-
-    bpy.types.VIEW3D_MT_make_links.append(menu_func)
-
-
-def unregister():
-    bpy.utils.unregister_module(__name__)
-
-    bpy.types.VIEW3D_MT_make_links.remove(menu_func)
-
-
-if __name__ == "__main__":
-    register()



More information about the Bf-extensions-cvs mailing list