+\r
+def unicode(src):\r
+ import sys\r
+ if sys.version_info[0]<3:\r
+ return src.decode('utf-8')\r
+ else:\r
+ return src\r
+\r
def parse(self, line):\r
offset=0\r
while True:\r
- leftParenthesis=line.find("(", offset)\r
+ leftParenthesis=line.find(b"(", offset)\r
if leftParenthesis==-1:\r
break\r
key=line[offset:leftParenthesis]\r
- rightParenthesis=line.find(")", leftParenthesis+1)\r
+ rightParenthesis=line.find(b")", leftParenthesis+1)\r
if rightParenthesis==-1:\r
raise ValueError("assert")\r
\r
param=line[leftParenthesis+1:rightParenthesis]\r
- if key=="shader":\r
+ if key==b"shader":\r
self.shader=int(param)\r
- elif key=="col":\r
+ elif key==b"col":\r
self.color=pymeshio.common.RGBA(*[float(e) for e in param.split()])\r
- elif key=="dif":\r
+ elif key==b"dif":\r
self.diffuse=float(param)\r
- elif key=="amb":\r
+ elif key==b"amb":\r
self.ambient=float(param)\r
- elif key=="emi":\r
+ elif key==b"emi":\r
self.emit=float(param)\r
- elif key=="spc":\r
+ elif key==b"spc":\r
self.specular=float(param)\r
- elif key=="power":\r
+ elif key==b"power":\r
self.power=float(param)\r
- elif key=="tex":\r
+ elif key==b"tex":\r
self.tex=param[1:-1]\r
else:\r
print(\r
self.index_count=index_count\r
offset=0\r
while True:\r
- leftParenthesis=line.find("(", offset)\r
+ leftParenthesis=line.find(b"(", offset)\r
if leftParenthesis==-1:\r
break\r
key=line[offset:leftParenthesis]\r
- rightParenthesis=line.find(")", leftParenthesis+1)\r
+ rightParenthesis=line.find(b")", leftParenthesis+1)\r
if rightParenthesis==-1:\r
raise ValueError("assert")\r
params=line[leftParenthesis+1:rightParenthesis].split()\r
- if key=="V":\r
+ if key==b"V":\r
self.indices=[int(e) for e in params]\r
- elif key=="M":\r
+ elif key==b"M":\r
self.material_index=int(params[0])\r
- elif key=="UV":\r
+ elif key==b"UV":\r
uv_list=[float(e) for e in params]\r
self.uv=[]\r
for i in range(0, len(uv_list), 2):\r
self.uv.append(pymeshio.common.Vector2(uv_list[i], uv_list[i+1]))\r
- elif key=="COL":\r
+ elif key==b"COL":\r
for n in params:\r
d=int(n)\r
# R\r
def getline(self):\r
line=self.ios.readline()\r
self.lines+=1\r
- if line=="":\r
+ if line==b"":\r
self.eof=True\r
return None\r
return line.strip()\r
if line==None:\r
# eof\r
break;\r
- if line=="":\r
+ if line==b"":\r
# empty line\r
continue\r
\r
- if line=="}":\r
+ if line==b"}":\r
return obj\r
else:\r
tokens=line.split()\r
key=tokens[0]\r
- if key=="vertex":\r
+ if key==b"vertex":\r
if not self.readVertex(obj):\r
return False\r
- elif key=="face":\r
+ elif key==b"face":\r
if not self.readFace(obj):\r
return False\r
- elif key=="depth":\r
+ elif key==b"depth":\r
obj.depth=int(tokens[1])\r
else:\r
print(\r
if line==None:\r
# eof\r
break;\r
- if line=="":\r
+ if line==b"":\r
# empty line\r
continue\r
\r
- if line=="}":\r
+ if line==b"}":\r
return True\r
else:\r
# face\r
- tokens=line.split(' ', 1)\r
+ tokens=line.split(b' ', 1)\r
try:\r
obj.addFace(pymeshio.mqo.Face(int(tokens[0]), tokens[1]))\r
except ValueError as ex:\r
if line==None:\r
# eof\r
break;\r
- if line=="":\r
+ if line==b"":\r
# empty line\r
continue\r
\r
- if line=="}":\r
+ if line==b"}":\r
return True\r
else:\r
# vertex\r
if line==None:\r
# eof\r
break;\r
- if line=="":\r
+ if line==b"":\r
# empty line\r
continue\r
\r
- if line=="}":\r
+ if line==b"}":\r
return materials\r
else:\r
# material\r
- secondQuaote=line.find('"', 1) \r
+ secondQuaote=line.find(b'"', 1) \r
material=pymeshio.mqo.Material(line[1:secondQuaote])\r
try:\r
material.parse(line[secondQuaote+2:])\r
if line==None:\r
# eof\r
break;\r
- if line=="":\r
+ if line==b"":\r
# empty line\r
continue\r
\r
- if line=="}":\r
+ if line==b"}":\r
level-=1\r
if level==0:\r
return True\r
- elif line.find("{")!=-1:\r
+ elif line.find(b"{")!=-1:\r
level+=1\r
\r
self.printError("readChunk", "invalid eof")\r
model=pymeshio.mqo.Model()\r
\r
line=reader.getline()\r
- if line!="Metasequoia Document":\r
+ if line!=b"Metasequoia Document":\r
print("invalid signature")\r
return False\r
\r
line=reader.getline()\r
- if line!="Format Text Ver 1.0":\r
+ if line!=b"Format Text Ver 1.0":\r
print("unknown version: %s" % line)\r
\r
while True:\r
if line==None:\r
# eof\r
break;\r
- if line=="":\r
+ if line==b"":\r
# empty line\r
continue\r
\r
tokens=line.split()\r
key=tokens[0]\r
- if key=="Eof":\r
+ if key==b"Eof":\r
return model\r
- elif key=="Scene":\r
+ elif key==b"Scene":\r
if not reader.readChunk():\r
return\r
- elif key=="Material":\r
+ elif key==b"Material":\r
materials=reader.readMaterial()\r
if not materials:\r
return\r
model.materials=materials\r
- elif key=="Object":\r
- firstQuote=line.find('"')\r
- secondQuote=line.find('"', firstQuote+1)\r
+ elif key==b"Object":\r
+ firstQuote=line.find(b'"')\r
+ secondQuote=line.find(b'"', firstQuote+1)\r
obj=reader.readObject(line[firstQuote+1:secondQuote])\r
if not obj:\r
return\r
model.objects.append(obj)\r
- elif key=="BackImage":\r
+ elif key==b"BackImage":\r
if not reader.readChunk():\r
return\r
- elif key=="IncludeXml":\r
- firstQuote=line.find('"')\r
- secondQuote=line.find('"', firstQuote+1)\r
+ elif key==b"IncludeXml":\r
+ firstQuote=line.find(b'"')\r
+ secondQuote=line.find(b'"', firstQuote+1)\r
print("IncludeXml", line[firstQuote+1:secondQuote])\r
else:\r
print("unknown key: %s" % key)\r
import pymeshio.pmd.writer
-PMD_FILE=u'resources/初音ミクVer2.pmd'
+PMD_FILE=pymeshio.unicode('resources/初音ミクVer2.pmd')
class TestPmd(unittest.TestCase):
def test_read(self):
model=pymeshio.pmd.reader.read_from_file(PMD_FILE)
self.assertEqual(pymeshio.pmd.Model, model.__class__)
- self.assertEqual(u'初音ミク'.encode('cp932'), model.name)
- self.assertEqual(u'Miku Hatsune'.encode('cp932'), model.english_name)
- self.assertEqual((
- u"PolyMo用モデルデータ:初音ミク ver.2.3\n"+
- u"(物理演算対応モデル)\n"+
- u"\n"+
- u"モデリング :あにまさ氏\n"+
- u"データ変換 :あにまさ氏\n"+
- u"Copyright :CRYPTON FUTURE MEDIA, INC").encode('cp932'),
+ self.assertEqual(pymeshio.unicode('初音ミク').encode('cp932'), model.name)
+ self.assertEqual(pymeshio.unicode('Miku Hatsune').encode('cp932'), model.english_name)
+ self.assertEqual(pymeshio.unicode(
+ "PolyMo用モデルデータ:初音ミク ver.2.3\n"+
+ "(物理演算対応モデル)\n"+
+ "\n"+
+ "モデリング :あにまさ氏\n"+
+ "データ変換 :あにまさ氏\n"+
+ "Copyright :CRYPTON FUTURE MEDIA, INC").encode('cp932'),
model.comment)
- self.assertEqual((
- u"MMD Model: Miku Hatsune ver.2.3\n"+
- u"(Physical Model)\n"+
- u"\n"+
- u"Modeling by Animasa\n"+
- u"Converted by Animasa\n"+
- u"Copyright CRYPTON FUTURE MEDIA, INC").encode('cp932'),
+ self.assertEqual(pymeshio.unicode(
+ "MMD Model: Miku Hatsune ver.2.3\n"+
+ "(Physical Model)\n"+
+ "\n"+
+ "Modeling by Animasa\n"+
+ "Converted by Animasa\n"+
+ "Copyright CRYPTON FUTURE MEDIA, INC").encode('cp932'),
model.english_comment)
self.assertEqual(12354, len(model.vertices))
self.assertEqual(22961 * 3, len(model.indices))
# coding: utf-8\r
-import pymeshio.pmx.reader\r
import unittest\r
+import pymeshio.pmd\r
+import pymeshio.pmx.reader\r
\r
\r
-PMX_FILE=u'resources/初音ミクVer2.pmx'\r
+PMX_FILE=pymeshio.unicode('resources/初音ミクVer2.pmx')\r
\r
\r
class TestPmx(unittest.TestCase):\r
def test_read(self):\r
model=pymeshio.pmx.reader.read_from_file(PMX_FILE)\r
self.assertEqual(pymeshio.pmx.Model, model.__class__)\r
- self.assertEqual(u'初音ミク', model.name)\r
- self.assertEqual(u'Miku Hatsune', model.english_name)\r
- self.assertEqual(\r
- u"PolyMo用モデルデータ:初音ミク ver.2.3\r\n"+\r
- u"(物理演算対応モデル)\r\n"+\r
- u"\r\n"+\r
- u"モデリング :あにまさ氏\r\n"+\r
- u"データ変換 :あにまさ氏\r\n"+\r
- u"Copyright :CRYPTON FUTURE MEDIA, INC",\r
+ self.assertEqual(pymeshio.unicode('初音ミク'), model.name)\r
+ self.assertEqual(pymeshio.unicode('Miku Hatsune'), model.english_name)\r
+ self.assertEqual(pymeshio.unicode(\r
+ "PolyMo用モデルデータ:初音ミク ver.2.3\r\n"+\r
+ "(物理演算対応モデル)\r\n"+\r
+ "\r\n"+\r
+ "モデリング :あにまさ氏\r\n"+\r
+ "データ変換 :あにまさ氏\r\n"+\r
+ "Copyright :CRYPTON FUTURE MEDIA, INC"),\r
model.comment)\r
- self.assertEqual(\r
- u"MMD Model: Miku Hatsune ver.2.3\r\n"+\r
- u"(Physical Model)\r\n"+\r
- u"\r\n"+\r
- u"Modeling by Animasa\r\n"+\r
- u"Converted by Animasa\r\n"+\r
- u"Copyright CRYPTON FUTURE MEDIA, INC",\r
+ self.assertEqual(pymeshio.unicode(\r
+ "MMD Model: Miku Hatsune ver.2.3\r\n"+\r
+ "(Physical Model)\r\n"+\r
+ "\r\n"+\r
+ "Modeling by Animasa\r\n"+\r
+ "Converted by Animasa\r\n"+\r
+ "Copyright CRYPTON FUTURE MEDIA, INC"),\r
model.english_comment)\r
\r
self.assertEqual(12354, len(model.vertices))\r