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 'intern/python/ivexport.py')
-rw-r--r--intern/python/ivexport.py225
1 files changed, 225 insertions, 0 deletions
diff --git a/intern/python/ivexport.py b/intern/python/ivexport.py
new file mode 100644
index 00000000000..85987aad66b
--- /dev/null
+++ b/intern/python/ivexport.py
@@ -0,0 +1,225 @@
+#######################
+# (c) Jan Walter 2000 #
+#######################
+
+# CVS
+# $Author$
+# $Date$
+# $RCSfile$
+# $Revision$
+
+import Blender
+
+class InventorExport:
+ def __init__(self, filename):
+ self.file = open(filename, "w")
+
+ def beginObject(self, object):
+ self.file.write(" Separator {\n")
+
+ def endObject(self, object):
+ self.file.write(" }\n")
+
+ def export(self, scene):
+ print "exporting ..."
+ self.writeHeader()
+ for name in scene.objects:
+ object = Blender.getObject(name)
+ self.beginObject(object)
+ self.writeObject(object)
+ self.endObject(object)
+ self.writeEnd()
+
+ def writeEnd(self):
+ self.file.write("}\n")
+ self.file.close()
+ print "... finished"
+
+ def writeFaces(self, faces, smooth, colors, materials, texture):
+ self.file.write(" IndexedFaceSet {\n")
+ # colors
+ if colors:
+ self.file.write(" vertexProperty VertexProperty {\n")
+ self.file.write(" orderedRGBA [\n")
+ for color in colors[:-1]:
+ r = hex(int(color[0] * 255))
+ if len(r) == 3:
+ r = r + "0"
+ g = hex(int(color[1] * 255))
+ if len(g) == 3:
+ g = g + "0"
+ b = hex(int(color[2] * 255))
+ if len(b) == 3:
+ b = b + "0"
+ colstr = r + g[2:] + b[2:]
+ self.file.write(" %sff,\n" % colstr)
+ color = colors[-1]
+ r = hex(int(color[0] * 255))
+ if len(r) == 3:
+ r = r + "0"
+ g = hex(int(color[1] * 255))
+ if len(g) == 3:
+ g = g + "0"
+ b = hex(int(color[2] * 255))
+ if len(b) == 3:
+ b = b + "0"
+ colstr = r + g[2:] + b[2:]
+ self.file.write(" %sff\n" % colstr)
+ self.file.write(" ]\n")
+ self.file.write(" materialBinding PER_VERTEX_INDEXED\n")
+ self.file.write(" }\n")
+ # coordinates
+ self.file.write(" coordIndex [\n")
+ for face in faces[:-1]:
+ if face[4] != smooth:
+ pass
+ elif face[2] == 0 and face[3] == 0:
+ print "can't export lines at the moment ..."
+ elif face[3] == 0:
+ self.file.write(" %s, %s, %s, -1,\n" %
+ (face[0], face[1], face[2]))
+ else:
+ self.file.write(" %s, %s, %s, %s, -1,\n"%
+ (face[0], face[1], face[2], face[3]))
+ face = faces[-1]
+ if face[4] != smooth:
+ pass
+ elif face[2] == 0 and face[3] == 0:
+ print "can't export lines at the moment ..."
+ elif face[3] == 0:
+ self.file.write(" %s, %s, %s, -1,\n" %
+ (face[0], face[1], face[2]))
+ else:
+ self.file.write(" %s, %s, %s, %s, -1,\n"%
+ (face[0], face[1], face[2], face[3]))
+ self.file.write(" ]\n")
+ # materials
+ if not colors and materials:
+ self.file.write(" materialIndex [\n")
+ for face in faces[:-1]:
+ if face[4] != smooth:
+ pass
+ else:
+ self.file.write(" %s,\n" % face[5])
+ face = faces[-1]
+ if face[4] != smooth:
+ pass
+ else:
+ self.file.write(" %s\n" % face[5])
+ self.file.write(" ]\n")
+ # texture coordinates
+ if texture:
+ self.file.write(" textureCoordIndex [\n")
+ index = 0
+ for face in faces:
+ if face[3] == 0:
+ self.file.write(" " +
+ "%s, %s, %s, -1,\n" %
+ (index, index+1, index+2))
+ else:
+ self.file.write(" " +
+ "%s, %s, %s, %s, -1,\n" %
+ (index, index+1, index+2, index+3))
+ index = index + 4
+ self.file.write(" ]\n")
+ self.file.write(" }\n")
+
+ def writeHeader(self):
+ self.file.write("#Inventor V2.1 ascii\n\n")
+ self.file.write("Separator {\n")
+ self.file.write(" ShapeHints {\n")
+ self.file.write(" vertexOrdering COUNTERCLOCKWISE\n")
+ self.file.write(" }\n")
+
+ def writeMaterials(self, materials):
+ if materials:
+ self.file.write(" Material {\n")
+ self.file.write(" diffuseColor [\n")
+ for name in materials[:-1]:
+ material = Blender.getMaterial(name)
+ self.file.write(" %s %s %s,\n" %
+ (material.R, material.G, material.B))
+ name = materials[-1]
+ material = Blender.getMaterial(name)
+ self.file.write(" %s %s %s\n" %
+ (material.R, material.G, material.B))
+ self.file.write(" ]\n")
+ self.file.write(" }\n")
+ self.file.write(" MaterialBinding {\n")
+ self.file.write(" value PER_FACE_INDEXED\n")
+ self.file.write(" }\n")
+
+ def writeMatrix(self, matrix):
+ self.file.write(" MatrixTransform {\n")
+ self.file.write(" matrix %s %s %s %s\n" %
+ (matrix[0][0], matrix[0][1],
+ matrix[0][2], matrix[0][3]))
+ self.file.write(" %s %s %s %s\n" %
+ (matrix[1][0], matrix[1][1],
+ matrix[1][2], matrix[1][3]))
+ self.file.write(" %s %s %s %s\n" %
+ (matrix[2][0], matrix[2][1],
+ matrix[2][2], matrix[2][3]))
+ self.file.write(" %s %s %s %s\n" %
+ (matrix[3][0], matrix[3][1],
+ matrix[3][2], matrix[3][3]))
+ self.file.write(" }\n")
+
+ def writeNormals(self, normals):
+ self.file.write(" Normal {\n")
+ self.file.write(" vector [\n")
+ for normal in normals[:-1]:
+ self.file.write(" %s %s %s,\n" %
+ (normal[0], normal[1], normal[2]))
+ normal = normals[-1]
+ self.file.write(" %s %s %s\n" %
+ (normal[0], normal[1], normal[2]))
+ self.file.write(" ]\n")
+ self.file.write(" }\n")
+
+ def writeObject(self, object):
+ if object.type == "Mesh":
+ mesh = Blender.getMesh(object.data)
+ self.writeMatrix(object.matrix)
+ self.writeMaterials(object.materials)
+ self.writeTexture(mesh.texture, mesh.texcoords)
+ self.writeVertices(mesh.vertices)
+ self.writeFaces(mesh.faces, 0, mesh.colors, object.materials,
+ mesh.texture)
+ self.writeNormals(mesh.normals)
+ self.writeFaces(mesh.faces, 1, mesh.colors, object.materials,
+ mesh.texture)
+ else:
+ print "can't export %s at the moment ..." % object.type
+
+ def writeTexture(self, texture, texcoords):
+ if texture:
+ self.file.write(" Texture2 {\n")
+ self.file.write(' filename "%s"\n' % texture)
+ self.file.write(" }\n")
+ self.file.write(" TextureCoordinate2 {\n")
+ self.file.write(" point [\n")
+ for texcoord in texcoords:
+ self.file.write(" %s %s,\n" %
+ (texcoord[0], texcoord[1]))
+ self.file.write(" ]\n")
+ self.file.write(" }\n")
+ self.file.write(" TextureCoordinateBinding {\n")
+ self.file.write(" value PER_VERTEX_INDEXED\n")
+ self.file.write(" }\n")
+
+ def writeVertices(self, vertices):
+ self.file.write(" Coordinate3 {\n")
+ self.file.write(" point [\n")
+ for vertex in vertices[:-1]:
+ self.file.write(" %s %s %s,\n" %
+ (vertex[0], vertex[1], vertex[2]))
+ vertex = vertices[-1]
+ self.file.write(" %s %s %s\n" %
+ (vertex[0], vertex[1], vertex[2]))
+ self.file.write(" ]\n")
+ self.file.write(" }\n")
+
+ivexport = InventorExport("test.iv")
+scene = Blender.getCurrentScene()
+ivexport.export(scene)