diff options
author | M Bouchard Guillaume <guillaume.bouchard@liris.cnrs.fr> | 2010-04-17 16:28:49 +0400 |
---|---|---|
committer | M Bouchard Guillaume <guillaume.bouchard@liris.cnrs.fr> | 2010-04-17 16:28:49 +0400 |
commit | 09095f9e6230127c659c938640634f80d1148ba8 (patch) | |
tree | b85067cf7113843891e0818f47945bfd6af642d0 /io_mesh_stl/blender_utils.py | |
parent | 83996ddbc731d5ec56d8bb941c3b5da7bddb023f (diff) |
Import original io_mesh_stl from Guillaum HG
Diffstat (limited to 'io_mesh_stl/blender_utils.py')
-rw-r--r-- | io_mesh_stl/blender_utils.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/io_mesh_stl/blender_utils.py b/io_mesh_stl/blender_utils.py new file mode 100644 index 00000000..1bade61d --- /dev/null +++ b/io_mesh_stl/blender_utils.py @@ -0,0 +1,50 @@ +import bpy + + +def create_and_link_mesh(name, faces, points): + ''' + Create a blender mesh and object called name from a list of + *points* and *faces* and link it in the current scene. + ''' + + mesh = bpy.data.meshes.new(name) + mesh.from_pydata(points, [], faces) + + ob = bpy.data.objects.new(name, mesh) + bpy.context.scene.objects.link(ob) + + # update mesh to allow proper display + mesh.update() + + +def faces_from_mesh(ob, apply_modifier=False, triangulate=True): + ''' + From an object, return a generator over a list of faces. + + Each faces is a list of his vertexes. Each vertex is a tuple of + his coordinate. + + apply_modifier + Apply the preview modifier to the returned liste + + triangulate + Split the quad into two triangles + ''' + + # get the modifiers + mesh = ob.create_mesh(bpy.context.scene, + True, "PREVIEW") if apply_modifier else ob.data + + def iter_face_index(): + ''' + From a list of faces, return the face triangulated if needed. + ''' + for face in mesh.faces: + if triangulate and len(face.verts) == 4: + yield face.verts[:3] + yield face.verts[2:] + [face.verts[0]] + else: + yield list(face.verts) + + return ([tuple(mesh.verts[index].co) + for index in indexes] for indexes in iter_face_index()) |