X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Fmesh.py;h=d9ae6b760ff545c8043269bb9e120b597f8b05f7;hb=e1d07383b29e8581230b50f45606192d1f21f5dd;hp=f5665256b2eeced61c654abc329d4849e45d82cf;hpb=9ab994ab4fedf938cbbdfe1ec1415e6c91844d21;p=libs%2Fgl.git diff --git a/blender/io_mspgl/mesh.py b/blender/io_mspgl/mesh.py index f5665256..d9ae6b76 100644 --- a/blender/io_mspgl/mesh.py +++ b/blender/io_mspgl/mesh.py @@ -56,6 +56,7 @@ class Vertex: self.index = vertex.index self.co = mathutils.Vector(vertex.co) self.normal = mathutils.Vector(vertex.normal) + self.color = None self.flag = False self.edges = [] self.faces = [] @@ -69,8 +70,12 @@ class Vertex: class VertexGroup: def __init__(self, group): - self.group = group.group - self.weight = group.weight + if group: + self.group = group.group + self.weight = group.weight + else: + self.group = 0 + self.weight = 0.0 class Face: @@ -142,6 +147,12 @@ class UvLayer: self.hidden = True +class ColorLayer: + def __init__(self, l): + self.name = l.name + self.colors = [c.color[:] for c in l.data] + + class Mesh: def __init__(self, mesh): self.name = mesh.name @@ -155,8 +166,9 @@ class Mesh: # Clone basic data self.vertices = [Vertex(v) for v in mesh.vertices] - for v in self.vertices: - v.groups = [VertexGroup(g) for g in v.groups] + if self.vertex_groups: + for v in self.vertices: + v.groups = [VertexGroup(g) for g in v.groups] self.faces = [Face(f) for f in mesh.polygons] self.edges = [Edge(e) for e in mesh.edges] @@ -165,6 +177,7 @@ class Mesh: self.use_auto_smooth = mesh.use_auto_smooth self.auto_smooth_angle = mesh.auto_smooth_angle + self.max_groups_per_vertex = mesh.max_groups_per_vertex # Clone only the desired UV layers if mesh.use_uv=='NONE' or not mesh.uv_layers: @@ -187,6 +200,10 @@ class Mesh: if self.uv_layers[0].unit!=0: self.uv_layers = [] + self.colors = None + if mesh.vertex_colors: + self.colors = ColorLayer(mesh.vertex_colors[0]) + # Rewrite links between elements to point to cloned data, or create links # where they don't exist edge_map = {e.key: e for e in self.edges} @@ -242,6 +259,15 @@ class Mesh: for i, u in enumerate(self.uv_layers): u.uvs += other.uv_layers[i].uvs + if self.colors: + if other.colors: + self.colors.colors += other.colors.colors + else: + self.colors.colors += [(1.0, 1.0, 1.0, 1.0)]*len(other.loops) + elif other.colors: + self.colors = ColorLayer(other.colors.name) + self.colors.colors = [(1.0, 1.0, 1.0, 1.0)]*len(self.loops)+other.colors.colors + offset = len(self.vertices) self.vertices += other.vertices for v in self.vertices[offset:]: @@ -351,6 +377,9 @@ class Mesh: progress.pop_task() def prepare_vertex_groups(self, obj): + if not self.vertex_groups: + return + for v in self.vertices: if v.groups: weight_sum = sum(g.weight for g in v.groups) @@ -358,6 +387,8 @@ class Mesh: weight_scale = weight_sum/sum(g.weight for g in v.groups) for g in v.groups: g.weight *= weight_scale + while len(v.groups)