From 36d9293a117d66fa5820d9ea4066e96dfd179815 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 13 Oct 2011 22:27:46 +0900 Subject: [PATCH] implement vertex attributes --- blender26-meshio/bl.py | 2 ++ blender26-meshio/import_pmx.py | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/blender26-meshio/bl.py b/blender26-meshio/bl.py index 4d5afde..c668fa0 100644 --- a/blender26-meshio/bl.py +++ b/blender26-meshio/bl.py @@ -242,6 +242,8 @@ class object: @staticmethod def assignVertexGroup(o, name, index, weight): + if name not in o.vertex_groups: + o.vertex_groups.new(name) o.vertex_groups[name].add([index], weight, 'ADD') @staticmethod diff --git a/blender26-meshio/import_pmx.py b/blender26-meshio/import_pmx.py index 8ffe81c..8b13d9e 100644 --- a/blender26-meshio/import_pmx.py +++ b/blender26-meshio/import_pmx.py @@ -6,6 +6,8 @@ PMXモデルをインポートする。 """ import os from . import bl +from .pymeshio import pmx +from .pymeshio.pmx import reader def convert_coord(pos): @@ -127,7 +129,6 @@ def _execute(filepath): bl.progress_set('load %s' % filepath, 0.0) print(filepath) - from .pymeshio.pmx import reader model=reader.read_from_file(filepath) if not model: print("fail to load %s" % filepath) @@ -181,6 +182,23 @@ def _execute(filepath): bl.mesh.addGeometry(mesh, vertices, [(indices[i], indices[i+1], indices[i+2]) for i in range(0, len(indices), 3)]) + assert(len(model.vertices), len(mesh.vertices)) + # set vertex attributes(normal, bone weights) + bl.mesh.useVertexUV(mesh) + for i, (v, mvert) in enumerate(zip(model.vertices, mesh.vertices)): + bl.vertex.setNormal(mvert, convert_coord(v.normal)) + if isinstance(v.deform, pmx.Bdef1): + bl.object.assignVertexGroup(mesh_object, + model.bones[v.deform.index0].name, i, 1.0) + elif isinstance(v.deform, pmx.Bdef2): + bl.object.assignVertexGroup(mesh_object, + model.bones[v.deform.index0].name, i, v.deform.weight0) + bl.object.assignVertexGroup(mesh_object, + model.bones[v.deform.index1].name, i, 1.0-v.deform.weight0) + else: + raise Exception("unknown deform: %s" % v.deform) + + if armature_object: # armature modifirer bl.modifier.addArmature(mesh_object, armature_object) -- 2.11.0