diff options
author | mano-wii <germano.costa@ig.com.br> | 2019-02-06 08:10:37 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2019-02-06 08:10:37 +0300 |
commit | afd211e1089fecb4ce6ff01c3967673e999dc1d7 (patch) | |
tree | 8a9a8c82f7f12c41fe50367e3f0dbd48dc5c5dc4 /mesh_snap_utilities_line | |
parent | 38a7416a66433fe001b0a6ca2941141e691944d8 (diff) |
mesh_snap_utilities_line: Fix error message if object has no face
Diffstat (limited to 'mesh_snap_utilities_line')
-rw-r--r-- | mesh_snap_utilities_line/snap_context_l/mesh_drawing.py | 95 |
1 files changed, 49 insertions, 46 deletions
diff --git a/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py b/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py index b8e61799..da47fca7 100644 --- a/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py +++ b/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py @@ -34,7 +34,7 @@ def get_mesh_vert_co_array(me): me.vertices.foreach_get("co", verts_co) verts_co.shape = (-1, 3) return verts_co - return None + return () def get_bmesh_vert_co_array(bm): @@ -43,7 +43,7 @@ def get_bmesh_vert_co_array(bm): import numpy as np return np.array([v.co for v in bm.verts], 'f4') - return None + return () def get_mesh_tri_verts_array(me): @@ -56,32 +56,35 @@ def get_mesh_tri_verts_array(me): me.loop_triangles.foreach_get("vertices", tris) tris.shape = (-1, 3) return tris - return None + return () def get_bmesh_tri_verts_array(bm): - import numpy as np + if bm.faces: + import numpy as np - l_tri_layer = bm.faces.layers.int.get("l_tri") - if l_tri_layer is None: - l_tri_layer = bm.faces.layers.int.new("l_tri") - - ltris = bm.calc_loop_triangles() - tris = np.empty((len(ltris), 3), 'i4') - i = 0 - last_face = bm.faces[-1] - for ltri in ltris: - face = ltri[0].face - if not face.hide: - tris[i] = ltri[0].vert.index, ltri[1].vert.index, ltri[2].vert.index - if last_face != face: - last_face = face - face[l_tri_layer] = i - i += 1 - if i: - tris.resize((i, 3), refcheck=False) - return tris - return None + l_tri_layer = bm.faces.layers.int.get("l_tri") + if l_tri_layer is None: + l_tri_layer = bm.faces.layers.int.new("l_tri") + + ltris = bm.calc_loop_triangles() + tris = np.empty((len(ltris), 3), 'i4') + i = 0 + + bm.faces.ensure_lookup_table() + last_face = bm.faces[-1] + for ltri in ltris: + face = ltri[0].face + if not face.hide: + tris[i] = ltri[0].vert.index, ltri[1].vert.index, ltri[2].vert.index + if last_face != face: + last_face = face + face[l_tri_layer] = i + i += 1 + if i: + tris.resize((i, 3), refcheck=False) + return tris + return () def get_mesh_edge_verts_array(me): @@ -93,7 +96,7 @@ def get_mesh_edge_verts_array(me): me.edges.foreach_get("vertices", edge_verts) edge_verts.shape = tot_edges, 2 return edge_verts - return None + return () def get_bmesh_edge_verts_array(bm): @@ -102,7 +105,7 @@ def get_bmesh_edge_verts_array(bm): if edges: import numpy as np return np.array(edges, 'i4') - return None + return () def get_mesh_loosevert_array(me, edges): @@ -115,7 +118,7 @@ def get_mesh_loosevert_array(me, edges): verts = verts[mask] if len(verts): return verts - return None + return () def get_bmesh_loosevert_array(bm): @@ -123,7 +126,7 @@ def get_bmesh_loosevert_array(bm): if looseverts: import numpy as np return np.array(looseverts, 'i4') - return None + return () class _Mesh_Arrays(): @@ -174,7 +177,7 @@ class _Mesh_Arrays(): class GPU_Indices_Mesh(): __slots__ = ( - "obj", + "ob_data", "draw_tris", "draw_edges", "draw_verts", @@ -231,10 +234,10 @@ class GPU_Indices_Mesh(): def __init__(self, obj, draw_tris, draw_edges, draw_verts): - self.obj = obj + self.ob_data = obj.data - if obj.data in GPU_Indices_Mesh._Hash: - src = GPU_Indices_Mesh._Hash[obj.data] + if self.ob_data in GPU_Indices_Mesh._Hash: + src = GPU_Indices_Mesh._Hash[self.ob_data] dst = self dst.draw_tris = src.draw_tris @@ -250,10 +253,10 @@ class GPU_Indices_Mesh(): dst.users = src.users dst.users.append(self) - update = obj.type == 'MESH' and obj.data.is_editmode + update = False else: - GPU_Indices_Mesh._Hash[obj.data] = self + GPU_Indices_Mesh._Hash[self.ob_data] = self self.users = [self] update = True; @@ -273,9 +276,9 @@ class GPU_Indices_Mesh(): self.draw_tris = False self.draw_edges = False self.draw_verts = False - self.tri_verts = None - self.edge_verts = None - self.looseverts = None + self.tri_verts = () + self.edge_verts = () + self.looseverts = () return ## Create VBO for vertices ## @@ -293,7 +296,7 @@ class GPU_Indices_Mesh(): vbo.attr_fill(0, data = self.verts_co) ## Create Batch for Tris ## - if self.tri_verts is not None: + if len(self.tri_verts) > 0: ebo = gpu.types.GPUIndexBuf(type = "TRIS", seq = self.tri_verts) self.batch_tris = gpu.types.GPUBatch(type = "TRIS", buf = vbo, elem = ebo) self.batch_tris.program_set(self.shader) @@ -302,7 +305,7 @@ class GPU_Indices_Mesh(): self.batch_tris = None ## Create Batch for Edges ## - if self.edge_verts is not None: + if len(self.edge_verts) > 0: ebo = gpu.types.GPUIndexBuf(type = "LINES", seq = self.edge_verts) self.batch_edges = gpu.types.GPUBatch(type = "LINES", buf = vbo, elem = ebo) self.batch_edges.program_set(self.shader) @@ -311,7 +314,7 @@ class GPU_Indices_Mesh(): self.batch_edges = None ## Create Batch for Loose Verts ## - if self.looseverts is not None: + if len(self.looseverts) > 0: ebo = gpu.types.GPUIndexBuf(type = "POINTS", seq = self.looseverts) self.batch_lverts = gpu.types.GPUBatch(type = "POINTS", buf = vbo, elem = ebo) self.batch_lverts.program_set(self.shader) @@ -335,9 +338,9 @@ class GPU_Indices_Mesh(): def set_draw_mode(self, draw_tris, draw_edges, draw_verts): - self.draw_tris = draw_tris and self.tri_verts is not None - self.draw_edges = draw_edges and self.edge_verts is not None - self.draw_verts = draw_verts and self.looseverts is not None + self.draw_tris = draw_tris and len(self.tri_verts) > 0 + self.draw_edges = draw_edges and len(self.edge_verts) > 0 + self.draw_verts = draw_verts and len(self.looseverts) > 0 def Draw(self, index_offset, depth_offset = -0.00005): @@ -387,8 +390,8 @@ class GPU_Indices_Mesh(): return self.looseverts[index] def free(self): - if len(self.users) == 1: - GPU_Indices_Mesh._Hash.pop(self.obj.data) + self.users.remove(self) + if len(self.users) == 0: del self.batch_tris del self.batch_edges del self.batch_lverts @@ -396,8 +399,8 @@ class GPU_Indices_Mesh(): del self.tri_verts del self.edge_verts del self.looseverts + GPU_Indices_Mesh._Hash.pop(self.ob_data) - self.users.remove(self) #print('mesh_del', self.obj.name) |