X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Fmesh.py;h=4403c6a01dd92a2d1b2eff36cf95cd4e9853a120;hb=736a076cf12aca02492eae6c77eff846bde0cdda;hp=91648d28e5b28b1ab6db369586b46d974b0c332e;hpb=b13f1bced27e0ad3e4661e645f6bafed38359120;p=libs%2Fgl.git diff --git a/blender/io_mspgl/mesh.py b/blender/io_mspgl/mesh.py index 91648d28..4403c6a0 100644 --- a/blender/io_mspgl/mesh.py +++ b/blender/io_mspgl/mesh.py @@ -239,7 +239,7 @@ class Mesh: def transform(self, matrix): for v in self.vertices: - v.co = matrix*v.co + v.co = matrix@v.co def splice(self, other): if len(self.uv_layers)!=len(other.uv_layers): @@ -275,8 +275,7 @@ class Mesh: self.faces += other.faces for f in self.faces[offset:]: f.index += offset - f.loop_start += loop_offset - f.loop_indices = range(f.loop_start, f.loop_start+f.loop_total) + f.loop_indices = range(f.loop_indices.start+offset, f.loop_indices.stop+offset) if other.materials: f.material_index = material_map[f.material_index] @@ -395,7 +394,7 @@ class Mesh: def apply_material_map(self, material_map): for m in self.materials: - if m not in material_map.materials: + if m.name not in material_map.material_names: raise Exception("Material map is not compatible with Mesh") if self.use_uv=='NONE': @@ -420,7 +419,7 @@ class Mesh: def prepare_uv(self, progress): # Form a list of UV layers referenced by materials with the array atlas # property set - array_uv_layers = [t.uv_layer for m in self.materials if m.array_atlas for t in m.texture_slots if t and t.texture_coords=='UV'] + array_uv_layers = [] #[t.uv_layer for m in self.materials if m.array_atlas for t in m.texture_slots if t and t.texture_coords=='UV'] array_uv_layers = [u for u in self.uv_layers if u.name in array_uv_layers] if array_uv_layers: @@ -779,11 +778,12 @@ def create_mesh_from_object(context, obj, progress, *, material_map=None): if c.type=="MESH" and c.compound: objs.append((c, m*c.matrix_local)) + dg = context.evaluated_depsgraph_get() + mesh = None - bmeshes = [] for o, m in objs: - bmesh = o.to_mesh(context.scene, True, "PREVIEW") - bmeshes.append(bmesh) + eval_obj = o.evaluated_get(dg) + bmesh = eval_obj.to_mesh() # Object.to_mesh does not copy custom properties bmesh.winding_test = o.data.winding_test @@ -798,6 +798,10 @@ def create_mesh_from_object(context, obj, progress, *, material_map=None): me = Mesh(bmesh) me.transform(m) + for i, s in enumerate(eval_obj.material_slots): + if s.link=='OBJECT': + me.materials[i] = s.material + if mesh: mesh.splice(me) else: @@ -822,8 +826,6 @@ def create_mesh_from_object(context, obj, progress, *, material_map=None): # Discard the temporary Blender meshes after making sure there's no # references to the data mesh.drop_references() - for m in bmeshes: - bpy.data.meshes.remove(m) progress.pop_task()