Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'io_mesh_stl/blender_utils.py')
-rw-r--r--io_mesh_stl/blender_utils.py50
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())