OSDN Git Service

refactoring export_pmd
[meshio/pymeshio.git] / test / pmx_test.py
1 # coding: utf-8\r
2 import unittest\r
3 import io\r
4 import pymeshio.common\r
5 import pymeshio.pmd.reader\r
6 import pymeshio.pmx.reader\r
7 import pymeshio.pmx.writer\r
8 import pymeshio.converter\r
9 \r
10 \r
11 PMD_FILE=pymeshio.common.unicode('resources/初音ミクVer2.pmd')\r
12 PMX_FILE=pymeshio.common.unicode('resources/初音ミクVer2.pmx')\r
13 \r
14 \r
15 class TestPmx(unittest.TestCase):\r
16     \r
17     def setUp(self):\r
18         pass\r
19 \r
20     def test_read(self):\r
21         model=pymeshio.pmx.reader.read_from_file(PMX_FILE)\r
22         self.assertEqual(pymeshio.pmx.Model,  model.__class__)\r
23         self.assertEqual(pymeshio.common.unicode('初音ミク'),  model.name)\r
24         self.assertEqual(pymeshio.common.unicode('Miku Hatsune'),  model.english_name)\r
25         self.assertEqual(pymeshio.common.unicode(\r
26                 "PolyMo用モデルデータ:初音ミク ver.2.3\r\n"+\r
27                 "(物理演算対応モデル)\r\n"+\r
28                 "\r\n"+\r
29                 "モデリング        :あにまさ氏\r\n"+\r
30                 "データ変換        :あにまさ氏\r\n"+\r
31                 "Copyright      :CRYPTON FUTURE MEDIA, INC"),\r
32                 model.comment)\r
33         self.assertEqual(pymeshio.common.unicode(\r
34                 "MMD Model: Miku Hatsune ver.2.3\r\n"+\r
35                 "(Physical Model)\r\n"+\r
36                 "\r\n"+\r
37                 "Modeling by    Animasa\r\n"+\r
38                 "Converted by   Animasa\r\n"+\r
39                 "Copyright              CRYPTON FUTURE MEDIA, INC"),\r
40                 model.english_comment)\r
41 \r
42         self.assertEqual(12354,  len(model.vertices))\r
43         self.assertEqual(22961 * 3,  len(model.indices))\r
44         print("{0} textures".format(len(model.textures)))\r
45         self.assertEqual(17,  len(model.materials))\r
46         self.assertEqual(140,  len(model.bones))\r
47         self.assertEqual(30,  len(model.morphs))\r
48         self.assertEqual(9,  len(model.display_slots))\r
49         self.assertEqual(45,  len(model.rigidbodies))\r
50         self.assertEqual(27,  len(model.joints))\r
51 \r
52     def test_write(self):\r
53         # read source file\r
54         buf=pymeshio.common.readall(PMX_FILE)\r
55         # read and write to out\r
56         model=pymeshio.pmx.reader.read(io.BytesIO(buf))\r
57         out=io.BytesIO()\r
58         pymeshio.pmx.writer.write(out, model)\r
59         # read out buffer again\r
60         model2=pymeshio.pmx.reader.read(io.BytesIO(out.getvalue()))\r
61         self.assertEqual(model, model2)\r
62 \r
63     def test_convert(self):\r
64         # convert\r
65         pmd=pymeshio.pmd.reader.read_from_file(PMD_FILE)\r
66         converted=pymeshio.converter.pmd_to_pmx(pmd)\r
67         # validate\r
68         pmx=pymeshio.pmx.reader.read_from_file(PMX_FILE)\r
69         # check diffference\r
70         pmx.diff(converted)\r
71         #self.assertEqual(pmx, converted)\r
72         pymeshio.pmx.writer.write(io.open("tmp.pmx", "wb"), converted)\r
73 \r