X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=blender%2Fio_mspgl%2Fmesh.py;h=2cd64236b18a7cec73d54f20034d26c8a52533c7;hb=89d3d10b75a42f86b224feb00b20283af66c0b01;hp=a41cbc1311c8a9c077ff78980ecfb1e48a37b4e3;hpb=dd32f2502f8d090c639df4a34d56d21ccbecac83;p=libs%2Fgl.git diff --git a/blender/io_mspgl/mesh.py b/blender/io_mspgl/mesh.py index a41cbc13..2cd64236 100644 --- a/blender/io_mspgl/mesh.py +++ b/blender/io_mspgl/mesh.py @@ -34,11 +34,18 @@ class Edge: else: return self.faces[0] + def other_vertex(self, v): + if v.index==self.vertices[0].index: + return self.vertices[1] + else: + return self.vertices[0] + class Vertex: def __init__(self, mv): if mv.__class__==Vertex: self._mvert = mv._mvert + self.co = mv.co self.normal = mv.normal self.uvs = mv.uvs[:] self.tan = mv.tan @@ -46,6 +53,8 @@ class Vertex: self.group_weight_scale = mv.group_weight_scale else: self._mvert = mv + self.co = mv.co + self.normal = mv.normal self.uvs = [] self.tan = None self.bino = None @@ -142,6 +151,8 @@ class Mesh: self.assign_texture_units() for f in self.faces: + if len(f.vertices)>4: + raise ValueError("Ngons are not supported") f.vertices = [self.vertices[i] for i in f.vertices] for v in f.vertices: v.faces.append(f) @@ -156,6 +167,8 @@ class Mesh: f.edges.append(e) self.lines = [Line(e) for e in self.edges.values() if not e.faces] + for l in self.lines: + l.vertices = [self.vertices[i] for i in l.vertices] if self.use_auto_smooth: smooth_limit = math.cos(self.auto_smooth_angle) @@ -169,6 +182,10 @@ class Mesh: def __getattr__(self, attr): return getattr(self._mesh, attr) + def transform(self, matrix): + for v in self.vertices: + v.co = matrix*v.co + def splice(self, other): material_map = [] for m in other.materials: @@ -248,26 +265,35 @@ class Mesh: v.index = len(self.vertices) self.vertices.append(v) + v_edges = [] + v_edge_keys = set() for f in g: - for j in range(len(f.edges)): - e = f.edges[j] - - if self.vertices[i] not in e.vertices: + for e in f.edges: + if e.key in v_edge_keys or self.vertices[i] not in e.vertices: continue - if e.other_face(f) not in g and len(e.faces)>=2: - e.faces.remove(f) - e = Edge(e) - f.edges[j] = e - e.faces.append(f) - else: - del self.edges[e.key] + e_faces_in_g = [c for c in e.faces if c in g] + boundary = len(e_faces_in_g)