chiark / gitweb /
Upload design files with mesh files when uploading to YouMagine.
[cura.git] / Cura / util / meshLoaders / obj.py
1 from __future__ import absolute_import
2 __copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
3
4 import os
5 from Cura.util import mesh
6
7 def loadScene(filename):
8         obj = mesh.printableObject(filename)
9         m = obj._addMesh()
10
11         vertexList = []
12         faceList = []
13
14         f = open(filename, "r")
15         for line in f:
16                 parts = line.split()
17                 if len(parts) < 1:
18                         continue
19                 if parts[0] == 'v':
20                         vertexList.append([float(parts[1]), float(parts[2]), float(parts[3])])
21                 if parts[0] == 'f':
22                         parts = map(lambda p: p.split('/')[0], parts)
23                         for idx in xrange(1, len(parts)-2):
24                                 faceList.append([int(parts[1]), int(parts[idx+1]), int(parts[idx+2])])
25         f.close()
26
27         m._prepareFaceCount(len(faceList))
28         for f in faceList:
29                 i = f[0] - 1
30                 j = f[1] - 1
31                 k = f[2] - 1
32                 if i < 0 or i >= len(vertexList):
33                         i = 0
34                 if j < 0 or j >= len(vertexList):
35                         j = 0
36                 if k < 0 or k >= len(vertexList):
37                         k = 0
38                 m._addFace(vertexList[i][0], vertexList[i][1], vertexList[i][2], vertexList[j][0], vertexList[j][1], vertexList[j][2], vertexList[k][0], vertexList[k][1], vertexList[k][2])
39
40         obj._postProcessAfterLoad()
41         return [obj]