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:
authorEugenio Pignataro <info@oscurart.com.ar>2020-07-16 17:36:29 +0300
committerEugenio Pignataro <info@oscurart.com.ar>2020-07-16 17:36:29 +0300
commitc279fa91c16cd53e9984416a6ac554850589cfca (patch)
tree2413c3dce2655f95cc556235cd92349e26b412fa /oscurart_tools/mesh/overlap_uvs.py
parent38dfced7bba68b38b17322c0ea2acf18f27c1804 (diff)
Add Copy Paste uv islands
Diffstat (limited to 'oscurart_tools/mesh/overlap_uvs.py')
-rw-r--r--oscurart_tools/mesh/overlap_uvs.py96
1 files changed, 44 insertions, 52 deletions
diff --git a/oscurart_tools/mesh/overlap_uvs.py b/oscurart_tools/mesh/overlap_uvs.py
index d0d13752..c5bbab05 100644
--- a/oscurart_tools/mesh/overlap_uvs.py
+++ b/oscurart_tools/mesh/overlap_uvs.py
@@ -27,66 +27,57 @@ from bpy.props import (
FloatProperty,
EnumProperty,
)
-import os
+
+
import bmesh
-C = bpy.context
-D = bpy.data
-
-
-
# -------------------------- OVERLAP UV ISLANDS
def defCopyUvsIsland(self, context):
- bpy.ops.object.mode_set(mode="OBJECT")
- global obLoop
- global islandFaces
- obLoop = []
- islandFaces = []
- for poly in bpy.context.object.data.polygons:
- if poly.select:
- islandFaces.append(poly.index)
- for li in poly.loop_indices:
- obLoop.append(li)
-
- bpy.ops.object.mode_set(mode="EDIT")
+ global islandSet
+ islandSet = {}
+ islandSet["Loop"] = []
+
+ bpy.context.scene.tool_settings.use_uv_select_sync = True
+ bpy.ops.uv.select_linked()
+ bm = bmesh.from_edit_mesh(bpy.context.object.data)
+ uv_lay = bm.loops.layers.uv.active
+ faceSel = 0
+ for face in bm.faces:
+ if face.select:
+ faceSel +=1
+ for loop in face.loops:
+ islandSet["Loop"].append(loop[uv_lay].uv.copy())
+ islandSet["Size"] = faceSel
def defPasteUvsIsland(self, uvOffset, rotateUv,context):
- bpy.ops.object.mode_set(mode="OBJECT")
- selPolys = [poly.index for poly in bpy.context.object.data.polygons if poly.select]
-
- for island in selPolys:
- bpy.ops.object.mode_set(mode="EDIT")
+ bm = bmesh.from_edit_mesh(bpy.context.object.data)
+ bpy.context.scene.tool_settings.use_uv_select_sync = True
+ pickedFaces = [face for face in bm.faces if face.select]
+ for face in pickedFaces:
bpy.ops.mesh.select_all(action="DESELECT")
- bpy.ops.object.mode_set(mode="OBJECT")
- bpy.context.object.data.polygons[island].select = True
- bpy.ops.object.mode_set(mode="EDIT")
- bpy.ops.mesh.select_linked()
- bpy.ops.object.mode_set(mode="OBJECT")
- TobLoop = []
- TislandFaces = []
- for poly in bpy.context.object.data.polygons:
- if poly.select:
- TislandFaces.append(poly.index)
- for li in poly.loop_indices:
- TobLoop.append(li)
-
- for source,target in zip(range(min(obLoop),max(obLoop)+1),range(min(TobLoop),max(TobLoop)+1)):
- bpy.context.object.data.uv_layers.active.data[target].uv = bpy.context.object.data.uv_layers.active.data[source].uv + Vector((uvOffset,0))
-
- bpy.ops.object.mode_set(mode="EDIT")
-
- if rotateUv:
- bpy.ops.object.mode_set(mode="OBJECT")
- for poly in selPolys:
- bpy.context.object.data.polygons[poly].select = True
- bpy.ops.object.mode_set(mode="EDIT")
- bm = bmesh.from_edit_mesh(bpy.context.object.data)
- bmesh.ops.reverse_uvs(bm, faces=[f for f in bm.faces if f.select])
- bmesh.ops.rotate_uvs(bm, faces=[f for f in bm.faces if f.select])
- #bmesh.update_edit_mesh(bpy.context.object.data, tessface=False, destructive=False)
-
-
+ face.select=True
+ bmesh.update_edit_mesh(bpy.context.object.data)
+ bpy.ops.uv.select_linked()
+ uv_lay = bm.loops.layers.uv.active
+ faceSel = 0
+ for face in bm.faces:
+ if face.select:
+ faceSel +=1
+ i = 0
+ if faceSel == islandSet["Size"]:
+ for face in bm.faces:
+ if face.select:
+ for loop in face.loops:
+ loop[uv_lay].uv = islandSet["Loop"][i] if uvOffset == False else islandSet["Loop"][i]+Vector((1,0))
+ i += 1
+ else:
+ print("the island have a different size of geometry")
+
+ if rotateUv:
+ bpy.ops.object.mode_set(mode="EDIT")
+ bmesh.ops.reverse_uvs(bm, faces=[f for f in bm.faces if f.select])
+ bmesh.ops.rotate_uvs(bm, faces=[f for f in bm.faces if f.select])
class CopyUvIsland(Operator):
"""Copy Uv Island"""
@@ -119,6 +110,7 @@ class PasteUvIsland(Operator):
name="Rotate Uv Corner",
default=False
)
+
@classmethod
def poll(cls, context):
return (context.active_object is not None and