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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts/mod_meshtools.py')
-rw-r--r--release/scripts/mod_meshtools.py178
1 files changed, 178 insertions, 0 deletions
diff --git a/release/scripts/mod_meshtools.py b/release/scripts/mod_meshtools.py
new file mode 100644
index 00000000000..dbcdab513d5
--- /dev/null
+++ b/release/scripts/mod_meshtools.py
@@ -0,0 +1,178 @@
+# +---------------------------------------------------------+
+# | Copyright (c) 2001 Anthony D'Agostino |
+# | http://ourworld.compuserve.com/homepages/scorpius |
+# | scorpius@compuserve. |
+# | September 28, 2002 |
+# | Released under the Blender Artistic Licence (BAL) |
+# | Import Export Suite v0.5 |
+# +---------------------------------------------------------+
+# | Common Functions For All Modules |
+# +---------------------------------------------------------+
+
+import Blender
+import sys#, random, operator
+import mod_flags
+
+try:
+ import random, operator
+# ===================================
+# ==== Append Faces To Face List ====
+# ===================================
+ def append_faces(mesh, faces, facesuv, uvcoords):
+ r = random.randrange(200, 255, 50)
+ g = random.randrange(100, 200, 50)
+ b = random.randrange(0, 100, 50)
+ for i in range(len(faces)):
+ if not i%100 and mod_flags.show_progress: Blender.Window.DrawProgressBar(float(i)/len(faces), "Generating Faces")
+ numfaceverts=len(faces[i])
+ if numfaceverts <= 4: # This face is a triangle or quad
+ face = Blender.NMesh.Face()
+ for j in range(numfaceverts):
+ index = faces[i][j]
+ face.v.append(mesh.verts[index])
+ if len(uvcoords) > 1:
+ uvidx = facesuv[i][j]
+ face.uv.append(uvcoords[uvidx])
+ face.mode = 0
+ #face.col = [Blender.NMesh.Col(r, g, b)]*4 # Random color
+ face.col = [Blender.NMesh.Col()]*4
+ mesh.faces.append(face)
+ else: # Triangulate n-sided convex polygon.
+ a, b, c = 0, 1, 2 # Indices of first triangle.
+ for j in range(numfaceverts-2): # Number of triangles in polygon.
+ face = Blender.NMesh.Face()
+ face.v.append(mesh.verts[faces[i][a]])
+ face.v.append(mesh.verts[faces[i][b]])
+ face.v.append(mesh.verts[faces[i][c]])
+ b = c; c += 1
+ mesh.faces.append(face)
+ #face.smooth = 1
+
+# =====================================
+# ==== Append Verts to Vertex List ====
+# =====================================
+ def append_verts(mesh, verts, normals):
+ #print "Number of normals:", len(normals)
+ #print "Number of verts :", len(verts)
+ for i in range(len(verts)):
+ if not i%100 and mod_flags.show_progress: Blender.Window.DrawProgressBar(float(i)/len(verts), "Generating Verts")
+ x, y, z = verts[i]
+ mesh.verts.append(Blender.NMesh.Vert(x, y, z))
+ if normals:
+ mesh.verts[i].no[0] = normals[i][0]
+ mesh.verts[i].no[1] = normals[i][1]
+ mesh.verts[i].no[2] = normals[i][2]
+
+# =============================
+# ==== Create Blender Mesh ====
+# =============================
+ def create_mesh(verts, faces, objname, facesuv=[], uvcoords=[], normals=[]):
+ if normals: normal_flag = 0
+ else: normal_flag = 1
+ mesh = Blender.NMesh.GetRaw()
+ append_verts(mesh, verts, normals)
+ append_faces(mesh, faces, facesuv, uvcoords)
+ if not mod_flags.overwrite_mesh_name:
+ objname = versioned_name(objname)
+ Blender.NMesh.PutRaw(mesh, objname, normal_flag) # Name the Mesh
+ Blender.Object.GetSelected()[0].name=objname # Name the Object
+ Blender.Redraw()
+
+except ImportError: pass
+
+# ================================
+# ==== Increment Name Version ====
+# ================================
+def versioned_name(objname):
+ existing_names = []
+ for object in Blender.Object.Get():
+ existing_names.append(object.name)
+ existing_names.append(object.data.name)
+ if objname in existing_names: # don't over-write other names
+ try:
+ name, ext = objname.split('.')
+ except ValueError:
+ name, ext = objname, ''
+ try:
+ num = int(ext)
+ root = name
+ except ValueError:
+ root = objname
+ for i in xrange(1, 1000):
+ objname = "%s.%03d" % (root, i)
+ if objname not in existing_names:
+ break
+ return objname
+
+# =============================
+# ==== Print Text In A Box ====
+# =============================
+def print_boxed(text):
+ lines = text.splitlines()
+ maxlinelen = max(map(len, lines))
+ print '+-' + '-'*maxlinelen + '-+'
+ for line in lines: print '| ' + line.ljust(maxlinelen) + ' |'
+ print '+-' + '-'*maxlinelen + '-+'
+
+ print '\a\r', # beep when done
+
+# =================================================
+# ==== Get Euler Angles From A Rotation Matrix ====
+# =================================================
+#def mat2euler(mat):
+# angle_y = -math.asin(mat[0][2])
+# c = math.cos(angle_y)
+# if math.fabs(c) > 0.005:
+# angle_x = math.atan2(mat[1][2]/c, mat[2][2]/c)
+# angle_z = math.atan2(mat[0][1]/c, mat[0][0]/c)
+# else:
+# angle_x = 0.0
+# angle_z = -math.atan2(mat[1][0], mat[1][1])
+# return (angle_x, angle_y, angle_z)
+
+# ============================
+# ==== Transpose A Matrix ====
+# ============================
+def transpose(A):
+ S = len(A)
+ T = len(A[0])
+ B = [[None]*S for i in range(T)]
+ for i in range(T):
+ for j in range(S):
+ B[i][j] = A[j][i]
+ return B
+
+#def append_ntimes(Seq, N):
+# Seq = reduce(operator.add, Seq) # Flatten once
+# if N == 1: return Seq
+# return append_ntimes(Seq, N-1)
+
+
+
+# print "mesh.has_col ", mesh.has_col
+# print "mesh.hasVertexColours()", mesh.hasVertexColours()
+# print "mesh.hasFaceUV() ", mesh.hasFaceUV()
+# print "mesh.has_uvco ", mesh.has_uvco
+
+# # =============================
+# # ==== Create Blender Mesh ====
+# # =============================
+# def create_mesh_old(verts, faces, objname):
+# mesh = Blender.NMesh.GetRaw()
+# # === Vertex List ===
+# for i in range(len(verts)):
+# x, y, z = verts[i]
+# mesh.verts.append(Blender.NMesh.Vert(x, y ,z))
+# # === Face List ===
+# for i in range(len(faces)):
+# face = Blender.NMesh.Face()
+# for j in range(len(faces[i])):
+# index = faces[i][j]
+# face.v.append(mesh.verts[index])
+# mesh.faces.append(face)
+# # === Name the Object ===
+# Blender.NMesh.PutRaw(mesh, objname)
+# object = Blender.Object.GetSelected()
+# object[0].name=objname
+# Blender.Redraw()
+