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>2018-05-31 17:45:07 +0300
committerEugenio Pignataro <info@oscurart.com.ar>2018-05-31 17:45:07 +0300
commitff32abad7ca19de3e182e82e4e4ac340e0f5f1ba (patch)
tree0f1f3397d331906c1cd5ff6d52c55304ebb1580a
parentf6e3238de3e4d3526c64023b488a3d0ac177ae88 (diff)
Overlap Uvs rewrite
-rw-r--r--oscurart_tools/oscurart_meshes.py80
1 files changed, 22 insertions, 58 deletions
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'}