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, ios):
\r
32 return "<MQO %d lines, %d materials, %d objects>" % (
\r
33 self.lines, len(self.materials), len(self.objects))
\r
36 line=self.ios.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
171 def load_from_file(path):
\r
172 with open(path, 'rb') as ios:
\r
177 assert(isinstance(ios, io.IOBase))
\r
179 model=pymeshio.mqo.Model()
\r
181 line=loader.getline()
\r
182 if line!="Metasequoia Document":
\r
183 print("invalid signature")
\r
186 line=loader.getline()
\r
187 if line!="Format Text Ver 1.0":
\r
188 print("unknown version: %s" % line)
\r
191 line=loader.getline()
\r
199 tokens=line.split()
\r
204 if not loader.readChunk():
\r
206 elif key=="Material":
\r
207 materials=loader.readMaterial()
\r
210 model.materials=materials
\r
211 elif key=="Object":
\r
212 firstQuote=line.find('"')
\r
213 secondQuote=line.find('"', firstQuote+1)
\r
214 obj=loader.readObject(line[firstQuote+1:secondQuote])
\r
217 model.objects.append(obj)
\r
218 elif key=="BackImage":
\r
219 if not loader.readChunk():
\r
221 elif key=="IncludeXml":
\r
222 firstQuote=line.find('"')
\r
223 secondQuote=line.find('"', firstQuote+1)
\r
224 print("IncludeXml", line[firstQuote+1:secondQuote])
\r
226 print("unknown key: %s" % key)
\r
227 if not loader.readChunk():
\r
229 # error not reach here
\r
230 raise ParseException("invalid eof")
\r