\r
# ファイルシステムの文字コード\r
# 改造版との共用のため\r
+FS_ENCODING=sys.getfilesystemencoding()\r
if os.path.exists(os.path.dirname(sys.argv[0])+"/utf8"):\r
- FS_ENCODING='utf-8'\r
+ INTERNAL_ENCODING='utf-8'\r
else:\r
- FS_ENCODING=sys.getfilesystemencoding()\r
-print FS_ENCODING\r
-\r
-\r
-def cp932_to_utf8(cp932):\r
- return str(cp932).decode('cp932').encode('utf-8')\r
+ INTERNAL_ENCODING=FS_ENCODING\r
\r
\r
def has_mikoto(mqo):\r
materials = []\r
images = []\r
for m in mqo.materials:\r
- material = Blender.Material.New(cp932_to_utf8(m.name))\r
+ material = Blender.Material.New(m.getName())\r
materials.append(material)\r
\r
material.mode |= Blender.Material.Modes.SHADELESS\r
- material.rgbCol = (m.color.r, m.color.g, m.color.b)\r
+ material.rgbCol = [m.color.r, m.color.g, m.color.b]\r
material.alpha = m.color.a\r
material.amb = m.ambient\r
material.spec = m.specular\r
material.hard = int(255 * m.power)\r
if m.texture!="":\r
- texture_path=cp932_to_utf8(m.texture)\r
+ texture_path=m.getTexture()\r
\r
# load texture image\r
if os.path.isabs(texture_path):\r
path = os.path.join(directory, texture_path)\r
\r
# backslash to slash\r
- path = path.replace('\\', '/')\r
+ #path = path.replace('\\', '/')\r
\r
# texture\r
- if os.path.exists(path.encode(FS_ENCODING)):\r
- image = Blender.Image.Load(path)\r
+ if os.path.exists(path):\r
+ image = Blender.Image.Load(path.encode(INTERNAL_ENCODING))\r
images.append(image)\r
material.mode = material.mode | Blender.Material.Modes.TEXFACE\r
- tex = Blender.Texture.New(path)\r
+ tex = Blender.Texture.New(path.encode(INTERNAL_ENCODING))\r
tex.type = Blender.Texture.Types.IMAGE\r
tex.image = image\r
material.setTexture(0, tex, Blender.Texture.TexCo.UV)\r
+ else:\r
+ print("%s not exits" % path)\r
\r
return materials\r
\r
\r
# add hierarchy\r
stack_depth=len(stack)-1\r
+ print(o.depth, stack_depth)\r
if o.depth<stack_depth:\r
for i in range(stack_depth-o.depth):\r
stack.pop()\r
f.getUV(i).x, \r
1.0-f.getUV(i).y)\r
)\r
- face.uv=uv_array\r
+ try:\r
+ face.uv=uv_array\r
+ except Exception, msg:\r
+ #print msg\r
+ #print face.index, uv_array\r
+ pass\r
\r
if f.material_index in usedMaterials:\r
face.mat = usedMaterials[f.material_index]\r
"""\r
import a mqo file.\r
"""\r
- filename=filename.decode(FS_ENCODING)\r
+ filename=filename.decode(INTERNAL_ENCODING)\r
print "##start mqo_import.py##"\r
+ print INTERNAL_ENCODING, FS_ENCODING\r
print "parse mqo file: %s" % (filename)\r
\r
Blender.Window.WaitCursor(1) \r
# parse file\r
mqo=meshio.mqo.IO()\r
\r
- if not mqo.read(filename.encode(FS_ENCODING)):\r
+ if not mqo.read(filename):\r
return\r
\r
# get active scene\r
\r
# create objects\r
root=scene.objects.new("Empty")\r
- root.setName(os.path.basename(filename).encode('utf8'))\r
+ root.setName(os.path.basename(filename))\r
objects=create_objects(scene, root, mqo, materials)\r
\r
if has_mikoto(mqo):\r
from meshio import pmd, englishmap
+FS_ENCODING=sys.getfilesystemencoding()
if os.path.exists(os.path.dirname(sys.argv[0])+"/utf8"):
- FS_ENCODING='utf-8'
+ INTERNAL_ENCODING='utf-8'
else:
- FS_ENCODING=sys.getfilesystemencoding()
-print FS_ENCODING
-
-
-def cp932_to_utf8(cp932):
- return str(cp932).decode('cp932').encode('utf-8')
+ INTERNAL_ENCODING=FS_ENCODING
class ProgressBar(object):
print message
message="%s: %s" % (self.base, message)
if message.__class__ is unicode:
- message=message.encode('utf-8')
+ message=message.encode(INTERNAL_ENCODING)
Blender.Window.DrawProgressBar(self.progress, message)
def finish(self):
def get_bone_name(l, index):
- name=englishmap.getEnglishBoneName(l.bones[index].name.decode('cp932'))
- return name if name else cp932_to_utf8(l.bones[index].name)
+ name=englishmap.getEnglishBoneName(l.bones[index].getName())
+ return name if name else l.bones[index].getName().encode(INTERNAL_ENCODING)
def createMaterial():
material.setSpecCol([m.specular.r, m.specular.g, m.specular.b])
material.setMirCol([m.ambient.r, m.ambient.g, m.ambient.b])
# set texture
- if m.texture!='':
- if not tex_dir.endswith("\\") and not tex_dir.endswith("/"):
- tex_dir+="/"
- tex_path = tex_dir+m.texture
+ if m.getTexture()!='':
+ tex_path = os.path.join(tex_dir, m.getTexture()).encode(
+ INTERNAL_ENCODING)
tex = Blender.Texture.New()
tex.setType("Image")
try:
- tex.image = Blender.Image.Load(cp932_to_utf8(tex_path))
+ tex.image = Blender.Image.Load(tex_path)
material.setTexture(0, tex)
material.getTextures()[0].texco = Blender.Texture.TexCo.UV
except IOError:
return
bone = Blender.Armature.Editbone()
- name=englishmap.getEnglishBoneName(b.name.decode('cp932'))
- bone.name = name if name else cp932_to_utf8(b.name)
+ name=englishmap.getEnglishBoneName(b.getName())
+ bone.name = name if name else b.getName().encode(
+ INTERNAL_ENCODING)
armature.bones[bone.name] = bone
if parent:
bone.head = Mathutils.Vector(*convert_coord(b.pos))
# IKtarget->parent(=IK).name
target=l.bones[ik.target]
parent=l.bones[target.parent_index]
- name = englishmap.getEnglishBoneName(parent.name.decode('cp932'))
+ name = englishmap.getEnglishBoneName(parent.getName())
p_bone = pose.bones[name]
if not p_bone:
print 'not found', name
ik_const[cSetting.CHAINLEN] = len(ik.children)
ik_const[cSetting.TARGET] = armature_object
ik_const[cSetting.BONE] = englishmap.getEnglishBoneName(
- l.bones[ik.index].name.decode('cp932'))
+ l.bones[ik.index].getName())
lrot_const = p_bone.constraints.append(Blender.Constraint.Type.LIMITROT)
lrot_const.influence = ik.weight
lrot_const[cSetting.OWNERSPACE] = cSetting.SPACE_LOCAL
for s in l.morph_list:
if s.name==base.name:
continue
- name=englishmap.getEnglishSkinName(s.name.decode('cp932'))
+ name=englishmap.getEnglishSkinName(s.getName())
if not name:
- name=cp932_to_utf8(s.name)
+ name=s.getName().encode(INTERNAL_ENCODING)
for index, offset in zip(s.indices, s.pos_list):
try:
vertex_index=vertex_map[base.indices[index]]
"""
@param filename
"""
- filename=filename.decode(FS_ENCODING)
+ filename=filename.decode(INTERNAL_ENCODING)
tex_dir=os.path.dirname(filename)
# progress
progress_start('pmd_import')
+ print(INTERNAL_ENCODING, FS_ENCODING)
# load pmd
progress_set('load %s' % filename, 0.0)
locale.setlocale(locale.LC_ALL, '')
l=pmd.IO()
- if not l.read(filename.encode('cp932')):
+ if not l.read(filename):
print "fail to load %s" % filename
return
progress_set('loaded %s' % filename, 0.1)
from meshio import vmd, englishmap
+FS_ENCODING=sys.getfilesystemencoding()
if os.path.exists(os.path.dirname(sys.argv[0])+"/utf8"):
- FS_ENCODING='utf-8'
+ INTERNAL_ENCODING='utf-8'
else:
- FS_ENCODING=sys.getfilesystemencoding()
-print FS_ENCODING
+ INTERNAL_ENCODING=FS_ENCODING
class ProgressBar(object):
print message
message="%s: %s" % (self.base, message)
if message.__class__ is unicode:
- message=message.encode('utf-8')
+ message=message.encode(INTERNAL_ENCODING)
Blender.Window.DrawProgressBar(self.progress, message)
def finish(self):
def run(filename):
- filename=filename.decode(FS_ENCODING)
+ filename=filename.decode(INTERNAL_ENCODING)
# progress
progress_start('vmd_import')
+ print(INTERNAL_ENCODING, FS_ENCODING)
# load vmd
progress_set('load %s' % filename, 0.0)
l=vmd.IO()
- if not l.read(filename.encode('cp932')):
+ if not l.read(filename.encode(FS_ENCODING)):
print "failt to load", filename
return
progress_set('loaded %s' % filename, 1.0)
texture=bpy.data.textures.new(texture_name)
texture.type='IMAGE'
texture=texture.recast_type()
- texturePath="%s/%s" % (directory, texture_name)
+ #texturePath="%s/%s" % (directory, texture_name)
+ texturePath=os.path.join(directory, texture_name)
print('create_texture', texturePath)
image=bpy.data.images.load(texturePath)
texture.image=image
std::vector<Face> faces;
Object()
- : mirror(0)
+ : depth(0), folding(0), visible(1), locking(0), shading(0),
+ smoothing(60.0f), color_type(0), mirror(0)
{}
std::wstring getName()const;
IO();
~IO();
bool read(binary::IReader &reader);
+ bool read(const wchar_t *path);
bool read(const char *path);
bool write(std::ostream &os);
return Implementation(*this, reader).parse();
}
+bool IO::read(const wchar_t *path)
+{
+ std::vector<char> all;
+ binary::readAll(path, all);
+ if(all.empty()){
+ return false;
+ }
+ binary::MemoryReader reader(&all[0], all.size());
+ return read(reader);
+}
+
bool IO::read(const char *path)
{
std::vector<char> all;
#!/usr/bin/env python
# coding: utf8
+import sys
###############################################################################
# 日本語名との変換マップ
if v==name:
return k
+if sys.version_info[0]<3:
+ print('convert boneMap and skinMap to unicode')
+ # python2.x
+ # unicodeに変換
+ for k in boneMap.keys():
+ boneMap[k]=boneMap[k].decode('utf-8')
+ for k in skinMap.keys():
+ skinMap[k]=skinMap[k].decode('utf-8')
+
-# setup.py
+# coding: utf-8
from distutils.core import setup, Extension
+import os
-# mqo
-###############################################################################
-mqoExtension=Extension("_mqo",
- ["mqo.i"],
- swig_opts=['-c++'],
- include_dirs=[
+option={
+ 'swig_opts': ['-c++'],
+ 'include_dirs': [
'../include'
],
- libraries=[
+ 'libraries': [
'meshio',
],
- library_dirs=[
+ 'library_dirs': [
'../release',
- 'T:/Blender/bf-blender/lib/windows/python/lib',
],
- extra_compile_args=[
- '/EHsc', '/MT', '/D_WIN32',
- ],
- extra_link_args=[
- ],
- )
+ }
-# pmd
-###############################################################################
-pmdExtension=Extension("_pmd",
- ["pmd.i"],
- swig_opts=['-c++'],
- include_dirs=[
- '../include'
- ],
- libraries=[
- 'meshio',
- ],
- library_dirs=[
- '../release',
- ],
- extra_compile_args=[
- '/EHsc', '/MT', '/D_WIN32',
- ],
- extra_link_args=[
- ],
- )
-
-# vmd
-###############################################################################
-vmdExtension=Extension("_vmd",
- ["vmd.i"],
- swig_opts=['-c++'],
- include_dirs=[
- '../include'
- ],
- libraries=[
- 'meshio',
- ],
- library_dirs=[
- '../release',
- ],
- extra_compile_args=[
- '/EHsc', '/MT', '/D_WIN32',
- ],
- extra_link_args=[
- ],
- )
+if os.name=='nt':
+ option['extra_compile_args']=[
+ '/EHsc', '/MT',
+ ]
+ext_modules=[
+ Extension("_mqo", ["mqo.i"], **option),
+ Extension("_pmd", ["pmd.i"], **option),
+ Extension("_vmd", ["vmd.i"], **option),
+ ]
-setup(name="meshio",
- packages=['meshio'],
- package_dir={'meshio': '.'},
- ext_package='meshio',
- ext_modules=[mqoExtension, pmdExtension, vmdExtension]
- )
+# スタティックruntime(/MT)とリンクするのでマニフェストが不要だが
+# mt.exeの呼び出しを止めることができないので
+for i in range(len(ext_modules)+1):
+ try:
+ setup(name="meshio",
+ version='0.1',
+ description='polygon mesh io utilities',
+ author='ousttrue',
+ author_email='ousttrue@gmail.com',
+ url='http://sourceforge.jp/projects/meshio/',
+ packages=['meshio'],
+ package_dir={'meshio': '.'},
+ ext_package='meshio',
+ ext_modules=ext_modules
+ )
+ break
+ except:
+ continue