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/objexport')
-rw-r--r--intern/python/objexport/BlendImport.py157
-rw-r--r--intern/python/objexport/objimport.py119
2 files changed, 276 insertions, 0 deletions
diff --git a/intern/python/objexport/BlendImport.py b/intern/python/objexport/BlendImport.py
new file mode 100644
index 00000000000..d72370f783f
--- /dev/null
+++ b/intern/python/objexport/BlendImport.py
@@ -0,0 +1,157 @@
+#! /usr/bin/env python
+
+#######################
+# (c) Jan Walter 2000 #
+#######################
+
+# CVS
+# $Author$
+# $Date$
+# $RCSfile$
+# $Revision$
+
+TAB = " "
+
+vertices = []
+vertexNormals = []
+faces = []
+materials = []
+switchMaterial = []
+currentMaterial = []
+materialIndex = 0
+
+def addVertex(x, y, z):
+ global vertices
+ vertices.append([x, y, z])
+ return len(vertices)
+
+def addVertexNormal(i, j, k):
+ global vertexNormals
+ vertexNormals.append([i, j, k])
+ return len(vertexNormals)
+
+def addFace(vi, ti, ni):
+ global faces
+ faces.append([vi, ti, ni])
+ return len(faces)
+
+def addMaterial(name, Kd, Ks, Ka):
+ global materials
+ materials.append([name, Kd, Ks, Ka])
+ return len(materials)
+
+def findMaterial(name):
+ global materials
+ for material in materials:
+ if material[0] == name:
+ return material
+
+def setCurrentMaterial(name):
+ global switchMaterial, faces, currentMaterial
+ switchMaterial.append(len(faces))
+ currentMaterial.append(name)
+
+class OpenInventor:
+ def export(self, filename, useNormals = 1, useMaterials = 1):
+ global vertices, vertexNormals, faces, materials, switchMaterial
+ global currentMaterial, materialIndex
+ file = open(filename, "w")
+ file.write("#Inventor V2.1 ascii\n\n")
+ file.write("Separator {\n")
+ ############
+ # vertices #
+ ############
+ file.write("%sCoordinate3 {\n" % (TAB, ))
+ file.write("%spoint [ \n" % (TAB*2, ))
+ for i in xrange(len(vertices)-1):
+ x, y, z = vertices[i]
+ file.write("%s %s %s %s,\n" % (TAB*2, x, y, z))
+ x, y, z = vertices[i+1]
+ file.write("%s %s %s %s\n" % (TAB*2, x, y, z))
+ file.write("%s ] \n" % (TAB*2, ))
+ file.write("%s}\n" % (TAB, ))
+ ###########
+ # normals #
+ ###########
+ if useNormals:
+ file.write("%sNormal {\n" % (TAB, ))
+ file.write("%svector [ \n" % (TAB*2, ))
+ for i in xrange(len(vertexNormals)-1):
+ x, y, z = vertexNormals[i]
+ file.write("%s %s %s %s,\n" % (TAB*2, x, y, z))
+ x, y, z = vertexNormals[i-1]
+ file.write("%s %s %s %s\n" % (TAB*2, x, y, z))
+ file.write("%s ] \n" % (TAB*2, ))
+ file.write("%s}\n" % (TAB, ))
+ #########
+ # faces #
+ #########
+ switchMaterial.append(len(faces))
+ for si in xrange(len(switchMaterial) - 1):
+ i1, i2 = switchMaterial[si], switchMaterial[si+1]
+ # --------------
+ # write material
+ # --------------
+ if materials:
+ name = currentMaterial[materialIndex]
+ material = findMaterial(name)
+ if useMaterials:
+ file.write("%sMaterial {\n" % (TAB, ))
+ file.write("%sambientColor %s %s %s\n" %
+ (TAB*2,
+ material[3][0],
+ material[3][1],
+ material[3][2]))
+ file.write("%sdiffuseColor %s %s %s\n" %
+ (TAB*2,
+ material[1][0],
+ material[1][1],
+ material[1][2]))
+ file.write("%sspecularColor %s %s %s\n" %
+ (TAB*2,
+ material[2][0],
+ material[2][1],
+ material[2][2]))
+ file.write("%s}\n" % (TAB, ))
+ # -----------
+ # write faces
+ # -----------
+ file.write("%sIndexedFaceSet {\n" % (TAB, ))
+ # indices for vertices
+ file.write("%scoordIndex [ \n" % (TAB*2, ))
+ for i in xrange(i1, i2-1):
+ indices = faces[i][0]
+ istring = ""
+ for index in indices:
+ # indices begin with 0 in OpenInventor
+ istring = istring + "%s, " % (index - 1, )
+ file.write("%s %s-1, \n" % (TAB*2, istring))
+ indices = faces[i+1][0]
+ istring = ""
+ for index in indices:
+ # indices begin with 0 in OpenInventor
+ istring = istring + "%s, " % (index - 1, )
+ file.write("%s %s-1\n" % (TAB*2, istring))
+ file.write("%s ] \n" % (TAB*2, ))
+ # update materialIndex
+ materialIndex = materialIndex + 1
+ if useNormals:
+ # indices for normals
+ file.write("%snormalIndex [ \n" % (TAB*2, ))
+ for i in xrange(i1, i2-1):
+ indices = faces[i][2]
+ istring = ""
+ for index in indices:
+ # indices begin with 0 in OpenInventor
+ istring = istring + "%s, " % (index - 1, )
+ file.write("%s %s-1, \n" % (TAB*2, istring))
+ indices = faces[i+1][2]
+ istring = ""
+ for index in indices:
+ # indices begin with 0 in OpenInventor
+ istring = istring + "%s, " % (index - 1, )
+ file.write("%s %s-1\n" % (TAB*2, istring))
+ file.write("%s ] \n" % (TAB*2, ))
+ file.write("%s}\n" % (TAB, ))
+ file.write("}\n")
+ file.close()
diff --git a/intern/python/objexport/objimport.py b/intern/python/objexport/objimport.py
new file mode 100644
index 00000000000..0150a2571ad
--- /dev/null
+++ b/intern/python/objexport/objimport.py
@@ -0,0 +1,119 @@
+#! /usr/bin/env python
+
+#######################
+# (c) Jan Walter 2000 #
+#######################
+
+# CVS
+# $Author$
+# $Date$
+# $RCSfile$
+# $Revision$
+
+import BlendImport
+import os
+import sys
+import string
+
+def usage():
+ print "usage: python objimport.py objfile"
+
+def testObjImport(filename):
+ print filename
+ vcount = 0
+ vncount = 0
+ fcount = 0
+ file = open(filename, "r")
+ lines = file.readlines()
+ linenumber = 1
+ for line in lines:
+ words = string.split(line)
+ if words and words[0] == "#":
+ pass # ignore comments
+ elif words and words[0] == "v":
+ vcount = vcount + 1
+ x = string.atof(words[1])
+ y = string.atof(words[2])
+ z = string.atof(words[3])
+ ##print "Vertex %s: (%s, %s, %s)" % (vcount, x, y, z)
+ index = BlendImport.addVertex(x, y, z)
+ ##print "addVertex(%s)" % index
+ elif words and words[0] == "vn":
+ vncount = vncount + 1
+ i = string.atof(words[1])
+ j = string.atof(words[2])
+ k = string.atof(words[3])
+ ##print "VertexNormal %s: (%s, %s, %s)" % (vncount, i, j, k)
+ index = BlendImport.addVertexNormal(i, j, k)
+ ##print "addVertexNormal(%s)" % index
+ elif words and words[0] == "f":
+ fcount = fcount + 1
+ vi = [] # vertex indices
+ ti = [] # texture indices
+ ni = [] # normal indices
+ words = words[1:]
+ lcount = len(words)
+ for index in (xrange(lcount)):
+ vtn = string.split(words[index], "/")
+ vi.append(string.atoi(vtn[0]))
+ if len(vtn) > 1 and vtn[1]:
+ ti.append(string.atoi(vtn[1]))
+ if len(vtn) > 2 and vtn[2]:
+ ni.append(string.atoi(vtn[2]))
+ ##print "Face %s: (%s, %s, %s)" % (fcount, vi, ti, ni)
+ index = BlendImport.addFace(vi, ti, ni)
+ ##print "addFace(%s)" % index
+ elif words and words[0] == "mtllib":
+ # try to export materials
+ directory, dummy = os.path.split(filename)
+ filename = os.path.join(directory, words[1])
+ try:
+ file = open(filename, "r")
+ except:
+ print "no material file %s" % filename
+ else:
+ file = open(filename, "r")
+ line = file.readline()
+ while line:
+ words = string.split(line)
+ if words and words[0] == "newmtl":
+ name = words[1]
+ file.readline() # Ns .
+ file.readline() # d .
+ file.readline() # illum .
+ line = file.readline()
+ words = string.split(line)
+ Kd = [string.atof(words[1]),
+ string.atof(words[2]),
+ string.atof(words[3])]
+ line = file.readline()
+ words = string.split(line)
+ Ks = [string.atof(words[1]),
+ string.atof(words[2]),
+ string.atof(words[3])]
+ line = file.readline()
+ words = string.split(line)
+ Ka = [string.atof(words[1]),
+ string.atof(words[2]),
+ string.atof(words[3])]
+ index = BlendImport.addMaterial(name, Kd, Ks, Ka)
+ line = file.readline()
+ file.close()
+ elif words and words[0] == "usemtl":
+ name = words[1]
+ BlendImport.setCurrentMaterial(name)
+ elif words:
+ pass
+ ##print "%s: %s" % (linenumber, words)
+ linenumber = linenumber + 1
+ file.close()
+ # export to OpenInventor
+ BlendImport.OpenInventor().export("test.iv",
+ useNormals = 1, useMaterials = 1)
+
+if __name__ == "__main__":
+ if len(sys.argv) != 2:
+ usage()
+ else:
+ filename = sys.argv[1]
+ testObjImport(filename)