[Bf-extensions-cvs] [ff32abad] master: Overlap Uvs rewrite
Eugenio Pignataro
noreply at git.blender.org
Thu May 31 16:45:14 CEST 2018
Commit: ff32abad7ca19de3e182e82e4e4ac340e0f5f1ba
Author: Eugenio Pignataro
Date: Thu May 31 11:45:07 2018 -0300
Branches: master
https://developer.blender.org/rBAff32abad7ca19de3e182e82e4e4ac340e0f5f1ba
Overlap Uvs rewrite
===================================================================
M oscurart_tools/oscurart_meshes.py
===================================================================
diff --git a/oscurart_tools/oscurart_meshes.py b/oscurart_tools/oscurart_meshes.py
index 3282c66a..855a1b77 100644
--- a/oscurart_tools/oscurart_meshes.py
+++ b/oscurart_tools/oscurart_meshes.py
@@ -348,57 +348,27 @@ class OscObjectToMesh(Operator):
# ----------------------------- OVERLAP UV -------------------------------
-def DefOscOverlapUv(valpresicion):
- inicio = time.time()
- mode = bpy.context.object.mode
- bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
-
- rd = valpresicion
- ob = bpy.context.object
- absco = lambda x: (abs(round(x[0], rd)), round(x[1], rd), round(x[2], rd))
- rounder = lambda x: (round(x[0], rd), round(x[1], rd), round(x[2], rd))
-
- # vertice a vertex
- vertvertex = {}
- for vert in ob.data.loops:
- vertvertex.setdefault(vert.vertex_index, []).append(vert.index)
-
- vertexvert = {}
- for vertex in ob.data.loops:
- vertexvert[vertex.index] = vertex.vertex_index
-
- # posicion de cada vertice y cada face
- vertloc = {rounder(vert.co[:]): vert for vert in ob.data.vertices}
- faceloc = {rounder(poly.center[:]): poly for poly in ob.data.polygons}
-
- # relativo de cada vertice y cada face
- verteqind = {vert.index: vertloc.get(
- absco(co),
- vertloc[co]).index for co,
- vert in vertloc.items() if co[0] <= 0}
- polyeq = {face: faceloc.get(
- absco(center),
- faceloc[center]) for center,
- face in faceloc.items() if center[0] <= 0}
-
- # loops in faces
- lif = {poly: [i for i in poly.loop_indices] for poly in ob.data.polygons}
-
- # acomoda
- for l, r in polyeq.items():
- if l.select:
- for lloop in lif[l]:
- for rloop in lif[r]:
- if (verteqind[vertexvert[lloop]] == vertexvert[rloop] and
- ob.data.uv_layers.active.data[rloop].select):
-
- ob.data.uv_layers.active.data[
- lloop].uv = ob.data.uv_layers.active.data[
- rloop].uv
-
- bpy.ops.object.mode_set(mode=mode, toggle=False)
-
- print("Time elapsed: %4s seconds" % (time.time() - inicio))
+def DefOscOverlapUv():
+ bm = bmesh.from_edit_mesh(bpy.context.object.data)
+ faces = [face for face in bm.faces if face.select]
+
+ faceDict = {}
+ faceReverse = []
+ bm.select_mode = {'FACE'}
+ for face in faces:
+ bpy.ops.mesh.select_all(action= "DESELECT")
+ face.select = True
+ bpy.ops.mesh.select_mirror()
+ faceDict[face.index] = [mirrorface for mirrorface in bm.faces if mirrorface.select][0].index
+ faceReverse.append([mirrorface for mirrorface in bm.faces if mirrorface.select][0])
+
+ for selFace,mirrorFace in faceDict.items():
+ for loop,mirrorLoop in zip(bm.faces[selFace].loops,bm.faces[mirrorFace].loops):
+ mirrorLoop.copy_from(loop)
+
+ #invierto direcciones
+ bmesh.ops.reverse_uvs(bm, faces=[f for f in faceReverse])
+ bmesh.ops.rotate_uvs(bm, faces=[f for f in faceReverse])
class OscOverlapUv(Operator):
@@ -413,15 +383,9 @@ class OscOverlapUv(Operator):
return (context.active_object is not None and
context.active_object.type == 'MESH')
- presicion = IntProperty(
- default=4,
- min=1,
- max=10,
- name="precision"
- )
def execute(self, context):
- DefOscOverlapUv(self.presicion)
+ DefOscOverlapUv()
return {'FINISHED'}
More information about the Bf-extensions-cvs
mailing list