#!/usr/bin/env python\r
# coding: utf-8\r
+"""\r
+this script require pyOpenGL, PIL, numpy and Togl(tck/tk).\r
+\r
+Togl install on Windows\r
+=======================\r
+\r
+* download Togl2.0-8.4-Windows.zip\r
+* copy Togl2.0-8.4-Windows/lib/Togl2.0 to C:/PythonXX/tcl/Togl2.0\r
+"""\r
\r
import sys\r
import os\r
-import tkinter\r
-import tkinter.filedialog\r
+try:\r
+ import tkinter\r
+ import tkinter.filedialog as tkinter_filedialog\r
+except ImportError as e:\r
+ import Tkinter as tkinter\r
+ import tkFileDialog as tkinter_filedialog\r
import togl\r
import opengl\r
import opengl.rokuro\r
\r
class Frame(tkinter.Frame):\r
def __init__(self, width, height, master=None, **kw):\r
- super(Frame, self).__init__(master, **kw)\r
+ #super(Frame, self).__init__(master, **kw)\r
+ tkinter.Frame.__init__(self, master, **kw)\r
self.master.title('pymeshio viewer')\r
self.current='.'\r
# setup menu\r
self.bind('<MouseWheel>', lambda e: self.glworld.onWheel(-e.delta) and self.glwidget.onDraw())\r
\r
def onOpen(self):\r
- path=tkinter.filedialog.askopenfilename(\r
+ path=tkinter_filedialog.askopenfilename(\r
filetypes=[\r
('poloygon model files', '*.mqo;*.pmd;*.pmx'),\r
], \r
\r
class Widget(OpenGL.Tk.RawOpengl):\r
def __init__(self, master, engine, *args, **kw):\r
- super(Widget, self).__init__(master, *args, **kw)\r
+ #super(Widget, self).__init__(master, *args, **kw)\r
+ OpenGL.Tk.RawOpengl.__init__(self, master, *args, **kw)\r
self.engine=engine\r
self.bind('<Map>', self.onDraw)\r
self.bind('<Expose>', self.onDraw)\r
pass\r
\r
\r
-def readall(path: str) -> bytes:\r
+def readall(path):\r
with open(path, "rb") as f:\r
return f.read()\r
\r
def __init__(self, io):\r
self.io=io\r
\r
- def unpack(self, fmt: str, size: int) -> "read value as format":\r
+ def unpack(self, fmt, size):\r
result=struct.unpack(fmt, self.io.read(size))\r
return result[0]\r
\r
'ik',\r
]\r
def __init__(self,\r
- name: str,\r
- english_name: str,\r
- position: common.Vector3,\r
- parent_index: int,\r
- layer: int,\r
- flag: int\r
+ name,\r
+ english_name,\r
+ position,\r
+ parent_index,\r
+ layer,\r
+ flag\r
):\r
self.name=name,\r
self.english_name=english_name\r
self.layer=layer\r
self.flag=flag\r
\r
- def getConnectionFlag(self) -> int:\r
+ def getConnectionFlag(self):\r
return self.flag & 0x0001\r
\r
- def getIkFlag(self) -> int:\r
+ def getIkFlag(self):\r
return (self.flag & 0x0020) >> 5\r
\r
- def getRotationFlag(self) -> int:\r
+ def getRotationFlag(self):\r
return (self.flag & 0x0100) >> 8\r
\r
- def getTranslationFlag(self) -> int:\r
+ def getTranslationFlag(self):\r
return (self.flag & 0x0200) >> 9\r
\r
- def getFixedAxisFlag(self) -> int:\r
+ def getFixedAxisFlag(self):\r
return (self.flag & 0x0400) >> 10\r
\r
- def getLocalCoordinateFlag(self) -> int:\r
+ def getLocalCoordinateFlag(self):\r
return (self.flag & 0x0800) >> 11\r
\r
- def getExternalParentDeformFlag(self) -> int:\r
+ def getExternalParentDeformFlag(self):\r
return (self.flag & 0x2000) >> 13\r
\r
\r
'vertex_count',\r
]\r
def __init__(self,\r
- name: str,\r
- english_name: str,\r
- diffuse_color: common.RGB,\r
- diffuse_alpha: float,\r
- specular_color: common.RGB,\r
- specular_factor: float,\r
- ambient_color: common.RGB,\r
- flag: int,\r
- edge_color: common.RGBA,\r
- edge_size: float,\r
- texture_index: int,\r
- sphia_texture_index: int,\r
- sphia_mode: int,\r
- toon_sharing_flag: int\r
+ name,\r
+ english_name,\r
+ diffuse_color,\r
+ diffuse_alpha,\r
+ specular_color,\r
+ specular_factor,\r
+ ambient_color,\r
+ flag,\r
+ edge_color,\r
+ edge_size,\r
+ texture_index,\r
+ sphia_texture_index,\r
+ sphia_mode,\r
+ toon_sharing_flag\r
):\r
self.name=name\r
self.english_name=english_name\r
Attributes: see __init__\r
"""\r
__slots__=[ 'index0']\r
- def __init__(self, index0: int):\r
+ def __init__(self, index0):\r
self.index0=index0\r
\r
\r
"""\r
__slots__=[ 'index0', 'index1', 'weight0']\r
def __init__(self, \r
- index0: int,\r
- index1: int,\r
- weight0: float):\r
+ index0,\r
+ index1,\r
+ weight0):\r
self.index0=index0\r
self.index1=index1\r
self.weight0=weight0\r
"""\r
__slots__=[ 'position', 'normal', 'uv', 'deform', 'edge_factor' ]\r
def __init__(self, \r
- position: common.Vector3, \r
- normal: common.Vector3, \r
- uv: common.Vector2, \r
- deform: Deform, \r
- edge_factor: float):\r
+ position, \r
+ normal, \r
+ uv, \r
+ deform, \r
+ edge_factor):\r
self.position=position \r
self.normal=normal\r
self.uv=uv\r
self.read_morph_index=lambda : self.read_uint(morph_index_size)\r
self.read_rigidbody_index=lambda : self.read_uint(rigidbody_index_size)\r
\r
- def __str__(self) -> str:\r
+ def __str__(self):\r
return '<pymeshio.pmx.Loader>'\r
\r
- def get_read_text(self, text_encoding) -> "text process function":\r
+ def get_read_text(self, text_encoding):\r
if text_encoding==0:\r
def read_text():\r
size=self.read_uint(4)\r
spring_constant_rotation=self.read_vector3())\r
\r
\r
-def load(path: str) -> pymeshio.pmx.Model:\r
+def load(path):\r
# general binary loader\r
loader=pymeshio.common.BinaryLoader(\r
io.BytesIO(\r
+# coding: utf-8
###############################################################################
# VPD
###############################################################################
Requirements
------------
* Python 3
+* Python 2.7
Features
--------
History
-------
-2.0.0 (2011-10-01)
+2.0.2 (2011-10-01)
~~~~~~~~~~~~~~~~~~
+* fix for Python 2.7(remove anotation)
* fix pymeshio.pmx.Bdef1.bone_index to index0
* fix pymeshio.pmx.Material.index_count to vertex_count
* add pmx example
import pymeshio.pmx.loader\r
\r
\r
-PMX_MODEL='resources/初音ミクVer2.pmx'\r
+PMX_MODEL=u'resources/初音ミクVer2.pmx'\r
\r
def test_read():\r
model=pymeshio.pmx.loader.load(PMX_MODEL)\r
assert model.__class__==pymeshio.pmx.Model\r
- assert model.name=='初音ミク'\r
- assert model.english_name=='Miku Hatsune'\r
+ assert model.name==u'初音ミク'\r
+ assert model.english_name==u'Miku Hatsune'\r
assert model.comment==(\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
+ 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
)\r
assert model.english_comment==(\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
+ 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
)\r
\r
assert len(model.vertices)==12354\r