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.py53
1 files changed, 53 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..76dc86b9
--- /dev/null
+++ b/io_mesh_stl/blender_utils.py
@@ -0,0 +1,53 @@
+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
+ try:
+ mesh = ob.create_mesh(bpy.context.scene,
+ apply_modifier, "PREVIEW")
+ except SystemError:
+ return ()
+
+ 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.vertices) == 4:
+ yield face.vertices[:3]
+ yield face.vertices[2:] + [face.vertices[0]]
+ else:
+ yield list(face.vertices)
+
+ return ([tuple(ob.matrix_world * mesh.vertices[index].co)
+ for index in indexes] for indexes in iter_face_index())