3 import pymeshio.common
\r
6 #print(sys.version_info[0])
\r
7 #if sys.version_info[0]<3:
\r
10 # io=open(path, encoding='cp932')
\r
11 #result=method(self)
\r
18 class Loader(object):
\r
23 "eof", "io", "lines",
\r
24 "materials", "objects",
\r
26 def __init__(self, io):
\r
32 return "<MQO %d lines, %d materials, %d objects>" % (
\r
33 self.lines, len(self.materials), len(self.objects))
\r
36 line=self.io.readline()
\r
43 def printError(self, method, msg):
\r
44 print("%s:%s:%d" % (method, msg, self.lines))
\r
46 def readObject(self, name):
\r
47 obj=pymeshio.mqo.Obj(name)
\r
63 if not self.readVertex(obj):
\r
66 if not self.readFace(obj):
\r
69 obj.depth=int(tokens[1])
\r
72 "%s#readObject" % name,
\r
73 "unknown key: %s" % key
\r
76 self.printError("readObject", "invalid eof")
\r
79 def readFace(self, obj):
\r
93 tokens=line.split(' ', 1)
\r
95 obj.addFace(pymeshio.mqo.Face(int(tokens[0]), tokens[1]))
\r
96 except ValueError as ex:
\r
97 self.printError("readFace", ex)
\r
100 self.printError("readFace", "invalid eof")
\r
103 def readVertex(self, obj):
\r
105 line=self.getline()
\r
117 obj.addVertex(*[float(v) for v in line.split()])
\r
119 self.printError("readVertex", "invalid eof")
\r
122 def readMaterial(self):
\r
125 line=self.getline()
\r
137 secondQuaote=line.find('"', 1)
\r
138 material=pymeshio.mqo.Material(line[1:secondQuaote])
\r
140 material.parse(line[secondQuaote+2:])
\r
141 except ValueError as ex:
\r
142 self.printError("readMaterial", ex)
\r
144 materials.append(material)
\r
146 self.printError("readMaterial", "invalid eof")
\r
149 def readChunk(self):
\r
152 line=self.getline()
\r
164 elif line.find("{")!=-1:
\r
167 self.printError("readChunk", "invalid eof")
\r
172 with open(path, 'rb') as io:
\r
174 model=pymeshio.mqo.Model()
\r
176 line=loader.getline()
\r
177 if line!="Metasequoia Document":
\r
178 print("invalid signature")
\r
181 line=loader.getline()
\r
182 if line!="Format Text Ver 1.0":
\r
183 print("unknown version: %s" % line)
\r
186 line=loader.getline()
\r
194 tokens=line.split()
\r
199 if not loader.readChunk():
\r
201 elif key=="Material":
\r
202 materials=loader.readMaterial()
\r
205 model.materials=materials
\r
206 elif key=="Object":
\r
207 firstQuote=line.find('"')
\r
208 secondQuote=line.find('"', firstQuote+1)
\r
209 obj=loader.readObject(line[firstQuote+1:secondQuote])
\r
212 model.objects.append(obj)
\r
213 elif key=="BackImage":
\r
214 if not loader.readChunk():
\r
216 elif key=="IncludeXml":
\r
217 firstQuote=line.find('"')
\r
218 secondQuote=line.find('"', firstQuote+1)
\r
219 print("IncludeXml", line[firstQuote+1:secondQuote])
\r
221 print("unknown key: %s" % key)
\r
222 if not loader.readChunk():
\r
224 # error not reach here
\r
225 raise ParseException("invalid eof")
\r